aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSebastian Pop <sebastian.pop@amd.com>2009-11-25 05:35:58 +0000
committerSebastian Pop <spop@gcc.gnu.org>2009-11-25 05:35:58 +0000
commit4bf4e16939037ca9a2c9c57e3161d6bba63efc83 (patch)
treed4dbcc9b282e90c1af5f8c3453292529c805b412 /gcc
parent12aec7316d603a24dee7ae5d548ca18e1e0cc0c6 (diff)
downloadgcc-4bf4e16939037ca9a2c9c57e3161d6bba63efc83.zip
gcc-4bf4e16939037ca9a2c9c57e3161d6bba63efc83.tar.gz
gcc-4bf4e16939037ca9a2c9c57e3161d6bba63efc83.tar.bz2
re PR middle-end/40281 (-fprefetch-loop-arrays: ICE: in initialize_matrix_A, at tree-data-ref.c:1887)
2009-11-18 Sebastian Pop <sebastian.pop@amd.com> PR middle-end/40281 * testsuite/gcc.dg/graphite/pr40281.c: New. * tree-scalar-evolution.c (instantiate_scev_poly): Base and stride evolutions should not variate in inner loops. From-SVN: r154641
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog.graphite8
-rw-r--r--gcc/tree-scalar-evolution.c14
2 files changed, 21 insertions, 1 deletions
diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite
index ba942d5..37da0f68 100644
--- a/gcc/ChangeLog.graphite
+++ b/gcc/ChangeLog.graphite
@@ -1,5 +1,13 @@
2009-11-18 Sebastian Pop <sebastian.pop@amd.com>
+ PR middle-end/40281
+ * testsuite/gcc.dg/graphite/pr40281.c: New.
+
+ * tree-scalar-evolution.c (instantiate_scev_poly): Base and stride
+ evolutions should not variate in inner loops.
+
+2009-11-18 Sebastian Pop <sebastian.pop@amd.com>
+
PR middle-end/42050
* testsuite/gfortran.dg/graphite/pr42050.f90: New.
diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c
index e3f33e2..2cae2ce 100644
--- a/gcc/tree-scalar-evolution.c
+++ b/gcc/tree-scalar-evolution.c
@@ -2226,9 +2226,21 @@ instantiate_scev_poly (basic_block instantiate_below,
if (CHREC_LEFT (chrec) != op0
|| CHREC_RIGHT (chrec) != op1)
{
+ unsigned var = CHREC_VARIABLE (chrec);
+
+ /* When the instantiated stride or base has an evolution in an
+ innermost loop, return chrec_dont_know, as this is not a
+ valid SCEV representation. In the reduced testcase for
+ PR40281 we would have {0, +, {1, +, 1}_2}_1 that has no
+ meaning. */
+ if ((tree_is_chrec (op0) && CHREC_VARIABLE (op0) > var)
+ || (tree_is_chrec (op1) && CHREC_VARIABLE (op1) > var))
+ return chrec_dont_know;
+
op1 = chrec_convert_rhs (chrec_type (op0), op1, NULL);
- chrec = build_polynomial_chrec (CHREC_VARIABLE (chrec), op0, op1);
+ chrec = build_polynomial_chrec (var, op0, op1);
}
+
return chrec;
}