diff options
author | Sebastian Pop <sebastian.pop@amd.com> | 2009-12-23 07:50:22 +0000 |
---|---|---|
committer | Sebastian Pop <spop@gcc.gnu.org> | 2009-12-23 07:50:22 +0000 |
commit | 403ebc7e2c1134cb65763e8cacbca790a82360d7 (patch) | |
tree | bc19cb772a32fa933310f85a572a15b8391b4296 | |
parent | 070ba483434fc103357a001baeb4f907170854c4 (diff) | |
download | gcc-403ebc7e2c1134cb65763e8cacbca790a82360d7.zip gcc-403ebc7e2c1134cb65763e8cacbca790a82360d7.tar.gz gcc-403ebc7e2c1134cb65763e8cacbca790a82360d7.tar.bz2 |
re PR tree-optimization/42205 ([graphite] internal compiler error: verify_ssa failed with -ffast-math -floop-interchange)
Fix PR42205.
2009-12-17 Sebastian Pop <sebastian.pop@amd.com>
PR middle-end/42205
* graphite-sese-to-poly.c (translate_scalar_reduction_to_array_for_stmt):
Insert the reduction copy in the same block as the phi node.
(follow_ssa_with_commutative_ops): Handle GIMPLE_NOPs.
* testsuite/gcc.dg/graphite/pr42205-1.c: New.
* testsuite/gcc.dg/graphite/pr42205-2.c: New.
From-SVN: r155419
-rw-r--r-- | gcc/ChangeLog.graphite | 18 | ||||
-rw-r--r-- | gcc/graphite-sese-to-poly.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/graphite/pr42205-1.c | 17 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/graphite/pr42205-2.c | 11 |
4 files changed, 51 insertions, 2 deletions
diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite index 232e13d..ac1c4d6 100644 --- a/gcc/ChangeLog.graphite +++ b/gcc/ChangeLog.graphite @@ -1,5 +1,23 @@ 2009-12-17 Sebastian Pop <sebastian.pop@amd.com> + PR middle-end/42205 + * graphite-sese-to-poly.c (translate_scalar_reduction_to_array_for_stmt): + Insert the reduction copy in the same block as the phi node. + (follow_ssa_with_commutative_ops): Handle GIMPLE_NOPs. + + * testsuite/gcc.dg/graphite/pr42205-1.c: New. + * testsuite/gcc.dg/graphite/pr42205-2.c: New. + +2009-12-17 Sebastian Pop <sebastian.pop@amd.com> + + PR middle-end/42221 + * sese.c (expand_scalar_variables_expr): Follow the SSA links into + the array indexing of ADDR_EXPRs. + + * testsuite/gcc.dg/graphite/pr42221.c: New. + +2009-12-17 Sebastian Pop <sebastian.pop@amd.com> + PR middle-end/42178 PR middle-end/42334 * graphite-interchange.c (lst_try_interchange): Do not modify OUTER diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c index 370bbff..7b61ed7 100644 --- a/gcc/graphite-sese-to-poly.c +++ b/gcc/graphite-sese-to-poly.c @@ -2498,6 +2498,9 @@ follow_ssa_with_commutative_ops (tree arg, tree lhs) stmt = SSA_NAME_DEF_STMT (arg); + if (gimple_code (stmt) == GIMPLE_NOP) + return NULL; + if (gimple_code (stmt) == GIMPLE_PHI) { if (phi_contains_arg (stmt, lhs)) @@ -2674,13 +2677,13 @@ static void translate_scalar_reduction_to_array_for_stmt (tree red, gimple stmt, gimple loop_phi) { - basic_block bb = gimple_bb (stmt); - gimple_stmt_iterator insert_gsi = gsi_after_labels (bb); + gimple_stmt_iterator insert_gsi = gsi_after_labels (gimple_bb (loop_phi)); tree res = gimple_phi_result (loop_phi); gimple assign = gimple_build_assign (res, red); gsi_insert_before (&insert_gsi, assign, GSI_SAME_STMT); + insert_gsi = gsi_after_labels (gimple_bb (stmt)); assign = gimple_build_assign (red, gimple_assign_lhs (stmt)); insert_gsi = gsi_for_stmt (stmt); gsi_insert_after (&insert_gsi, assign, GSI_SAME_STMT); diff --git a/gcc/testsuite/gcc.dg/graphite/pr42205-1.c b/gcc/testsuite/gcc.dg/graphite/pr42205-1.c new file mode 100644 index 0000000..413b9f7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/graphite/pr42205-1.c @@ -0,0 +1,17 @@ +/* { dg-options "-O1 -ffast-math -floop-interchange" } */ + +int adler32(int adler, char *buf, int n) +{ + int sum = 0; + do { + adler += buf[0]; + sum += adler; + adler += buf[1]; + sum += adler; + adler += buf[2]; + sum += adler; + adler += buf[3]; + sum += adler; + } while (--n); + return adler | (sum << 16); +} diff --git a/gcc/testsuite/gcc.dg/graphite/pr42205-2.c b/gcc/testsuite/gcc.dg/graphite/pr42205-2.c new file mode 100644 index 0000000..595cedb --- /dev/null +++ b/gcc/testsuite/gcc.dg/graphite/pr42205-2.c @@ -0,0 +1,11 @@ +/* { dg-options "-O1 -funsafe-math-optimizations -floop-interchange" } */ + +double f(double x) +{ + double y = 0.0; + int i; + for (i = 0; i < 8; i++) { + y += x * i; + } + return y; +} |