diff options
author | Sebastian Pop <sebastian.pop@amd.com> | 2010-08-11 20:25:11 +0000 |
---|---|---|
committer | Sebastian Pop <spop@gcc.gnu.org> | 2010-08-11 20:25:11 +0000 |
commit | 4aa9a167270c937b66fa023f46cc05c05e93b0e0 (patch) | |
tree | 278063ed706e6a647ff85331811bd1901bc9b033 /gcc | |
parent | ee646fc62bdea6e5df4fdc12dc8de143808c0bfe (diff) | |
download | gcc-4aa9a167270c937b66fa023f46cc05c05e93b0e0.zip gcc-4aa9a167270c937b66fa023f46cc05c05e93b0e0.tar.gz gcc-4aa9a167270c937b66fa023f46cc05c05e93b0e0.tar.bz2 |
Always insert out of SSA copies on edges except for loop->latch.
2010-06-23 Sebastian Pop <sebastian.pop@amd.com>
* graphite-sese-to-poly.c (rewrite_phi_out_of_ssa): Always insert out
of SSA copies on edges except for loop->latch.
From-SVN: r163123
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/ChangeLog.graphite | 5 | ||||
-rw-r--r-- | gcc/graphite-sese-to-poly.c | 54 |
3 files changed, 15 insertions, 49 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9637006..3e634e7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2010-08-02 Sebastian Pop <sebastian.pop@amd.com> + * graphite-sese-to-poly.c (rewrite_phi_out_of_ssa): Always insert out + of SSA copies on edges except for loop->latch. + +2010-08-02 Sebastian Pop <sebastian.pop@amd.com> + * graphite-sese-to-poly.c (rewrite_cross_bb_scalar_deps_out_of_ssa): Split out of rewrite_reductions_out_of_ssa. * graphite-sese-to-poly.h (rewrite_cross_bb_scalar_deps_out_of_ssa): diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite index 0d64cc3..47cf9244 100644 --- a/gcc/ChangeLog.graphite +++ b/gcc/ChangeLog.graphite @@ -1,5 +1,10 @@ 2010-06-23 Sebastian Pop <sebastian.pop@amd.com> + * graphite-sese-to-poly.c (rewrite_phi_out_of_ssa): Always insert out + of SSA copies on edges except for loop->latch. + +2010-06-23 Sebastian Pop <sebastian.pop@amd.com> + * graphite-sese-to-poly.c (rewrite_cross_bb_scalar_deps_out_of_ssa): Split out of rewrite_reductions_out_of_ssa. * graphite-sese-to-poly.h (rewrite_cross_bb_scalar_deps_out_of_ssa): diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c index 8bcd684..75879ed 100644 --- a/gcc/graphite-sese-to-poly.c +++ b/gcc/graphite-sese-to-poly.c @@ -2246,58 +2246,14 @@ rewrite_phi_out_of_ssa (gimple_stmt_iterator *psi) for (i = 0; i < gimple_phi_num_args (phi); i++) { tree arg = gimple_phi_arg_def (phi, i); + edge e = gimple_phi_arg_edge (phi, i); - /* Try to avoid the insertion on edges as much as possible: this - would avoid the insertion of code on loop latch edges, making - the pattern matching of the vectorizer happy, or it would - avoid the insertion of useless basic blocks. Note that it is - incorrect to insert out of SSA copies close by their - definition when they are more than two loop levels apart: - for example, starting from a double nested loop - - | a = ... - | loop_1 - | loop_2 - | b = phi (a, c) - | c = ... - | end_2 - | end_1 - - the following transform is incorrect - - | a = ... - | Red[0] = a - | loop_1 - | loop_2 - | b = Red[0] - | c = ... - | Red[0] = c - | end_2 - | end_1 - - whereas inserting the copy on the incoming edge is correct - - | a = ... - | loop_1 - | Red[0] = a - | loop_2 - | b = Red[0] - | c = ... - | Red[0] = c - | end_2 - | end_1 - */ - if (TREE_CODE (arg) == SSA_NAME - && is_gimple_reg (arg) - && gimple_bb (SSA_NAME_DEF_STMT (arg)) - && (flow_bb_inside_loop_p (bb->loop_father, - gimple_bb (SSA_NAME_DEF_STMT (arg))) - || flow_bb_inside_loop_p (loop_outer (bb->loop_father), - gimple_bb (SSA_NAME_DEF_STMT (arg))))) + /* Avoid the insertion of code in the loop latch to please the + pattern matching of the vectorizer. */ + if (e->src == bb->loop_father->latch) insert_out_of_ssa_copy (zero_dim_array, arg, SSA_NAME_DEF_STMT (arg)); else - insert_out_of_ssa_copy_on_edge (gimple_phi_arg_edge (phi, i), - zero_dim_array, arg); + insert_out_of_ssa_copy_on_edge (e, zero_dim_array, arg); } var = force_gimple_operand (zero_dim_array, &stmts, true, NULL_TREE); |