From 71882046281f1414174fb8ff14b072e159c5a2d4 Mon Sep 17 00:00:00 2001 From: Kazu Hirata Date: Thu, 28 Oct 2004 13:31:53 +0000 Subject: [PATCH] lambda-code.c (nestify_update_pending_stmts): Remove. * lambda-code.c (nestify_update_pending_stmts): Remove. (perfect_nestify): Use flush_pending_stmts instead of nestify_update_pending_stmts. * tree-cfg.c (tree_make_forwarder_block): Use flush_pending_stmts. * tree-flow.h: Add a prototype for flush_pending_stmts. * tree-ssa-loop-manip.c (tree_duplicate_loop_to_header_edge): Use flush_pending_stmts. (lv_update_pending_stmts): Remove. (tree_ssa_loop_version): Use flush_pending_stmts instead of lv_update_pending_stmts. * tree-ssa.c (flush_pending_stmts): New. From-SVN: r89757 --- gcc/ChangeLog | 15 +++++++++++++++ gcc/lambda-code.c | 27 +-------------------------- gcc/tree-cfg.c | 15 +++------------ gcc/tree-flow.h | 1 + gcc/tree-ssa-loop-manip.c | 42 +++--------------------------------------- gcc/tree-ssa.c | 21 +++++++++++++++++++++ 6 files changed, 44 insertions(+), 77 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e4de1de..20b2842 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,18 @@ +2004-10-28 Kazu Hirata + + * lambda-code.c (nestify_update_pending_stmts): Remove. + (perfect_nestify): Use flush_pending_stmts instead of + nestify_update_pending_stmts. + * tree-cfg.c (tree_make_forwarder_block): Use + flush_pending_stmts. + * tree-flow.h: Add a prototype for flush_pending_stmts. + * tree-ssa-loop-manip.c (tree_duplicate_loop_to_header_edge): + Use flush_pending_stmts. + (lv_update_pending_stmts): Remove. + (tree_ssa_loop_version): Use flush_pending_stmts instead of + lv_update_pending_stmts. + * tree-ssa.c (flush_pending_stmts): New. + 2004-10-28 Ulrich Weigand PR target/15286 diff --git a/gcc/lambda-code.c b/gcc/lambda-code.c index 4ff4859..38c1fd1 100644 --- a/gcc/lambda-code.c +++ b/gcc/lambda-code.c @@ -2109,31 +2109,6 @@ perfect_nest_p (struct loop *loop) return true; } - -/* Add phi args using PENDINT_STMT list. */ - -static void -nestify_update_pending_stmts (edge e) -{ - basic_block dest; - tree phi, arg, def; - - if (!PENDING_STMT (e)) - return; - - dest = e->dest; - - for (phi = phi_nodes (dest), arg = PENDING_STMT (e); - phi; - phi = TREE_CHAIN (phi), arg = TREE_CHAIN (arg)) - { - def = TREE_VALUE (arg); - add_phi_arg (&phi, def, e); - } - - PENDING_STMT (e) = NULL; -} - /* Replace the USES of tree X in STMT with tree Y */ static void @@ -2317,7 +2292,7 @@ perfect_nestify (struct loops *loops, add_phi_arg (&phi, def, EDGE_PRED (preheaderbb, 0)); } - nestify_update_pending_stmts (e); + flush_pending_stmts (e); bodybb = create_empty_bb (EXIT_BLOCK_PTR->prev_bb); latchbb = create_empty_bb (EXIT_BLOCK_PTR->prev_bb); make_edge (headerbb, bodybb, EDGE_FALLTHRU); diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 8853ab5..e9f456d 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -3692,12 +3692,7 @@ tree_make_forwarder_block (edge fallthru) if (e == fallthru) continue; - for (phi = phi_nodes (bb), var = PENDING_STMT (e); - phi; - phi = PHI_CHAIN (phi), var = TREE_CHAIN (var)) - add_phi_arg (&phi, TREE_VALUE (var), e); - - PENDING_STMT (e) = NULL; + flush_pending_stmts (e); } } @@ -4598,7 +4593,7 @@ tree_duplicate_sese_region (edge entry, edge exit, struct loop *loop = entry->dest->loop_father; edge exit_copy; bitmap definitions; - tree phi, var; + tree phi; basic_block *doms; htab_t ssa_name_map = NULL; edge redirected; @@ -4667,11 +4662,7 @@ tree_duplicate_sese_region (edge entry, edge exit, /* Redirect the entry and add the phi node arguments. */ redirected = redirect_edge_and_branch (entry, entry->dest->rbi->copy); gcc_assert (redirected != NULL); - for (phi = phi_nodes (entry->dest), var = PENDING_STMT (entry); - phi; - phi = TREE_CHAIN (phi), var = TREE_CHAIN (var)) - add_phi_arg (&phi, TREE_VALUE (var), entry); - PENDING_STMT (entry) = NULL; + flush_pending_stmts (entry); /* Concerning updating of dominators: We must recount dominators for entry block and its copy. Anything that is outside of the region, but diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h index 37cf556..715f843 100644 --- a/gcc/tree-flow.h +++ b/gcc/tree-flow.h @@ -572,6 +572,7 @@ extern void dump_tree_ssa_stats (FILE *); extern void debug_tree_ssa_stats (void); extern void ssa_remove_edge (edge); extern edge ssa_redirect_edge (edge, basic_block); +extern void flush_pending_stmts (edge e); extern bool tree_ssa_useless_type_conversion (tree); extern bool tree_ssa_useless_type_conversion_1 (tree, tree); extern void verify_ssa (void); diff --git a/gcc/tree-ssa-loop-manip.c b/gcc/tree-ssa-loop-manip.c index 1f949a4..6f78757 100644 --- a/gcc/tree-ssa-loop-manip.c +++ b/gcc/tree-ssa-loop-manip.c @@ -589,7 +589,6 @@ tree_duplicate_loop_to_header_edge (struct loop *loop, edge e, unsigned first_new_block; basic_block bb; unsigned i; - tree phi, arg, map, def; bitmap definitions; if (!(loops->state & LOOPS_HAVE_SIMPLE_LATCHES)) @@ -609,17 +608,7 @@ tree_duplicate_loop_to_header_edge (struct loop *loop, edge e, return false; /* Readd the removed phi args for e. */ - map = PENDING_STMT (e); - PENDING_STMT (e) = NULL; - - for (phi = phi_nodes (e->dest), arg = map; - phi; - phi = TREE_CHAIN (phi), arg = TREE_CHAIN (arg)) - { - def = TREE_VALUE (arg); - add_phi_arg (&phi, def, e); - } - gcc_assert (arg == NULL); + flush_pending_stmts (e); /* Copy the phi node arguments. */ copy_phi_node_args (first_new_block); @@ -747,31 +736,6 @@ lv_adjust_loop_entry_edge (basic_block first_head, return new_head; } -/* Add phi args using PENDINT_STMT list. */ - -static void -lv_update_pending_stmts (edge e) -{ - basic_block dest; - tree phi, arg, def; - - if (!PENDING_STMT (e)) - return; - - dest = e->dest; - - for (phi = phi_nodes (dest), arg = PENDING_STMT (e); - phi; - phi = TREE_CHAIN (phi), arg = TREE_CHAIN (arg)) - { - def = TREE_VALUE (arg); - add_phi_arg (&phi, def, e); - } - - PENDING_STMT (e) = NULL; -} - - /* Main entry point for Loop Versioning transformation. This transformation given a condition and a loop, creates @@ -832,11 +796,11 @@ tree_ssa_loop_version (struct loops *loops, struct loop * loop, nloop->single_exit = find_edge (exit->src->rbi->copy, exit->dest); /* loopify redirected latch_edge. Update its PENDING_STMTS. */ - lv_update_pending_stmts (latch_edge); + flush_pending_stmts (latch_edge); /* loopify redirected condition_bb's succ edge. Update its PENDING_STMTS. */ extract_true_false_edges_from_block (*condition_bb, &true_edge, &false_edge); - lv_update_pending_stmts (false_edge); + flush_pending_stmts (false_edge); /* Adjust irreducible flag. */ if (irred_flag) diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index d9379ba..6fb711a 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -100,6 +100,27 @@ ssa_redirect_edge (edge e, basic_block dest) return e; } +/* Add PHI arguments queued in PENDINT_STMT list on edge E to edge + E->dest. */ + +void +flush_pending_stmts (edge e) +{ + tree phi, arg; + + if (!PENDING_STMT (e)) + return; + + for (phi = phi_nodes (e->dest), arg = PENDING_STMT (e); + phi; + phi = TREE_CHAIN (phi), arg = TREE_CHAIN (arg)) + { + tree def = TREE_VALUE (arg); + add_phi_arg (&phi, def, e); + } + + PENDING_STMT (e) = NULL; +} /* Return true if SSA_NAME is malformed and mark it visited. -- 2.7.4