]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/44977 (ice in propagate_rhs_into_lhs, at tree-ssa-dom.c:2728)
authorRichard Guenther <rguenther@suse.de>
Tue, 20 Jul 2010 12:41:20 +0000 (12:41 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 20 Jul 2010 12:41:20 +0000 (12:41 +0000)
2010-07-20  Richard Guenther  <rguenther@suse.de>

PR tree-optimization/44977
* tree-ssa-dom.c (propagate_rhs_into_lhs): Do not create invalid
SSA form.

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

From-SVN: r162334

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

index 72cd6aee2e40765a34623ed00c551a8136f56931..2065af693faf2d26cb200e11921869aadef4898c 100644 (file)
@@ -1,3 +1,9 @@
+2010-07-20  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/44977
+       * tree-ssa-dom.c (propagate_rhs_into_lhs): Do not create invalid
+       SSA form.
+
 2010-07-20  Richard Guenther  <rguenther@suse.de>
 
        * lto-symtab.c (lto_symtab_merge): Use gimple_types_compatible_p.
index f1ea52f7d456434bd4092cf2ca660f25eb378f3f..ae38e84e348f1bad6d52bfb364cf377ae4ac5b99 100644 (file)
@@ -1,3 +1,8 @@
+2010-07-20  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/44977
+       * gcc.dg/torture/pr44977.c: New testcase.
+
 2010-07-20  Bingfeng Mei  <bmei@broadcom.com>
 
        * gcc.dg/lto/20090313_0.c: Use dg-require-effective-target
diff --git a/gcc/testsuite/gcc.dg/torture/pr44977.c b/gcc/testsuite/gcc.dg/torture/pr44977.c
new file mode 100644 (file)
index 0000000..66fd7d1
--- /dev/null
@@ -0,0 +1,41 @@
+/* { dg-do compile } */
+/* { dg-options "-w" } */
+
+static unsigned short
+foo (unsigned short ui1, unsigned short ui2)
+{
+  return ui1 - ui2;
+}
+
+static unsigned short
+bar (unsigned ui1, unsigned short ui2)
+{
+  return ui1 + ui2;
+}
+
+struct S1
+{
+  const short f3;
+};
+int g_31;
+short g_67;
+struct S1 g_68[2][5][9][1][1] = {
+};
+
+int func_90 (int);
+
+int int329 (int * const *const int32p_81, short ** p_82)
+{
+  short l_169[8];
+  for (g_31 = 0; g_31 <= 0; g_31 = foo (g_31, 1))
+    {
+      short l_85;
+lbl_89:g_67 ^= l_85;
+       for (l_85 = 0; l_85 >= 0; l_85 = bar)
+        if (g_31)
+          goto lbl_89;
+       func_90 (1), g_68[0][2][2][0][0].f3, 0;
+    }
+  return l_169[6];
+}
+
index 68338206a8ad8f742b320c78fa5ee7958f713b72..4715592746c36ecd6c6206976f69e86f0a29917c 100644 (file)
@@ -2559,6 +2559,20 @@ propagate_rhs_into_lhs (gimple stmt, tree lhs, tree rhs, bitmap interesting_name
              continue;
            }
 
+         /* It's not ok to propagate into the definition stmt of RHS.
+               <bb 9>:
+                 # prephitmp.12_36 = PHI <g_67.1_6(9)>
+                 g_67.1_6 = prephitmp.12_36;
+                 goto <bb 9>;
+            While this is strictly all dead code we do not want to
+            deal with this here.  */
+         if (TREE_CODE (rhs) == SSA_NAME
+             && SSA_NAME_DEF_STMT (rhs) == use_stmt)
+           {
+             all = false;
+             continue;
+           }
+
          /* Dump details.  */
          if (dump_file && (dump_flags & TDF_DETAILS))
            {