diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ffd36c30e758..acad602018e3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2010-08-02 Sebastian Pop + + * graphite-sese-to-poly.c (rewrite_close_phi_out_of_ssa): Add back + the case removed in the previous patch, when the only phi argument + is defined in the same loop as the phi node itself. Handle it + separately from the invariant case by both propagating it outside + the region and replacing the phi node with an assign. + 2010-08-02 Sebastian Pop * graphite-sese-to-poly.c (rewrite_close_phi_out_of_ssa): The only diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite index 1d3e64d2b688..e43d2ce50dba 100644 --- a/gcc/ChangeLog.graphite +++ b/gcc/ChangeLog.graphite @@ -1,3 +1,11 @@ +2010-07-29 Sebastian Pop + + * graphite-sese-to-poly.c (rewrite_close_phi_out_of_ssa): Add back + the case removed in the previous patch, when the only phi argument + is defined in the same loop as the phi node itself. Handle it + separately from the invariant case by both propagating it outside + the region and replacing the phi node with an assign. + 2010-07-28 Sebastian Pop * graphite-sese-to-poly.c (rewrite_close_phi_out_of_ssa): The only diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c index 38e408c753b6..4b94bcb4e777 100644 --- a/gcc/graphite-sese-to-poly.c +++ b/gcc/graphite-sese-to-poly.c @@ -2249,6 +2249,16 @@ rewrite_close_phi_out_of_ssa (gimple_stmt_iterator *psi, sese region) return; } + else if (gimple_bb (SSA_NAME_DEF_STMT (arg))->loop_father == bb->loop_father) + { + propagate_expr_outside_region (res, arg, region); + stmt = gimple_build_assign (res, arg); + remove_phi_node (psi, false); + gsi_insert_before (&gsi, stmt, GSI_NEW_STMT); + SSA_NAME_DEF_STMT (res) = stmt; + return; + } + /* If res is scev analyzable and is not a scalar value, it is safe to ignore the close phi node: it will be code generated in the out of Graphite pass. */