aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.dg/graphite/pr42326-1.f9018
-rw-r--r--gcc/testsuite/gfortran.dg/graphite/pr42326.f9035
-rw-r--r--gcc/tree-chrec.c24
5 files changed, 90 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index dc260e5..4cbe879 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2010-03-05 Sebastian Pop <sebastian.pop@amd.com>
+
+ PR middle-end/42326
+ * tree-chrec.c (chrec_fold_plus_1): Do not handle convert expressions
+ that contain scevs.
+ (chrec_fold_multiply): Same.
+
2010-03-04 Andrew Pinski <andrew_pinski@caviumnetworks.com>
PR c/43248
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 989766b..a9ea6c3 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2010-03-05 Sebastian Pop <sebastian.pop@amd.com>
+
+ PR middle-end/42326
+ * gfortran.dg/graphite/pr42326.f90: New.
+ * gfortran.dg/graphite/pr42326-1.f90: New.
+
2010-03-05 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* lib/gnat.exp (gnat_init): Remove GNAT_UNDER_TEST_ORIG.
diff --git a/gcc/testsuite/gfortran.dg/graphite/pr42326-1.f90 b/gcc/testsuite/gfortran.dg/graphite/pr42326-1.f90
new file mode 100644
index 0000000..c17446a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/graphite/pr42326-1.f90
@@ -0,0 +1,18 @@
+! { dg-do compile { target i?86-*-* x86_64-*-* } }
+! { dg-require-effective-target ilp32 }
+! { dg-options "-O2 -floop-parallelize-all -fprefetch-loop-arrays -msse2" }
+
+subroutine phasad(t,i,ium)
+ implicit none
+ real t(5,4)
+ integer i,l,ll,ium
+
+ do l=1,2
+ ll=2*l
+ do i=1,ium
+ t(i,ll-1)=t(i,ll-1)+t(i,ll)
+ enddo
+ enddo
+ return
+end subroutine phasad
+
diff --git a/gcc/testsuite/gfortran.dg/graphite/pr42326.f90 b/gcc/testsuite/gfortran.dg/graphite/pr42326.f90
new file mode 100644
index 0000000..d6939da
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/graphite/pr42326.f90
@@ -0,0 +1,35 @@
+! { dg-do compile { target i?86-*-* x86_64-*-* } }
+! { dg-require-effective-target ilp32 }
+! { dg-options "-O2 -floop-strip-mine -fprefetch-loop-arrays -msse2" }
+
+subroutine blts ( ldmx, ldmy, v, tmp1, i, j, k)
+ implicit none
+ integer ldmx, ldmy, i, j, k, ip, m, l
+ real*8 tmp, tmp1, v( 5, ldmx, ldmy, *), tmat(5,5)
+
+ do ip = 1, 4
+ do m = ip+1, 5
+ tmp = tmp1 * tmat( m, ip )
+ do l = ip+1, 5
+ tmat( m, l ) = tmat( m, l ) - tmat( ip, l )
+ end do
+ v( m, i, j, k ) = tmp
+ end do
+ end do
+ return
+end subroutine blts
+
+subroutine phasad(t,i,ium)
+ implicit none
+ real t(5,4)
+ integer i,l,ll,ium
+
+ do l=1,2
+ ll=2*l
+ do i=1,ium
+ t(i,ll-1)=t(i,ll-1)+t(i,ll)
+ enddo
+ enddo
+ return
+end subroutine phasad
+
diff --git a/gcc/tree-chrec.c b/gcc/tree-chrec.c
index 18ed4ed..c945f93 100644
--- a/gcc/tree-chrec.c
+++ b/gcc/tree-chrec.c
@@ -283,6 +283,10 @@ chrec_fold_plus_1 (enum tree_code code, tree type,
case POLYNOMIAL_CHREC:
return chrec_fold_plus_poly_poly (code, type, op0, op1);
+ CASE_CONVERT:
+ if (tree_contains_chrecs (op1, NULL))
+ return chrec_dont_know;
+
default:
if (code == PLUS_EXPR || code == POINTER_PLUS_EXPR)
return build_polynomial_chrec
@@ -296,6 +300,10 @@ chrec_fold_plus_1 (enum tree_code code, tree type,
CHREC_RIGHT (op0));
}
+ CASE_CONVERT:
+ if (tree_contains_chrecs (op0, NULL))
+ return chrec_dont_know;
+
default:
switch (TREE_CODE (op1))
{
@@ -314,6 +322,10 @@ chrec_fold_plus_1 (enum tree_code code, tree type,
? build_real (type, dconstm1)
: build_int_cst_type (type, -1)));
+ CASE_CONVERT:
+ if (tree_contains_chrecs (op1, NULL))
+ return chrec_dont_know;
+
default:
{
int size = 0;
@@ -393,6 +405,10 @@ chrec_fold_multiply (tree type,
case POLYNOMIAL_CHREC:
return chrec_fold_multiply_poly_poly (type, op0, op1);
+ CASE_CONVERT:
+ if (tree_contains_chrecs (op1, NULL))
+ return chrec_dont_know;
+
default:
if (integer_onep (op1))
return op0;
@@ -405,6 +421,10 @@ chrec_fold_multiply (tree type,
chrec_fold_multiply (type, CHREC_RIGHT (op0), op1));
}
+ CASE_CONVERT:
+ if (tree_contains_chrecs (op0, NULL))
+ return chrec_dont_know;
+
default:
if (integer_onep (op0))
return op1;
@@ -420,6 +440,10 @@ chrec_fold_multiply (tree type,
chrec_fold_multiply (type, CHREC_LEFT (op1), op0),
chrec_fold_multiply (type, CHREC_RIGHT (op1), op0));
+ CASE_CONVERT:
+ if (tree_contains_chrecs (op1, NULL))
+ return chrec_dont_know;
+
default:
if (integer_onep (op1))
return op0;