aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2014-04-14 08:09:06 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2014-04-14 08:09:06 +0000
commit033aa406ca81760098f7a8b9a193d6fd2391ace6 (patch)
treed7e6bcc55f059e8078a20e844d75b2e20e91d772 /gcc
parentb82b06487ef2331db4610d74a2d2816b8bb0ddd2 (diff)
downloadgcc-033aa406ca81760098f7a8b9a193d6fd2391ace6.zip
gcc-033aa406ca81760098f7a8b9a193d6fd2391ace6.tar.gz
gcc-033aa406ca81760098f7a8b9a193d6fd2391ace6.tar.bz2
re PR tree-optimization/59817 (ICE in extract_affine_chrec with -O2 -ftree-loop-linear)
2014-04-14 Richard Biener <rguenther@suse.de> PR tree-optimization/59817 PR tree-optimization/60453 * graphite-scop-detection.c (graphite_can_represent_scev): Complete recursion to catch all CHRECs in the scalar evolution and restrict the predicate for the remains appropriately. * gfortran.dg/graphite/pr59817.f: New testcase. * gcc.dg/graphite/pr59817-1.c: Likewise. * gcc.dg/graphite/pr59817-2.c: Likewise. From-SVN: r209355
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/graphite-scop-detection.c11
-rw-r--r--gcc/testsuite/ChangeLog8
-rw-r--r--gcc/testsuite/gcc.dg/graphite/pr59817-1.c16
-rw-r--r--gcc/testsuite/gcc.dg/graphite/pr59817-2.c15
-rw-r--r--gcc/testsuite/gfortran.dg/graphite/pr59817.f14
6 files changed, 71 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b343e00..a80c21f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2014-04-14 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/59817
+ PR tree-optimization/60453
+ * graphite-scop-detection.c (graphite_can_represent_scev): Complete
+ recursion to catch all CHRECs in the scalar evolution and restrict
+ the predicate for the remains appropriately.
+
2014-04-12 Catherine Moore <clm@codesourcery.com>
* config/mips/constraints.md: Add new register constraint "kb".
diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c
index b5e4a8c..821f084 100644
--- a/gcc/graphite-scop-detection.c
+++ b/gcc/graphite-scop-detection.c
@@ -219,7 +219,14 @@ graphite_can_represent_scev (tree scev)
switch (TREE_CODE (scev))
{
+ case NEGATE_EXPR:
+ case BIT_NOT_EXPR:
+ CASE_CONVERT:
+ case NON_LVALUE_EXPR:
+ return graphite_can_represent_scev (TREE_OPERAND (scev, 0));
+
case PLUS_EXPR:
+ case POINTER_PLUS_EXPR:
case MINUS_EXPR:
return graphite_can_represent_scev (TREE_OPERAND (scev, 0))
&& graphite_can_represent_scev (TREE_OPERAND (scev, 1));
@@ -241,13 +248,15 @@ graphite_can_represent_scev (tree scev)
if (!evolution_function_right_is_integer_cst (scev)
|| !graphite_can_represent_init (scev))
return false;
+ return graphite_can_represent_scev (CHREC_LEFT (scev));
default:
break;
}
/* Only affine functions can be represented. */
- if (!scev_is_linear_expression (scev))
+ if (tree_contains_chrecs (scev, NULL)
+ || !scev_is_linear_expression (scev))
return false;
return true;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index cb235b3..e09c499 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2014-04-14 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/59817
+ PR tree-optimization/60453
+ * gfortran.dg/graphite/pr59817.f: New testcase.
+ * gcc.dg/graphite/pr59817-1.c: Likewise.
+ * gcc.dg/graphite/pr59817-2.c: Likewise.
+
2014-04-14 Jason Merrill <jason@redhat.com>
Revert:
diff --git a/gcc/testsuite/gcc.dg/graphite/pr59817-1.c b/gcc/testsuite/gcc.dg/graphite/pr59817-1.c
new file mode 100644
index 0000000..175fa16
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/pr59817-1.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -floop-interchange" } */
+
+int kd;
+
+void
+n2(void)
+{
+ static int so;
+ static short int i5;
+ int wj;
+ int *il;
+ int *nk = &so;
+ for (wj = 0; wj < 2; ++wj)
+ *nk = ((i5 += *il) || kd );
+}
diff --git a/gcc/testsuite/gcc.dg/graphite/pr59817-2.c b/gcc/testsuite/gcc.dg/graphite/pr59817-2.c
new file mode 100644
index 0000000..1395007
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/pr59817-2.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -floop-interchange" } */
+
+void
+xl(void)
+{
+ static int j3;
+ for (j3 = 0; j3 < 1; ++j3) {
+ static int f2;
+ static int w7;
+ short int b5;
+ int ok;
+ f2 = (b5 += ok) ? (w7 = 0): (w7 ? 0 : (f2 = ok));
+ }
+}
diff --git a/gcc/testsuite/gfortran.dg/graphite/pr59817.f b/gcc/testsuite/gfortran.dg/graphite/pr59817.f
new file mode 100644
index 0000000..a9ee8f1
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/graphite/pr59817.f
@@ -0,0 +1,14 @@
+! { dg-do compile }
+! { dg-options "-O2 -floop-interchange" }
+ SUBROUTINE PREPD(ICAST,ICAS,ICASX,ICAS1,ICAS2,NDET,NM,III,IMP,
+ * CASMIN)
+ LOGICAL CASMIN
+ DIMENSION ICAST(NDET,NM),IMP(NM)
+ IF(CASMIN) THEN
+ DO K=1,NDET
+ DO L=1,NM
+ IF(L.EQ.K-1) ICAST(K,L) = 1
+ END DO
+ END DO
+ END IF
+ END SUBROUTINE