aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-cfg.c
diff options
context:
space:
mode:
authorKazu Hirata <kazu@cs.umass.edu>2004-11-23 05:25:12 +0000
committerKazu Hirata <kazu@gcc.gnu.org>2004-11-23 05:25:12 +0000
commita100ac1e28fc8f0c22ceea85eef74b7ac8615daa (patch)
treef05fee1d28436abb25a6d378abbc0212ca41c4f5 /gcc/tree-cfg.c
parent82698cdede07649ffc164d761a1d2aa1832b9cc3 (diff)
downloadgcc-a100ac1e28fc8f0c22ceea85eef74b7ac8615daa.zip
gcc-a100ac1e28fc8f0c22ceea85eef74b7ac8615daa.tar.gz
gcc-a100ac1e28fc8f0c22ceea85eef74b7ac8615daa.tar.bz2
tree-cfg.c (tree_execute_on_growing_pred): New.
* tree-cfg.c (tree_execute_on_growing_pred): New. (tree_cfg_hooks): Add tree_execute_on_growing_pred. * tree-flow.h: Add a prototype for reserve_phi_args_for_new_edge. * tree-phinodes.c (reserve_phi_args_for_new_edge): New. (add_phi_arg): Don't resize a PHI array. From-SVN: r91075
Diffstat (limited to 'gcc/tree-cfg.c')
-rw-r--r--gcc/tree-cfg.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index e9c58d4..1f934cb 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -5339,6 +5339,18 @@ tree_purge_all_dead_eh_edges (bitmap blocks)
return changed;
}
+/* This function is called whenever a new edge is created or
+ redirected. */
+
+static void
+tree_execute_on_growing_pred (edge e)
+{
+ basic_block bb = e->dest;
+
+ if (phi_nodes (bb))
+ reserve_phi_args_for_new_edge (bb);
+}
+
/* This function is called immediately before edge E is removed from
the edge vector E->dest->preds. */
@@ -5371,7 +5383,7 @@ struct cfg_hooks tree_cfg_hooks = {
tree_block_ends_with_call_p, /* block_ends_with_call_p */
tree_block_ends_with_condjump_p, /* block_ends_with_condjump_p */
tree_flow_call_edges_add, /* flow_call_edges_add */
- NULL, /* execute_on_growing_pred */
+ tree_execute_on_growing_pred, /* execute_on_growing_pred */
tree_execute_on_shrinking_pred, /* execute_on_shrinking_pred */
};