aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSebastian Pop <pop@cri.ensmp.fr>2005-08-21 12:48:23 +0200
committerSebastian Pop <spop@gcc.gnu.org>2005-08-21 10:48:23 +0000
commita1596edc4b46231e18e86e225fb19ecb0a1437e1 (patch)
treee7c1b97bd3fb20b67e45a396257d670957faddf4 /gcc
parent429268fc04441a4a6e31bc9e3c303a8f355f7c43 (diff)
downloadgcc-a1596edc4b46231e18e86e225fb19ecb0a1437e1.zip
gcc-a1596edc4b46231e18e86e225fb19ecb0a1437e1.tar.gz
gcc-a1596edc4b46231e18e86e225fb19ecb0a1437e1.tar.bz2
re PR tree-optimization/23434 (ICE: Segmentation fault compiling gsl1.5 at -O2)
PR tree-optimization/23434 * tree-ssa-loop-niter.c (proved_non_wrapping_p): Give up when the iteration bound is not an INTEGER_CST. From-SVN: r103315
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr23434.c19
-rw-r--r--gcc/tree-ssa-loop-niter.c4
3 files changed, 29 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 29c5316..6e2b4d8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2005-08-21 Sebastian Pop <pop@cri.ensmp.fr>
+
+ PR tree-optimization/23434
+ * tree-ssa-loop-niter.c (proved_non_wrapping_p): Give up when
+ the iteration bound is not an INTEGER_CST.
+
2005-08-21 Dorit Nuzman <dorit@il.ibm.com>
* tree-vect-transform.c (get_initial_def_for_reduction): Set
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr23434.c b/gcc/testsuite/gcc.dg/tree-ssa/pr23434.c
new file mode 100644
index 0000000..a21b955
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr23434.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+cblas_csyr2k (int N, void *A, int lda, float *B, int ldb, float *C, int k)
+{
+ int i, j;
+ for (;; k ++)
+ {
+ for (i = 0; i < N; i ++)
+ {
+ float t = ((float * ) A) [i];
+ for (j = i; j < N; j ++)
+ {
+ C [i + j] = B [ldb] * ((float *) A) [k];
+ C [lda] = 0 ;
+ }
+ }
+ }
+}
diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c
index fc5491b..a8e4737 100644
--- a/gcc/tree-ssa-loop-niter.c
+++ b/gcc/tree-ssa-loop-niter.c
@@ -1653,6 +1653,10 @@ proved_non_wrapping_p (tree at_stmt,
else
valid_niter = fold_convert (TREE_TYPE (bound), valid_niter);
+ /* Give up if BOUND was not folded to an INTEGER_CST, as in PR23434. */
+ if (TREE_CODE (bound) != INTEGER_CST)
+ return false;
+
/* After the statement niter_bound->at_stmt we know that anything is
executed at most BOUND times. */
if (at_stmt && stmt_dominates_stmt_p (niter_bound->at_stmt, at_stmt))