tree-phinodes.c (remove_phi_node): Clean up by factoring out calls to release_ssa_name and release_phi_node.

* tree-phinodes.c (remove_phi_node): Clean up by factoring out
	calls to release_ssa_name and release_phi_node.

From-SVN: r95835
This commit is contained in:
Kazu Hirata 2005-03-03 17:15:36 +00:00 committed by Kazu Hirata
parent 8fb790fd3f
commit 4430da7ffc
2 changed files with 18 additions and 24 deletions

View File

@ -6,6 +6,9 @@
* cfgexpand.c (construct_exit_block): Use EDGE_PRED instead of
EDGE_I.
* tree-phinodes.c (remove_phi_node): Clean up by factoring out
calls to release_ssa_name and release_phi_node.
2005-03-03 Roger Sayle <roger@eyesopen.com>
Andrew Pinski <pinskia@physics.uc.edu>

View File

@ -404,36 +404,27 @@ remove_phi_args (edge e)
void
remove_phi_node (tree phi, tree prev, basic_block bb)
{
tree *loc;
if (prev)
{
/* Rewire the list if we are given a PREV pointer. */
PHI_CHAIN (prev) = PHI_CHAIN (phi);
/* If we are deleting the PHI node, then we should release the
SSA_NAME node so that it can be reused. */
release_ssa_name (PHI_RESULT (phi));
release_phi_node (phi);
}
else if (phi == phi_nodes (bb))
{
/* Update the list head if removing the first element. */
bb_ann (bb)->phi_nodes = PHI_CHAIN (phi);
/* If we are deleting the PHI node, then we should release the
SSA_NAME node so that it can be reused. */
release_ssa_name (PHI_RESULT (phi));
release_phi_node (phi);
loc = &PHI_CHAIN (prev);
}
else
{
/* Traverse the list looking for the node to remove. */
tree prev, t;
prev = NULL_TREE;
for (t = phi_nodes (bb); t && t != phi; t = PHI_CHAIN (t))
prev = t;
if (t)
remove_phi_node (t, prev, bb);
for (loc = &(bb_ann (bb)->phi_nodes);
*loc != phi;
loc = &PHI_CHAIN (*loc))
;
}
/* Remove PHI from the chain. */
*loc = PHI_CHAIN (phi);
/* If we are deleting the PHI node, then we should release the
SSA_NAME node so that it can be reused. */
release_ssa_name (PHI_RESULT (phi));
release_phi_node (phi);
}