Commit 71882046 by Kazu Hirata Committed by Kazu Hirata

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
parent 63058091
2004-10-28 Kazu Hirata <kazu@cs.umass.edu>
* 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 <uweigand@de.ibm.com> 2004-10-28 Ulrich Weigand <uweigand@de.ibm.com>
PR target/15286 PR target/15286
......
...@@ -2109,31 +2109,6 @@ perfect_nest_p (struct loop *loop) ...@@ -2109,31 +2109,6 @@ perfect_nest_p (struct loop *loop)
return true; 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 */ /* Replace the USES of tree X in STMT with tree Y */
static void static void
...@@ -2317,7 +2292,7 @@ perfect_nestify (struct loops *loops, ...@@ -2317,7 +2292,7 @@ perfect_nestify (struct loops *loops,
add_phi_arg (&phi, def, EDGE_PRED (preheaderbb, 0)); 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); bodybb = create_empty_bb (EXIT_BLOCK_PTR->prev_bb);
latchbb = create_empty_bb (EXIT_BLOCK_PTR->prev_bb); latchbb = create_empty_bb (EXIT_BLOCK_PTR->prev_bb);
make_edge (headerbb, bodybb, EDGE_FALLTHRU); make_edge (headerbb, bodybb, EDGE_FALLTHRU);
......
...@@ -3692,12 +3692,7 @@ tree_make_forwarder_block (edge fallthru) ...@@ -3692,12 +3692,7 @@ tree_make_forwarder_block (edge fallthru)
if (e == fallthru) if (e == fallthru)
continue; continue;
for (phi = phi_nodes (bb), var = PENDING_STMT (e); flush_pending_stmts (e);
phi;
phi = PHI_CHAIN (phi), var = TREE_CHAIN (var))
add_phi_arg (&phi, TREE_VALUE (var), e);
PENDING_STMT (e) = NULL;
} }
} }
...@@ -4598,7 +4593,7 @@ tree_duplicate_sese_region (edge entry, edge exit, ...@@ -4598,7 +4593,7 @@ tree_duplicate_sese_region (edge entry, edge exit,
struct loop *loop = entry->dest->loop_father; struct loop *loop = entry->dest->loop_father;
edge exit_copy; edge exit_copy;
bitmap definitions; bitmap definitions;
tree phi, var; tree phi;
basic_block *doms; basic_block *doms;
htab_t ssa_name_map = NULL; htab_t ssa_name_map = NULL;
edge redirected; edge redirected;
...@@ -4667,11 +4662,7 @@ tree_duplicate_sese_region (edge entry, edge exit, ...@@ -4667,11 +4662,7 @@ tree_duplicate_sese_region (edge entry, edge exit,
/* Redirect the entry and add the phi node arguments. */ /* Redirect the entry and add the phi node arguments. */
redirected = redirect_edge_and_branch (entry, entry->dest->rbi->copy); redirected = redirect_edge_and_branch (entry, entry->dest->rbi->copy);
gcc_assert (redirected != NULL); gcc_assert (redirected != NULL);
for (phi = phi_nodes (entry->dest), var = PENDING_STMT (entry); flush_pending_stmts (entry);
phi;
phi = TREE_CHAIN (phi), var = TREE_CHAIN (var))
add_phi_arg (&phi, TREE_VALUE (var), entry);
PENDING_STMT (entry) = NULL;
/* Concerning updating of dominators: We must recount dominators /* Concerning updating of dominators: We must recount dominators
for entry block and its copy. Anything that is outside of the region, but for entry block and its copy. Anything that is outside of the region, but
......
...@@ -572,6 +572,7 @@ extern void dump_tree_ssa_stats (FILE *); ...@@ -572,6 +572,7 @@ extern void dump_tree_ssa_stats (FILE *);
extern void debug_tree_ssa_stats (void); extern void debug_tree_ssa_stats (void);
extern void ssa_remove_edge (edge); extern void ssa_remove_edge (edge);
extern edge ssa_redirect_edge (edge, basic_block); 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 (tree);
extern bool tree_ssa_useless_type_conversion_1 (tree, tree); extern bool tree_ssa_useless_type_conversion_1 (tree, tree);
extern void verify_ssa (void); extern void verify_ssa (void);
......
...@@ -589,7 +589,6 @@ tree_duplicate_loop_to_header_edge (struct loop *loop, edge e, ...@@ -589,7 +589,6 @@ tree_duplicate_loop_to_header_edge (struct loop *loop, edge e,
unsigned first_new_block; unsigned first_new_block;
basic_block bb; basic_block bb;
unsigned i; unsigned i;
tree phi, arg, map, def;
bitmap definitions; bitmap definitions;
if (!(loops->state & LOOPS_HAVE_SIMPLE_LATCHES)) if (!(loops->state & LOOPS_HAVE_SIMPLE_LATCHES))
...@@ -609,17 +608,7 @@ tree_duplicate_loop_to_header_edge (struct loop *loop, edge e, ...@@ -609,17 +608,7 @@ tree_duplicate_loop_to_header_edge (struct loop *loop, edge e,
return false; return false;
/* Readd the removed phi args for e. */ /* Readd the removed phi args for e. */
map = PENDING_STMT (e); flush_pending_stmts (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);
/* Copy the phi node arguments. */ /* Copy the phi node arguments. */
copy_phi_node_args (first_new_block); copy_phi_node_args (first_new_block);
...@@ -747,31 +736,6 @@ lv_adjust_loop_entry_edge (basic_block first_head, ...@@ -747,31 +736,6 @@ lv_adjust_loop_entry_edge (basic_block first_head,
return new_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. /* Main entry point for Loop Versioning transformation.
This transformation given a condition and a loop, creates This transformation given a condition and a loop, creates
...@@ -832,11 +796,11 @@ tree_ssa_loop_version (struct loops *loops, struct loop * loop, ...@@ -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); nloop->single_exit = find_edge (exit->src->rbi->copy, exit->dest);
/* loopify redirected latch_edge. Update its PENDING_STMTS. */ /* 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. */ /* loopify redirected condition_bb's succ edge. Update its PENDING_STMTS. */
extract_true_false_edges_from_block (*condition_bb, &true_edge, &false_edge); 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. */ /* Adjust irreducible flag. */
if (irred_flag) if (irred_flag)
......
...@@ -100,6 +100,27 @@ ssa_redirect_edge (edge e, basic_block dest) ...@@ -100,6 +100,27 @@ ssa_redirect_edge (edge e, basic_block dest)
return e; 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. /* Return true if SSA_NAME is malformed and mark it visited.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment