> > + /* Create chain of switch tests for each case. */ > > + tree switch_cond = NULL_TREE; > > + tree index = gimple_switch_index (sw); > > + for (unsigned i = 1; i < gimple_switch_num_labels (sw); i++) > > + { > > + tree label = gimple_switch_label (sw, i); > > + tree case_cond; > > + /* This currently cannot happen because tree-cfg lowers range > > + switches with a single destination to COND. */ > > But it should also lower non-range switches with a single destination ...? > See convert_single_case_switch. You say > > switch (i) > { > case 1: > case 5 ... 7: > return 42; > default: > return 0; > } > > doesn't hit here with a CASE_HIGH for the 5 ... 7 CASE_LABEL?
Yes it can actually happen. I'll correct the comment/description and add a test case. But your comment made me realize there is a major bug. if_convertible_switch_p also needs to check that that the labels don't fall through, so the the flow graph is diamond shape. Need some easy way to verify that. -Andi