1/* { dg-do compile } */ 2/* { dg-options "-O2 -fdump-tree-dom2-details" } */ 3 4struct tree_common 5{ 6 int code; 7}; 8union tree_node 9{ 10 struct tree_common common; 11}; 12typedef union tree_node *tree; 13 14extern tree test (tree, int, int); 15extern tree foo (void); 16extern void abort (void) __attribute__ ((__noreturn__)); 17 18tree 19test (tree expr, int t, int D17630) 20{ 21 int __i; 22 23L0: 24 if (expr->common.code != 142) goto L23; else goto L2; 25 26L2: 27 __i = 0; 28 goto L10; 29 30L10: 31 __i = __i + 1; 32 if (D17630 != __i) goto L8; else goto L19; 33 34L8: 35 if (t) goto L15; else goto L10; 36 37L15: 38 expr = foo (); 39 if (expr->common.code != 142) goto L23; else goto L0; 40 41L19: 42 abort (); 43 44L23: 45 return expr; 46} 47 48 49/* We should thread the backedge to the top of the loop; ie we only 50 execute the if (expr->common.code != 142) test once per loop 51 iteration. */ 52/* { dg-final { scan-tree-dump-times "Threaded jump" 1 "dom2" } } */ 53/* { dg-final { cleanup-tree-dump "dom2" } } */ 54 55