From 403ebc7e2c1134cb65763e8cacbca790a82360d7 Mon Sep 17 00:00:00 2001 From: Sebastian Pop Date: Wed, 23 Dec 2009 07:50:22 +0000 Subject: [PATCH] re PR tree-optimization/42205 ([graphite] internal compiler error: verify_ssa failed with -ffast-math -floop-interchange) Fix PR42205. 2009-12-17 Sebastian Pop 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 --- gcc/ChangeLog.graphite | 18 ++++++++++++++++++ gcc/graphite-sese-to-poly.c | 7 +++++-- gcc/testsuite/gcc.dg/graphite/pr42205-1.c | 17 +++++++++++++++++ gcc/testsuite/gcc.dg/graphite/pr42205-2.c | 11 +++++++++++ 4 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/graphite/pr42205-1.c create mode 100644 gcc/testsuite/gcc.dg/graphite/pr42205-2.c diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite index 232e13d7696..ac1c4d6cfab 100644 --- a/gcc/ChangeLog.graphite +++ b/gcc/ChangeLog.graphite @@ -1,3 +1,21 @@ +2009-12-17 Sebastian Pop + + 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 + + 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 PR middle-end/42178 diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c index 370bbff5ddd..7b61ed72a21 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 00000000000..413b9f7eab8 --- /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 00000000000..595cedb90a5 --- /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; +} -- 2.30.2