diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2008-03-05 17:20:26 +0000 |
---|---|---|
committer | Aldy Hernandez <aldyh@gcc.gnu.org> | 2008-03-05 17:20:26 +0000 |
commit | ea7e6d5ae0e3b5d14740bd33d55302a73f6d2b32 (patch) | |
tree | 581bbd0f679ef1aaf0ad42e7d8f0b56620d3e34a /gcc/tree-cfgcleanup.c | |
parent | a7d95bfef5d2b7515ca51bfaba63b3ef70452adf (diff) | |
download | gcc-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.c | 15 |
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. */ |