aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSebastian Pop <sebastian.pop@amd.com>2011-07-26 18:48:08 +0000
committerSebastian Pop <spop@gcc.gnu.org>2011-07-26 18:48:08 +0000
commitcbc1994b2f3fee67209b7476f62ea698902e39f3 (patch)
tree717f3710390fd5f55896b7b7ad3148282cc98438 /gcc
parent4c7d675552917db06371e5316b6a170b246a0653 (diff)
downloadgcc-cbc1994b2f3fee67209b7476f62ea698902e39f3.zip
gcc-cbc1994b2f3fee67209b7476f62ea698902e39f3.tar.gz
gcc-cbc1994b2f3fee67209b7476f62ea698902e39f3.tar.bz2
Fix PR47653: do not handle loops using wrapping semantics in graphite
2011-07-26 Sebastian Pop <sebastian.pop@amd.com> PR middle-end/47653 * graphite-scop-detection.c (graphite_can_represent_loop): Discard loops using wrapping semantics. * gcc.dg/graphite/run-id-pr47653.c: New. * gcc.dg/graphite/interchange-3.c: Do not use unsigned types for induction variables. * gcc.dg/graphite/scop-16.c: Same. * gcc.dg/graphite/scop-17.c: Same. * gcc.dg/graphite/scop-21.c: Same. From-SVN: r176802
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/graphite-scop-detection.c18
-rw-r--r--gcc/testsuite/ChangeLog10
-rw-r--r--gcc/testsuite/gcc.dg/graphite/interchange-3.c2
-rw-r--r--gcc/testsuite/gcc.dg/graphite/run-id-pr47653.c17
-rw-r--r--gcc/testsuite/gcc.dg/graphite/scop-16.c2
-rw-r--r--gcc/testsuite/gcc.dg/graphite/scop-17.c2
-rw-r--r--gcc/testsuite/gcc.dg/graphite/scop-21.c2
8 files changed, 46 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d3d9919..92ca45b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2011-07-26 Sebastian Pop <sebastian.pop@amd.com>
+ PR middle-end/47653
+ * graphite-scop-detection.c (graphite_can_represent_loop): Discard
+ loops using wrapping semantics.
+
+2011-07-26 Sebastian Pop <sebastian.pop@amd.com>
+
PR middle-end/48805
* tree-scalar-evolution.c (instantiate_scev_r): Return
chrec_dont_know for ADDR_EXPR.
diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c
index 45c6c75..3460568 100644
--- a/gcc/graphite-scop-detection.c
+++ b/gcc/graphite-scop-detection.c
@@ -378,17 +378,17 @@ harmful_stmt_in_bb (basic_block scop_entry, loop_p outer_loop, basic_block bb)
static bool
graphite_can_represent_loop (basic_block scop_entry, loop_p loop)
{
- tree niter = number_of_latch_executions (loop);
+ tree niter;
+ struct tree_niter_desc niter_desc;
- /* Number of iterations unknown. */
- if (chrec_contains_undetermined (niter))
- return false;
-
- /* Number of iterations not affine. */
- if (!graphite_can_represent_expr (scop_entry, loop, niter))
- return false;
+ /* FIXME: For the moment, graphite cannot be used on loops that
+ iterate using induction variables that wrap. */
- return true;
+ return number_of_iterations_exit (loop, single_exit (loop), &niter_desc, false)
+ && niter_desc.control.no_overflow
+ && (niter = number_of_latch_executions (loop))
+ && !chrec_contains_undetermined (niter)
+ && graphite_can_represent_expr (scop_entry, loop, niter);
}
/* Store information needed by scopdet_* functions. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4e0adb1..4efc523 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,15 @@
2011-07-26 Sebastian Pop <sebastian.pop@amd.com>
+ PR middle-end/47653
+ * gcc.dg/graphite/run-id-pr47653.c: New.
+ * gcc.dg/graphite/interchange-3.c: Do not use unsigned types for
+ induction variables.
+ * gcc.dg/graphite/scop-16.c: Same.
+ * gcc.dg/graphite/scop-17.c: Same.
+ * gcc.dg/graphite/scop-21.c: Same.
+
+2011-07-26 Sebastian Pop <sebastian.pop@amd.com>
+
PR middle-end/48805
* gcc.dg/graphite/id-pr48805.c: New.
diff --git a/gcc/testsuite/gcc.dg/graphite/interchange-3.c b/gcc/testsuite/gcc.dg/graphite/interchange-3.c
index 26ec4d9..1419749 100644
--- a/gcc/testsuite/gcc.dg/graphite/interchange-3.c
+++ b/gcc/testsuite/gcc.dg/graphite/interchange-3.c
@@ -12,7 +12,7 @@ double u[1782225];
static void __attribute__((noinline))
foo (int N, int *res)
{
- unsigned int i, j;
+ int i, j;
double sum = 0;
for (i = 0; i < N; i++)
{
diff --git a/gcc/testsuite/gcc.dg/graphite/run-id-pr47653.c b/gcc/testsuite/gcc.dg/graphite/run-id-pr47653.c
new file mode 100644
index 0000000..b62b891
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/run-id-pr47653.c
@@ -0,0 +1,17 @@
+/* { dg-options "-O -fstack-check=generic -ftree-pre -fgraphite-identity" } */
+
+int main ()
+{
+ int i, j;
+ int x[8][8];
+ for (i = 0; i < 8; i++)
+ for (j = i; j < 8; j++)
+ x[i][j] = 4;
+
+ for (i = 0; i < 8; i++)
+ for (j = i; j < 8; j++)
+ if (x[i][j] != 4)
+ __builtin_abort ();
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/graphite/scop-16.c b/gcc/testsuite/gcc.dg/graphite/scop-16.c
index 0849e86..83cbb96 100644
--- a/gcc/testsuite/gcc.dg/graphite/scop-16.c
+++ b/gcc/testsuite/gcc.dg/graphite/scop-16.c
@@ -6,7 +6,7 @@ int test ()
{
int a[N][N];
int b[N][N];
- unsigned i, j;
+ int i, j;
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
diff --git a/gcc/testsuite/gcc.dg/graphite/scop-17.c b/gcc/testsuite/gcc.dg/graphite/scop-17.c
index ee37aea..a7dff5f 100644
--- a/gcc/testsuite/gcc.dg/graphite/scop-17.c
+++ b/gcc/testsuite/gcc.dg/graphite/scop-17.c
@@ -5,7 +5,7 @@ void foo (int);
int test ()
{
int a[N][N];
- unsigned i, j;
+ int i, j;
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
diff --git a/gcc/testsuite/gcc.dg/graphite/scop-21.c b/gcc/testsuite/gcc.dg/graphite/scop-21.c
index 5e58834..1cbad5d 100644
--- a/gcc/testsuite/gcc.dg/graphite/scop-21.c
+++ b/gcc/testsuite/gcc.dg/graphite/scop-21.c
@@ -3,7 +3,7 @@ void foo (int);
int test ()
{
int a[N+6];
- unsigned i;
+ int i;
for (i = 0; i < N; i++)
{