aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-cfgcleanup.c
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2008-03-05 17:20:26 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2008-03-05 17:20:26 +0000
commitea7e6d5ae0e3b5d14740bd33d55302a73f6d2b32 (patch)
tree581bbd0f679ef1aaf0ad42e7d8f0b56620d3e34a /gcc/tree-cfgcleanup.c
parenta7d95bfef5d2b7515ca51bfaba63b3ef70452adf (diff)
downloadgcc-ea7e6d5ae0e3b5d14740bd33d55302a73f6d2b32.zip
gcc-ea7e6d5ae0e3b5d14740bd33d55302a73f6d2b32.tar.gz
gcc-ea7e6d5ae0e3b5d14740bd33d55302a73f6d2b32.tar.bz2
cfg.c: Include tree-flow.h.
* cfg.c: Include tree-flow.h. (remove_edge_raw): Call redirect_edge_var_map_clear. (redirect_edge_succ_nodup): Call redirect_edge_var_map_dup. * tree-flow-inline.h (redirect_edge_var_map_def): New. (redirect_edge_var_map_result): New. * tree-cfgcleanup.c (remove_forwarder_block_with_phi): Replace PENDING_STMT use with redirect_edge_var_map_*. * tree-ssa.c (edge_var_maps): New definition. (redirect_edge_var_map_add): New. (redirect_edge_var_map_clear): New. (redirect_edge_var_map_dup): New. (redirect_edge_var_map_vector): New. (redirect_edge_var_map_destroy): New. (ssa_redirect_edge): Replace PENDING_STMT use with redirect_edge_var_map_*. (flush_pending_stmts): Same. (delete_tree_ssa): Destroy edge var map. * tree-flow.h (struct _edge_var_map): New. Define edge_var_map vector type. Declare redirect_edge_var_map_* prototypes. * Makefile.in (cfg.o): Depend on TREE_FLOW_H. * tree-cfg.c (reinstall_phi_args): Replace PENDING_STMT use with redirect_edge_var_map_*. From-SVN: r132903
Diffstat (limited to 'gcc/tree-cfgcleanup.c')
-rw-r--r--gcc/tree-cfgcleanup.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/gcc/tree-cfgcleanup.c b/gcc/tree-cfgcleanup.c
index bcae448..aaaacd9 100644
--- a/gcc/tree-cfgcleanup.c
+++ b/gcc/tree-cfgcleanup.c
@@ -748,7 +748,7 @@ remove_forwarder_block_with_phi (basic_block bb)
if (phi_alternatives_equal (dest, s, succ))
{
e = redirect_edge_and_branch (e, dest);
- PENDING_STMT (e) = NULL_TREE;
+ redirect_edge_var_map_clear (e);
continue;
}
@@ -771,15 +771,18 @@ remove_forwarder_block_with_phi (basic_block bb)
if (TREE_CODE (def) == SSA_NAME)
{
- tree var;
+ edge_var_map_vector head;
+ edge_var_map *vm;
+ size_t i;
/* If DEF is one of the results of PHI nodes removed during
redirection, replace it with the PHI argument that used
to be on E. */
- for (var = PENDING_STMT (e); var; var = TREE_CHAIN (var))
+ head = redirect_edge_var_map_vector (e);
+ for (i = 0; VEC_iterate (edge_var_map, head, i, vm); ++i)
{
- tree old_arg = TREE_PURPOSE (var);
- tree new_arg = TREE_VALUE (var);
+ tree old_arg = redirect_edge_var_map_result (vm);
+ tree new_arg = redirect_edge_var_map_def (vm);
if (def == old_arg)
{
@@ -792,7 +795,7 @@ remove_forwarder_block_with_phi (basic_block bb)
add_phi_arg (phi, def, s);
}
- PENDING_STMT (e) = NULL;
+ redirect_edge_var_map_clear (e);
}
/* Update the dominators. */