mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-19 01:40:39 +08:00
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
This commit is contained in:
parent
63058091fa
commit
7188204628
@ -1,3 +1,18 @@
|
||||
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>
|
||||
|
||||
PR target/15286
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user