/* { dg-do compile } */ /* { dg-options "-mno-speculate-indirect-jumps" } */ /* { dg-warning "'-mno-speculate-indirect-jumps' is deprecated" "" { target *-*-* } 0 } */ /* Test for deliberate misprediction of jump tables. */ void bar (void); int foo (int x) { int a; switch (x) { default: a = -1; break; case 0: a = x * x; break; case 1: a = x + 1; break; case 2: a = x + x; break; case 3: a = x << 3; break; case 4: a = x >> 1; break; case 5: a = x; break; case 6: a = 0; break; case 7: a = x * x + x; break; } bar(); return a; } /* { dg-final { scan-assembler "crset" } } */ /* { dg-final { scan-assembler "beqctr-" } } */ /* { dg-final { scan-assembler {b \$} } } */