| /* { dg-do compile } */ |
| /* { dg-require-effective-target freorder } */ |
| /* { dg-require-effective-target fpic } */ |
| /* { dg-options "-O2 -freorder-blocks-and-partition -fpic" } */ |
| |
| __attribute__((noinline, noclone)) |
| void bar (void *x) |
| { |
| asm volatile ("" : : "r" (x) : "memory"); |
| } |
| |
| __attribute__((noinline, noclone)) |
| void baz (void) |
| { |
| asm volatile ("" : : : "memory"); |
| } |
| |
| __attribute__((noinline, noclone)) |
| int foo (int x) |
| { |
| __label__ lab; |
| if (__builtin_expect (x, 0)) |
| { |
| lab: |
| baz (); |
| return 2; |
| } |
| bar (&&lab); |
| return 1; |
| } |
| |
| int |
| main (void) |
| { |
| int x, i; |
| asm volatile ("" : "=r" (x) : "0" (0)); |
| for (i = 0; i < 1000000; i++) |
| foo (x); |
| return 0; |
| } |