re PR c/48146 (ICE tree check: expected ssa_name, have var_decl in has_zero_uses...
authorRichard Guenther <rguenther@suse.de>
Wed, 16 Mar 2011 12:41:08 +0000 (12:41 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 16 Mar 2011 12:41:08 +0000 (12:41 +0000)
2011-03-16  Richard Guenther  <rguenther@suse.de>

PR tree-optimization/48146
* tree-ssa-sink.c (sink_code_in_bb): Manually update virtual
operands avoiding the need for renaming.

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

From-SVN: r171045

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/pr48146.c [new file with mode: 0644]
gcc/tree-ssa-sink.c

index f42547c88fbb59eb16c75b63de026d3b942e820c..7e81a550dfbffbd59961a1c21a5f33155656f5d8 100644 (file)
@@ -1,3 +1,9 @@
+2011-03-16  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/48146
+       * tree-ssa-sink.c (sink_code_in_bb): Manually update virtual
+       operands avoiding the need for renaming.
+
 2011-03-16  Richard Guenther  <rguenther@suse.de>
 
        * gimple-fold.c (maybe_fold_reference): Open-code relevant
index b3d5f8193fd95f6dd0279ca077816793976cfc22..2e6963b0460e791996ec2109f8307c84f1e7f0e1 100644 (file)
@@ -1,3 +1,8 @@
+2011-03-16  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/48146
+       * gcc.dg/torture/pr48146.c: New testcase.
+
 2011-03-16  Richard Guenther  <rguenther@suse.de>
 
        * gcc.dg/tree-ssa/pr14814.c: Adjust.
diff --git a/gcc/testsuite/gcc.dg/torture/pr48146.c b/gcc/testsuite/gcc.dg/torture/pr48146.c
new file mode 100644 (file)
index 0000000..c208325
--- /dev/null
@@ -0,0 +1,35 @@
+/* { dg-do compile } */
+
+static unsigned char
+safe_sub_func_int_s_s (int si1, unsigned char si2)
+{
+  return si1 ^ si2 & -si2 ^ si2 ? : si1 - si2;
+}
+
+int g_2[10] = {
+    0x90AC204EL
+};
+
+volatile unsigned char g_39;
+
+unsigned char
+func_67 (unsigned short p_68)
+{
+  unsigned char l_92;
+  unsigned char l_74;
+  int *l = &g_2[6];
+lbl_90:*l ^= 1;
+       if (p_68)
+        goto lbl_93;
+       for (l_74 = 0;; l_74 = safe_sub_func_int_s_s (l_74, 1))
+        {
+          if (l_74)
+            goto lbl_90;
+lbl_93:l_92 ^= 0 != &g_39;
+       if (0)
+        {
+        }
+       else
+        *l = 1;
+        }
+}
index c3119ba5a70367acda940d0a868884cffa401a46..4dc5ae44a27d51a247514f7ff449bb6b138440de 100644 (file)
@@ -505,12 +505,18 @@ sink_code_in_bb (basic_block bb)
                   bb->index, (gsi_bb (togsi))->index);
        }
 
-      /* Prepare for VOP update.  */
+      /* Update virtual operands of statements in the path we
+         do not sink to.  */
       if (gimple_vdef (stmt))
        {
-         unlink_stmt_vdef (stmt);
-         gimple_set_vdef (stmt, gimple_vop (cfun));
-         mark_sym_for_renaming (gimple_vop (cfun));
+         imm_use_iterator iter;
+         use_operand_p use_p;
+         gimple vuse_stmt;
+
+         FOR_EACH_IMM_USE_STMT (vuse_stmt, iter, gimple_vdef (stmt))
+           if (gimple_code (vuse_stmt) != GIMPLE_PHI)
+             FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
+               SET_USE (use_p, gimple_vuse (stmt));
        }
 
       /* If this is the end of the basic block, we need to insert at the end