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 
      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