diff options
author | Sebastian Pop <sebastian.pop@amd.com> | 2011-07-26 18:48:08 +0000 |
---|---|---|
committer | Sebastian Pop <spop@gcc.gnu.org> | 2011-07-26 18:48:08 +0000 |
commit | cbc1994b2f3fee67209b7476f62ea698902e39f3 (patch) | |
tree | 717f3710390fd5f55896b7b7ad3148282cc98438 /gcc | |
parent | 4c7d675552917db06371e5316b6a170b246a0653 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/graphite-scop-detection.c | 18 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/graphite/interchange-3.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/graphite/run-id-pr47653.c | 17 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/graphite/scop-16.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/graphite/scop-17.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/graphite/scop-21.c | 2 |
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++) { |