re PR tree-optimization/30565 (ICE with -O1 -ftree-pre -ftree-loop-linear)
authorZdenek Dvorak <dvorakz@suse.cz>
Thu, 3 May 2007 13:27:26 +0000 (15:27 +0200)
committerZdenek Dvorak <rakdver@gcc.gnu.org>
Thu, 3 May 2007 13:27:26 +0000 (13:27 +0000)
PR tree-optimization/30565
* lambda-code.c (perfect_nestify): Fix updating of dominators.

* gcc.dg/tree-ssa/loop-27.c: New test.

From-SVN: r124378

gcc/ChangeLog
gcc/lambda-code.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/loop-27.c [new file with mode: 0644]

index 0d7c9dd..bfbde54 100644 (file)
@@ -1,3 +1,8 @@
+2007-05-03  Zdenek Dvorak  <dvorakz@suse.cz>
+
+       PR tree-optimization/30565
+       * lambda-code.c (perfect_nestify): Fix updating of dominators.
+
 2007-05-03  Bernd Schmidt  <bernd.schmidt@analog.com>
 
        * config/bfin/bfin.md (addpdi3, us_truncpdisi2): New patterns.
index ca07bdc..655c025 100644 (file)
@@ -2521,7 +2521,8 @@ perfect_nestify (struct loop *loop,
   set_immediate_dominator (CDI_DOMINATORS, preheaderbb, 
                           single_exit (loop)->src);
   set_immediate_dominator (CDI_DOMINATORS, latchbb, bodybb);
-  set_immediate_dominator (CDI_DOMINATORS, olddest, bodybb);
+  set_immediate_dominator (CDI_DOMINATORS, olddest,
+                          recount_dominator (CDI_DOMINATORS, olddest));
   /* Create the new iv.  */
   oldivvar = VEC_index (tree, loopivs, 0);
   ivvar = create_tmp_var (TREE_TYPE (oldivvar), "perfectiv");
index 7a103a1..1f0e637 100644 (file)
@@ -1,3 +1,8 @@
+2007-05-03  Zdenek Dvorak  <dvorakz@suse.cz>
+
+       PR tree-optimization/30565
+       * gcc.dg/tree-ssa/loop-27.c: New test.
+
 2007-05-03  Bernd Schmidt  <bernd.schmidt@analog.com>
 
        * gcc.target/bfin/frmul.c (__v2hi): Use short as base type, not itn.
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loop-27.c b/gcc/testsuite/gcc.dg/tree-ssa/loop-27.c
new file mode 100644 (file)
index 0000000..802b7c2
--- /dev/null
@@ -0,0 +1,14 @@
+/* PR tree-optimization/30565  */
+
+/* { dg-do compile } */
+/* { dg-options "-O1 -ftree-pre -ftree-loop-linear" } */
+
+static double snrdef[32];
+void psycho_n1(double ltmin[2][32], int stereo)
+{
+  int i, k;
+
+  for (k = 0; k < stereo; k++)
+    for (i = 0; i < 32; i++)
+      ltmin[k][i] = snrdef[i];
+}