Merge from mainline
[official-gcc.git] / gcc / testsuite / gcc.dg / tree-ssa / pr21417.c
blobe6320071daf1db67c06768d343b97bd542a9e2ef
1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fdump-tree-dom3-details" } */
4 struct tree_common
5 {
6 int code;
7 };
8 union tree_node
9 {
10 struct tree_common common;
11 };
12 typedef union tree_node *tree;
14 extern tree test (tree, int, int);
15 extern tree foo (void);
16 extern void abort (void) __attribute__ ((__noreturn__));
18 tree
19 test (tree expr, int t, int D17630)
21 int __i;
23 L0:
24 if (expr->common.code != 142) goto L23; else goto L2;
26 L2:
27 __i = 0;
28 goto L10;
30 L10:
31 __i = __i + 1;
32 if (D17630 != __i) goto L8; else goto L19;
34 L8:
35 if (t) goto L15; else goto L10;
37 L15:
38 expr = foo ();
39 if (expr->common.code != 142) goto L23; else goto L0;
41 L19:
42 abort ();
44 L23:
45 return expr;
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 "dom3" } } */
53 /* { dg-final { cleanup-tree-dump "dom3" } } */