| // { dg-do compile } |
| // { dg-options "-O2 -fgimple -fdump-statistics" } |
| |
| // This is a collection of threadable paths. To simplify maintenance, |
| // there should only be one threadable path per function. |
| |
| int global; |
| |
| // The thread from 3->4->5 crosses loops but is allowed because it |
| // never crosses the latch (BB3) and is just an early exit out of the |
| // loop. |
| int __GIMPLE (ssa) |
| foo1 (int x) |
| { |
| int D_1420; |
| int a; |
| |
| __BB(2): |
| a_4 = ~x_3(D); |
| goto __BB4; |
| |
| // Latch. |
| __BB(3): |
| global = a_1; |
| goto __BB4; |
| |
| __BB(4,loop_header(1)): |
| a_1 = __PHI (__BB2: a_4, __BB3: 0); |
| if (a_1 != 0) |
| goto __BB3; |
| else |
| goto __BB5; |
| |
| __BB(5): |
| return; |
| |
| } |
| |
| // { dg-final { scan-tree-dump "Jumps threaded\" \"foo1\" 1" "statistics" } } |