The following reverts a change I did during the various PRE cleanups.

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

2013-01-04  Richard Biener  <rguent...@suse.de>

        PR tree-optimization/55862
        * tree-ssa-pre.c (phi_translate_1): Valueize SSA names after
        translating them through PHI nodes.

        * gcc.dg/torture/pr55862.c: New testcase.

Index: gcc/tree-ssa-pre.c
===================================================================
*** gcc/tree-ssa-pre.c  (revision 194900)
--- gcc/tree-ssa-pre.c  (working copy)
*************** phi_translate_1 (pre_expr expr, bitmap_s
*** 1729,1734 ****
--- 1729,1738 ----
            edge e = find_edge (pred, gimple_bb (def_stmt));
            tree def = PHI_ARG_DEF (def_stmt, e->dest_idx);
  
+           /* Valueize it.  */
+           if (TREE_CODE (def) == SSA_NAME)
+             def = VN_INFO (def)->valnum;
+ 
            /* Handle constant. */
            if (is_gimple_min_invariant (def))
              return get_or_alloc_expr_for_constant (def);
Index: gcc/testsuite/gcc.dg/torture/pr55862.c
===================================================================
*** gcc/testsuite/gcc.dg/torture/pr55862.c      (revision 0)
--- gcc/testsuite/gcc.dg/torture/pr55862.c      (working copy)
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile } */
+ 
+ int g, a, *b;
+ 
+ void f(void)
+ {
+   int *p;
+ 
+   if(g)
+     {
+       int **k = &p;
+ 
+       for(; g; p++)
+       for(a = 0; a < 1; a++)
+         {
+           int *c = p;
+ label2:
+           if(a < 1)
+             *c = 0;
+         }
+ 
+       goto label1;
+ 
+       while(g++)
+       for(*b = 0; *b; b++)
+         label1:
+             ;
+     }
+ 
+   goto label2;
+ }

Reply via email to