1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-loop-im" } */
3 struct tree_common
4 {
5   int code;
6 };
7 union tree_node
8 {
9   struct tree_common common;
10 };
11 typedef union tree_node *tree;
12 
13 extern tree test (tree, int, int);
14 extern tree foo (void);
15 extern void abort (void) __attribute__ ((__noreturn__));
16 
17 /* Redundant loads of expr->common.code */
18 tree
test(tree expr,int t,int D17630)19 test (tree expr, int t, int D17630)
20 {
21   int __i;
22 
23 L0:
24   if (expr->common.code != 142) goto L23; else goto L2;
25 
26 L2:
27   __i = 0;
28   goto L10;
29 
30 L10:
31   __i = __i + 1;
32   if (D17630 != __i) goto L8; else goto L19;
33 
34 L8:
35   if (t) goto L15; else goto L10;
36 
37 L15:
38   expr = foo ();
39   if (expr->common.code != 142) goto L23; else goto L0;
40 
41 L19:
42   abort ();
43 
44 L23:
45   return expr;
46 }
47 /* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
48 
49