Commit a3209843 authored by mrchebas@gmail.com's avatar mrchebas@gmail.com
Browse files

don't make jump tables for small switches (<= 4 branches)

Only affects -fasm: gcc makes its own decisions about jump tables
parent 95d05f88
......@@ -480,9 +480,11 @@ mk_switch tag_expr branches mb_deflt lo_tag hi_tag via_C
text "real_lo_tag: " <+> int real_lo_tag <+>
text "real_hi_tag: " <+> int real_hi_tag) $ -}
ASSERT( n_branches > 1 && n_tags > 1 )
n_tags > 2 && (small || dense || via_C)
-- a 2-branch switch always turns into an if.
small = n_tags <= 4
n_tags > 2 && (via_C || (dense && big_enough))
-- up to 4 branches we use a decision tree, otherwise
-- a switch (== jump table in the NCG). This seems to be
-- optimal, and corresponds with what gcc does.
big_enough = n_branches > 4
dense = n_branches > (n_tags `div` 2)
n_branches = length branches
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment