re PR tree-optimization/35607 (IVOPTs produces invalid gimple)
authorRichard Guenther <rguenther@suse.de>
Sun, 16 Mar 2008 15:45:09 +0000 (15:45 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Sun, 16 Mar 2008 15:45:09 +0000 (15:45 +0000)
2008-03-16  Richard Guenther  <rguenther@suse.de>

PR middle-end/35607
* tree-ssa-loop-niter.c (expand_simple_operations): Do not
expand TREE_INVARIANT operations that are not gimple invariant.

* gcc.c-torture/compile/pr35607.c: New testcase.
* gcc.dg/tree-ssa/loop-19.c: Use -O2 to avoid vectorization.

From-SVN: r133273

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr35607.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/loop-19.c
gcc/tree-ssa-loop-niter.c

index 246acc9d1f9221bc6083a831acf81794f1d58e70..58d47850c1868532044d4c2e410057a4ffd0b19b 100644 (file)
@@ -1,3 +1,9 @@
+2008-03-16  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/35607
+       * tree-ssa-loop-niter.c (expand_simple_operations): Do not
+       expand TREE_INVARIANT operations that are not gimple invariant.
+
 2008-03-16  Hans-Peter Nilsson  <hp@axis.com>
 
        * doc/extend.texi (Alignment): Say that the ABI controls
index 7bb0108ef25ebaa1ad4611d352afd1aab95ba3a0..d6c830a3e18e9940a319f45977c2c9b05eec8f81 100644 (file)
@@ -1,3 +1,9 @@
+2008-03-16  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/35607
+       * gcc.c-torture/compile/pr35607.c: New testcase.
+       * gcc.dg/tree-ssa/loop-19.c: Use -O2 to avoid vectorization.
+
 2008-03-16  Daniel Franke  <franke.daniel@gmail.com>
 
        PR fortran/35582
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr35607.c b/gcc/testsuite/gcc.c-torture/compile/pr35607.c
new file mode 100644 (file)
index 0000000..7f5aa7a
--- /dev/null
@@ -0,0 +1,9 @@
+extern void (*__fini_array_start []) (void);
+extern void (*__fini_array_end []) (void);
+void
+__libc_csu_fini (void)
+{
+  __SIZE_TYPE__ i = __fini_array_end - __fini_array_start;
+  while (i-- > 0)
+    (*__fini_array_start [i]) ();
+}
index 748c6e8143499852a1adf34a25a6a747268670f3..1614f7e4de14a52905f04873605463200785c625 100644 (file)
@@ -6,7 +6,7 @@
 
 /* { dg-do compile { target i?86-*-* x86_64-*-* powerpc*-*-*} } */
 /* { dg-require-effective-target nonpic } */
-/* { dg-options "-O3 -fdump-tree-final_cleanup" } */
+/* { dg-options "-O2 -fdump-tree-final_cleanup" } */
 
 # define N      2000000
 static double   a[N],c[N];
index 40e7051c265bf9d70dc54ac93179dbf15a8a9b27..0696342bd1b4140be5df73acf5cfb8d305683a42 100644 (file)
@@ -1436,6 +1436,10 @@ expand_simple_operations (tree expr)
     return expr;
 
   e = GIMPLE_STMT_OPERAND (stmt, 1);
+  /* Do not expand random invariants.  */
+  if (TREE_INVARIANT (e)
+      && !is_gimple_min_invariant (e))
+    return expr;
   if (/* Casts are simple.  */
       TREE_CODE (e) != NOP_EXPR
       && TREE_CODE (e) != CONVERT_EXPR