aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>2004-11-22 22:01:11 +0000
committerkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>2004-11-22 22:01:11 +0000
commit1af6dc83bcc7707a772adb1d76d9484294e388c3 (patch)
tree14ecdd9bd130d11cf1bae895d1af4e0de1322006 /gcc
parent7aaf4f4608f721b28d92056379987a3994708e82 (diff)
* tree-flow.h: Remove the prototype for remove_phi_arg.
Add a prototype for remove_phi_args. * tree-phinodes.c (remove_phi_arg): Remove. (remove_phi_args): New. * tree-ssa.c (ssa_remove_edge): Call remove_phi_args instead of remove_phi_arg. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@91034 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/tree-flow.h2
-rw-r--r--gcc/tree-phinodes.c38
-rw-r--r--gcc/tree-ssa.c10
4 files changed, 27 insertions, 32 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 113616f6eeb..316ad25a1f2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2004-11-22 Kazu Hirata <kazu@cs.umass.edu>
+
+ * tree-flow.h: Remove the prototype for remove_phi_arg.
+ Add a prototype for remove_phi_args.
+ * tree-phinodes.c (remove_phi_arg): Remove.
+ (remove_phi_args): New.
+ * tree-ssa.c (ssa_remove_edge): Call remove_phi_args instead
+ of remove_phi_arg.
+
2004-11-23 Ben Elliston <bje@au.ibm.com>
* doc/cfg.texi (Maintaining the CFG): Use @ftable instead of
diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h
index da68b32fdf1..4b9a3ed5cf4 100644
--- a/gcc/tree-flow.h
+++ b/gcc/tree-flow.h
@@ -510,7 +510,7 @@ extern stmt_ann_t create_stmt_ann (tree);
extern tree_ann_t create_tree_ann (tree);
extern tree create_phi_node (tree, basic_block);
extern void add_phi_arg (tree *, tree, edge);
-extern void remove_phi_arg (tree, basic_block);
+extern void remove_phi_args (edge);
extern void remove_phi_arg_num (tree, int);
extern void remove_phi_node (tree, tree, basic_block);
extern void remove_all_phi_nodes_for (bitmap);
diff --git a/gcc/tree-phinodes.c b/gcc/tree-phinodes.c
index a38a57273be..c4240e7cb69 100644
--- a/gcc/tree-phinodes.c
+++ b/gcc/tree-phinodes.c
@@ -349,29 +349,6 @@ add_phi_arg (tree *phi, tree def, edge e)
PHI_NUM_ARGS (*phi)++;
}
-/* Remove a PHI argument from PHI. BLOCK is the predecessor block where
- the PHI argument is coming from. */
-
-void
-remove_phi_arg (tree phi, basic_block block)
-{
- int i, num_elem = PHI_NUM_ARGS (phi);
-
- for (i = 0; i < num_elem; i++)
- {
- basic_block src_bb;
-
- src_bb = PHI_ARG_EDGE (phi, i)->src;
-
- if (src_bb == block)
- {
- remove_phi_arg_num (phi, i);
- return;
- }
- }
-}
-
-
/* Remove the Ith argument from PHI's argument list. This routine assumes
ordering of alternatives in the vector is not important and implements
removal by swapping the last alternative with the alternative we want to
@@ -400,6 +377,21 @@ remove_phi_arg_num (tree phi, int i)
PHI_NUM_ARGS (phi)--;
}
+/* Remove all PHI arguments associated with edge E. */
+
+void
+remove_phi_args (edge e)
+{
+ tree phi;
+
+ for (phi = phi_nodes (e->dest); phi; phi = PHI_CHAIN (phi))
+ {
+ int index = phi_arg_from_edge (phi, e);
+ if (index >= 0)
+ remove_phi_arg_num (phi, index);
+ }
+}
+
/* Remove PHI node PHI from basic block BB. If PREV is non-NULL, it is
used as the node immediately before PHI in the linked list. */
diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c
index 5dfa8c71422..1e2b59d44cc 100644
--- a/gcc/tree-ssa.c
+++ b/gcc/tree-ssa.c
@@ -53,14 +53,8 @@ Boston, MA 02111-1307, USA. */
void
ssa_remove_edge (edge e)
{
- tree phi, next;
-
- /* Remove the appropriate PHI arguments in E's destination block. */
- for (phi = phi_nodes (e->dest); phi; phi = next)
- {
- next = PHI_CHAIN (phi);
- remove_phi_arg (phi, e->src);
- }
+ /* Remove all PHI arguments for E. */
+ remove_phi_args (e);
remove_edge (e);
}