diff options
author | Jeff Law <law@redhat.com> | 2004-05-15 00:21:34 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2004-05-15 00:21:34 -0600 |
commit | 91cde0c3f5e20c4a77f68a91fc077666872483ab (patch) | |
tree | 60cedd08244ef4752b3d88e01bf7703eec576bb7 | |
parent | e9a757769b395ef082be82777e68bfe8a8a79f90 (diff) | |
download | gcc-91cde0c3f5e20c4a77f68a91fc077666872483ab.zip gcc-91cde0c3f5e20c4a77f68a91fc077666872483ab.tar.gz gcc-91cde0c3f5e20c4a77f68a91fc077666872483ab.tar.bz2 |
tree-ssa-dom.c (redirect_edges_and_update_ssa_graph): Don't even bother marking bypassed virtuals for out-of-ssa.
* tree-ssa-dom.c (redirect_edges_and_update_ssa_graph): Don't even
bother marking bypassed virtuals for out-of-ssa. Instead merge
bypassed virtuals into vars_to_rename just before into-ssa pass.
From-SVN: r81872
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/tree-ssa-dom.c | 53 |
2 files changed, 40 insertions, 17 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2e9f6b9..0365e82 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -19,6 +19,10 @@ 2004-05-14 Jeff Law <law@redhat.com> + * tree-ssa-dom.c (redirect_edges_and_update_ssa_graph): Don't even + bother marking bypassed virtuals for out-of-ssa. Instead merge + bypassed virtuals into vars_to_rename just before into-ssa pass. + * tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Reorganize so that it picks up more opportunities to eliminate ABS expressions or turn them into negations. diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c index 89f4c6a..5f8896f 100644 --- a/gcc/tree-ssa-dom.c +++ b/gcc/tree-ssa-dom.c @@ -312,12 +312,14 @@ set_value_for (tree var, tree value, varray_type table) static void redirect_edges_and_update_ssa_graph (varray_type redirection_edges) { - basic_block tgt; + basic_block tgt, bb; + tree phi; unsigned int i; size_t old_num_referenced_vars = num_referenced_vars; + bitmap virtuals_to_rename = BITMAP_XMALLOC (); /* First note any variables which we are going to have to take - out of SSA form. */ + out of SSA form as well as any virtuals which need updating. */ for (i = 0; i < VARRAY_ACTIVE_SIZE (redirection_edges); i += 2) { block_stmt_iterator bsi; @@ -333,7 +335,11 @@ redirect_edges_and_update_ssa_graph (varray_type redirection_edges) for (phi = phi_nodes (e->dest); phi; phi = TREE_CHAIN (phi)) { tree result = SSA_NAME_VAR (PHI_RESULT (phi)); - bitmap_set_bit (vars_to_rename, var_ann (result)->uid); + + if (is_gimple_reg (PHI_RESULT (phi))) + bitmap_set_bit (vars_to_rename, var_ann (result)->uid); + else + bitmap_set_bit (virtuals_to_rename, var_ann (result)->uid); } /* Any variables set by statements at the start of the block we @@ -362,7 +368,7 @@ redirect_edges_and_update_ssa_graph (varray_type redirection_edges) for (j = 0; j < NUM_VDEFS (vdefs); j++) { tree op = VDEF_RESULT (vdefs, j); - bitmap_set_bit (vars_to_rename, var_ann (op)->uid); + bitmap_set_bit (virtuals_to_rename, var_ann (op)->uid); } } @@ -371,20 +377,11 @@ redirect_edges_and_update_ssa_graph (varray_type redirection_edges) for (phi = phi_nodes (tgt); phi; phi = TREE_CHAIN (phi)) { tree result = SSA_NAME_VAR (PHI_RESULT (phi)); - int j; - - bitmap_set_bit (vars_to_rename, var_ann (result)->uid); - for (j = 0; j < PHI_NUM_ARGS (phi); j++) - { - tree arg = PHI_ARG_DEF (phi, j); - - if (TREE_CODE (arg) != SSA_NAME) - continue; - - arg = SSA_NAME_VAR (arg); - bitmap_set_bit (vars_to_rename, var_ann (arg)->uid); - } + if (is_gimple_reg (PHI_RESULT (phi))) + bitmap_set_bit (vars_to_rename, var_ann (result)->uid); + else + bitmap_set_bit (virtuals_to_rename, var_ann (result)->uid); } } @@ -497,6 +494,28 @@ redirect_edges_and_update_ssa_graph (varray_type redirection_edges) bitmap_set_bit (vars_to_rename, i); var_ann (referenced_var (i))->out_of_ssa_tag = 0; } + + bitmap_a_or_b (vars_to_rename, vars_to_rename, virtuals_to_rename); + + /* We must remove any PHIs for virtual variables that we are going to + re-rename. Hopefully we'll be able to simply update these incrementally + soon. */ + FOR_EACH_BB (bb) + { + tree next; + + for (phi = phi_nodes (bb); phi; phi = next) + { + tree result = PHI_RESULT (phi); + + next = TREE_CHAIN (phi); + + if (bitmap_bit_p (virtuals_to_rename, + var_ann (SSA_NAME_VAR (result))->uid)) + remove_phi_node (phi, NULL, bb); + } + } + BITMAP_XFREE (virtuals_to_rename); } /* Jump threading, redundancy elimination and const/copy propagation. |