From 9d828157eaa7cb358453d42292383494d01fa419 Mon Sep 17 00:00:00 2001 From: spop Date: Wed, 11 Aug 2010 20:22:57 +0000 Subject: [PATCH] Fix invariant phi node removal. 2010-05-07 Sebastian Pop * graphite-sese-to-poly.c (loop_entry_phi_arg): Renamed phi_arg_in_outermost_loop. (remove_simple_copy_phi): Call phi_arg_in_outermost_loop. (remove_invariant_phi): Same. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@163105 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 7 +++++++ gcc/ChangeLog.graphite | 7 +++++++ gcc/graphite-sese-to-poly.c | 20 +++++++++++--------- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c09d32c..1338413 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2010-08-02 Sebastian Pop + + * graphite-sese-to-poly.c (loop_entry_phi_arg): Renamed + phi_arg_in_outermost_loop. + (remove_simple_copy_phi): Call phi_arg_in_outermost_loop. + (remove_invariant_phi): Same. + 2010-08-11 Anatoly Sokolov * target.def (output_addr_const_extra): New hook. diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite index b45469b..00849f2 100644 --- a/gcc/ChangeLog.graphite +++ b/gcc/ChangeLog.graphite @@ -1,3 +1,10 @@ +2010-05-07 Sebastian Pop + + * graphite-sese-to-poly.c (loop_entry_phi_arg): Renamed + phi_arg_in_outermost_loop. + (remove_simple_copy_phi): Call phi_arg_in_outermost_loop. + (remove_invariant_phi): Same. + 2010-04-12 Andreas Simbuerger * graphite-blocking.c diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c index 7f83ffc..68cb2a4 100644 --- a/gcc/graphite-sese-to-poly.c +++ b/gcc/graphite-sese-to-poly.c @@ -73,21 +73,23 @@ var_used_in_not_loop_header_phi_node (tree var) return result; } -/* Returns the index of the phi argument corresponding to the initial - value in the loop. */ +/* Returns the index of the PHI argument defined in the outermost + loop. */ static size_t -loop_entry_phi_arg (gimple phi) +phi_arg_in_outermost_loop (gimple phi) { loop_p loop = gimple_bb (phi)->loop_father; - size_t i; + size_t i, res = 0; for (i = 0; i < gimple_phi_num_args (phi); i++) if (!flow_bb_inside_loop_p (loop, gimple_phi_arg_edge (phi, i)->src)) - return i; + { + loop = gimple_phi_arg_edge (phi, i)->src->loop_father; + res = i; + } - gcc_unreachable (); - return 0; + return res; } /* Removes a simple copy phi node "RES = phi (INIT, RES)" at position @@ -98,7 +100,7 @@ remove_simple_copy_phi (gimple_stmt_iterator *psi) { gimple phi = gsi_stmt (*psi); tree res = gimple_phi_result (phi); - size_t entry = loop_entry_phi_arg (phi); + size_t entry = phi_arg_in_outermost_loop (phi); tree init = gimple_phi_arg_def (phi, entry); gimple stmt = gimple_build_assign (res, init); edge e = gimple_phi_arg_edge (phi, entry); @@ -118,7 +120,7 @@ remove_invariant_phi (sese region, gimple_stmt_iterator *psi) loop_p loop = loop_containing_stmt (phi); tree res = gimple_phi_result (phi); tree scev = scalar_evolution_in_region (region, loop, res); - size_t entry = loop_entry_phi_arg (phi); + size_t entry = phi_arg_in_outermost_loop (phi); edge e = gimple_phi_arg_edge (phi, entry); tree var; gimple stmt; -- 2.7.4