OSDN Git Service

2005-02-03 Andrew Pinski <pinskia@physics.uc.edu>
authorpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 3 Feb 2005 15:26:29 +0000 (15:26 +0000)
committerpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 3 Feb 2005 15:26:29 +0000 (15:26 +0000)
        PR tree-opt/19768
        * g++.dg/opt/pr19768.C: New test.

2005-02-03  Andrew Pinski  <pinskia@physics.uc.edu>

        PR tree-opt/19768
        * tree-ssa-dse.c (fix_phi_uses): Update the occurs in abnormal
        phi flag if the phi is abnormal.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@94660 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/opt/pr19768.C [new file with mode: 0644]
gcc/tree-ssa-dse.c

index b0561fd..c7b41ad 100644 (file)
@@ -1,5 +1,11 @@
 2005-02-03  Andrew Pinski  <pinskia@physics.uc.edu>
 
+       PR tree-opt/19768
+       * tree-ssa-dse.c (fix_phi_uses): Update the occurs in abnormal
+       phi flag if the phi is abnormal.
+
+2005-02-03  Andrew Pinski  <pinskia@physics.uc.edu>
+
        PR tree-opt/19736
        * tree-ssa.c (replace_immediate_uses): Update the immediate_uses
        information for the new statement.
index 32e8ecb..608b077 100644 (file)
@@ -1,5 +1,10 @@
 2005-02-03  Andrew Pinski  <pinskia@physics.uc.edu>
 
+       PR tree-opt/19768
+       * g++.dg/opt/pr19768.C: New test.
+
+2005-02-03  Andrew Pinski  <pinskia@physics.uc.edu>
+
        PR tree-opt/19736
        * gcc.c-torture/compile/pr19736.c: New test.
 
diff --git a/gcc/testsuite/g++.dg/opt/pr19768.C b/gcc/testsuite/g++.dg/opt/pr19768.C
new file mode 100644 (file)
index 0000000..376ca99
--- /dev/null
@@ -0,0 +1,29 @@
+//  PR tree-opt/19768
+// tree DSE was removing one store to LL.currentLevel
+//  but forgot that since the vop was in an abnormal PHI
+//  that we have to update the SSA_NAME which we propagate
+//  into the abnormal PHI
+
+// { dg-do compile }
+// { dg-options "-O" }
+
+struct LeveLogger
+{
+  int currentLevel;
+};
+extern LeveLogger LL;
+struct gg
+{
+  ~gg ( void )
+    { LL.currentLevel = 1; }
+};
+void f(void);
+void g ( void )
+{
+  gg sll;
+  {
+    gg sll;
+    f();
+  }
+  f();
+}
index 5d29e03..625e1d1 100644 (file)
@@ -134,7 +134,13 @@ fix_phi_uses (tree phi, tree stmt)
   def_operand_p def_p;
   ssa_op_iter iter;
   int i;
-
+  edge e;
+  edge_iterator ei;
+  
+  FOR_EACH_EDGE (e, ei, PHI_BB (phi)->preds) 
+  if (e->flags & EDGE_ABNORMAL)
+    break;
+  
   get_stmt_operands (stmt);
 
   FOR_EACH_SSA_MAYDEF_OPERAND (def_p, use_p, stmt, iter)
@@ -146,7 +152,12 @@ fix_phi_uses (tree phi, tree stmt)
         them with the appropriate V_MAY_DEF_OP.  */
       for (i = 0; i < PHI_NUM_ARGS (phi); i++)
        if (v_may_def == PHI_ARG_DEF (phi, i))
-         SET_PHI_ARG_DEF (phi, i, v_may_use);
+         {
+           SET_PHI_ARG_DEF (phi, i, v_may_use);
+           /* Update if the new phi argument is an abnormal phi.  */
+           if (e != NULL)
+             SSA_NAME_OCCURS_IN_ABNORMAL_PHI (v_may_use) = 1;
+         }
     }
 }