| // { dg-do compile } |
| // { dg-options "-O2 -fdisable-tree-ethread -fdisable-tree-thread1 -fdisable-tree-thread2 -fno-tree-dominator-opts -fdump-tree-threadfull2-details" } |
| |
| // Test that we can thread jumps across the backedge of a loop through |
| // the switch statement to a particular case. |
| // |
| // Just in case, we disable all the jump threaders before loop |
| // optimizations to make sure we get a clean stab at this. |
| |
| int foo (unsigned int x, int s) |
| { |
| while (s != 999) |
| { |
| switch (s) |
| { |
| case 0: |
| if (x) |
| s = 1; |
| break; |
| case 1: |
| if (x) |
| s = 999; |
| break; |
| default: |
| break; |
| } |
| x++; |
| } |
| return s; |
| } |
| |
| // { dg-final { scan-tree-dump "Registering jump thread:.*normal \\(back\\)" "threadfull2" } } |