aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2008-03-16 15:45:09 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2008-03-16 15:45:09 +0000
commit461f8762a0b00404770bbbcc288c741f931140e4 (patch)
tree31a2feec16994e9a97405adbceee111bf59d80b5
parent2a31c49ceb396963e298abb196fe3b099814cd3f (diff)
downloadgcc-461f8762a0b00404770bbbcc288c741f931140e4.zip
gcc-461f8762a0b00404770bbbcc288c741f931140e4.tar.gz
gcc-461f8762a0b00404770bbbcc288c741f931140e4.tar.bz2
re PR tree-optimization/35607 (IVOPTs produces invalid gimple)
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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr35607.c9
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/loop-19.c2
-rw-r--r--gcc/tree-ssa-loop-niter.c4
5 files changed, 26 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 246acc9..58d4785 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7bb0108..d6c830a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..7f5aa7a
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr35607.c
@@ -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]) ();
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loop-19.c b/gcc/testsuite/gcc.dg/tree-ssa/loop-19.c
index 748c6e8..1614f7e 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loop-19.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loop-19.c
@@ -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];
diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c
index 40e7051..0696342 100644
--- a/gcc/tree-ssa-loop-niter.c
+++ b/gcc/tree-ssa-loop-niter.c
@@ -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