https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121459
Bug ID: 121459 Summary: [13/14/15/16 Regression] switch table conversion does not like inner bb that comes from non switch Product: gcc Version: 16.0 Status: UNCONFIRMED Keywords: missed-optimization, needs-bisection Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: pinskia at gcc dot gnu.org Target Milestone: --- Take: ``` void foo (int, int); __attribute__((noinline, noclone)) void f1 (unsigned char v, int w) { unsigned char i, j; if (!w) { j = 7; i = 27; goto lab; } switch (v) { case 170: j = 7; i = 27; break; case 171: i = 8; j = 122; break; case 172: i = 21; j = -19; break; case 173: i = 18; j = 17; break; case 174: i = 33; j = 55; break; case 175: i = 33; j = 55; break; case 176: i = 33; j = 55; break; case 177: i = 33; j = 55; break; default: __builtin_abort (); } lab: foo (i, j); } ``` This will not be done into 2 table lookup since the values 7/27 are used from outside of the switch.