diff options
author | Dehao Chen <dehao@google.com> | 2012-07-16 11:08:21 +0000 |
---|---|---|
committer | Dehao Chen <dehao@gcc.gnu.org> | 2012-07-16 11:08:21 +0000 |
commit | 9e227d605e3adef6f379ab76424e197cc06ec275 (patch) | |
tree | 29b7c73df2749617967334fe587c1c7d74aa5314 /gcc/tree-outof-ssa.c | |
parent | f691d19f9ea8b226618fb4151f76634fa02472a4 (diff) | |
download | gcc-9e227d605e3adef6f379ab76424e197cc06ec275.zip gcc-9e227d605e3adef6f379ab76424e197cc06ec275.tar.gz gcc-9e227d605e3adef6f379ab76424e197cc06ec275.tar.bz2 |
revert: tree.h (phi_arg_d): New field.
2012-07-16 Dehao Chen <dehao@google.com>
Revert
2012-07-10 Dehao Chen <dehao@google.com>
* tree.h (phi_arg_d): New field.
* tree-flow-inline.h (gimple_phi_arg_block): New function.
(gimple_phi_arg_block_from_edge): New function.
(gimple_phi_arg_set_block): New function.
(gimple_phi_arg_has_block): New function.
(redirect_edge_var_map_block): New function.
* tree-flow.h (_edge_var_map): New field.
* tree-ssa-live.c (remove_unused_locals): Mark phi_arg's block as used.
* tree-eh.c (cleanup_empty_eh_merge_phis): Add block debug info for
redirect_edge_var_map_add.
* tree-outof-ssa.c (_elim_graph): New field.
(insert_partition_copy_on_edge): New parameter.
(insert_value_copy_on_edge): New parameter.
(insert_rtx_to_part_on_edge): New parameter.
(insert_part_to_rtx_on_edge): New parameter.
(elim_graph_add_edge): New parameter.
(elim_graph_remove_succ_edge): New parameter.
(FOR_EACH_ELIM_GRAPH_SUCC): New parameter.
(FOR_EACH_ELIM_GRAPH_PRED): New parameter.
(new_elim_graph): Add block debug info.
(clear_elim_graph): Likewise.
(delete_elim_graph): Likewise.
(elim_graph_add_node): Likewise.
(elim_graph_add_edge): Likewise.
(elim_graph_remove_succ_edge): Likewise.
(eliminate_build): Likewise.
(elim_forward): Likewise.
(elim_unvisited_predecessor): Likewise.
(elim_backward): Likewise.
(elim_create): Likewise.
(eliminate_phi): Likewise.
(insert_backedge_copies): Likewise.
* tree-into-ssa.c (insert_phi_nodes_for): Add block debug info for
add_phi_arg.
(rewrite_add_phi_arguments): Likewise.
* tree-ssa-loop-im.c (execute_sm_if_changed): Likewise.
* tree-ssa-tail-merge.c (replace_block_by): Likewise.
* tree-ssa-threadupdate.c (copy_phi_args): Likewise.
* tree-loop-distribution.c (update_phis_for_loop_copy): Likewise.
* tree-ssa-loop-manip.c (create_iv): Likewise.
(add_exit_phis_edge): Likewise.
(split_loop_exit_edge): Likewise.
(copy_phi_node_args): Likewise.
(tree_transform_and_unroll_loop): Likewise.
* value-prof.c (gimple_ic): Likewise.
(gimple_stringop_fixed_value): Likewise.
* tree-tailcall.c (add_successor_phi_arg): Likewise.
(eliminate_tail_call): Likewise.
(create_tailcall_accumulator): Likewise.
(tree_optimize_tail_calls_1): Likewise.
* tree-phinodes.c (add_phi_arg): Likewise.
(make_phi_node): Likewise.
(resize_phi_node): Likewise.
(remove_phi_arg_num): Likewise.
* omp-low.c (expand_parallel_call): Likewise.
(expand_omp_for_static_chunk): Likewise.
* tree-vect-loop-manip.c (slpeel_update_phis_for_duplicate_loop):
Likewise.
(slpeel_update_phi_nodes_for_guard1): Likewise.
(slpeel_update_phi_nodes_for_guard2): Likewise.
(slpeel_tree_duplicate_loop_to_edge_cfg): Likewise.
(set_prologue_iterations): Likewise.
(slpeel_tree_peel_loop_to_edge): Likewise.
(vect_loop_versioning): Likewise.
* tree-parloops.c (create_phi_for_local_result): Likewise.
(transform_to_exit_first_loop): Likewise.
(create_parallel_loop): Likewise.
* ipa-split.c (split_function): Likewise.
* tree-vect-loop.c (get_initial_def_for_induction): Likewise.
(vect_create_epilog_for_reduction): Likewise.
* tree-vect-data-refs.c (vect_setup_realignment): Likewise.
* graphite-scop-detection.c (canonicalize_loop_closed_ssa): Likewise.
* tree-ssa-phiopt.c (cond_store_replacement): Likewise.
(cond_if_else_store_replacement_1): Likewise.
* tree-cfgcleanup.c (remove_forwarder_block): Likewise.
(remove_forwarder_block_with_phi): Likewise.
* tree-ssa-pre.c (insert_into_preds_of_block): Likewise.
* tree-predcom.c (initialize_root_vars): Likewise.
(initialize_root_vars_lm): Likewise.
* sese.c (sese_add_exit_phis_edge): Likewise.
* tree-ssa-dce.c (forward_edge_to_pdom): Likewise.
* tree-ssa.c (flush_pending_stmts): Likewise.
(redirect_edge_var_map_add): Likewise.
(ssa_redirect_edge): Likewise.
* gimple-streamer-in.c (input_phi): Likewise.
* tree-vect-stmts.c (vectorizable_load): Likewise.
* tree-inline.c (copy_phis_for_bb): Likewise.
* tree-ssa-phiprop.c (phiprop_insert_phi): Likewise.
* tree-switch-conversion.c (fix_phi_nodes): Likewise.
* tree-cfg.c (reinstall_phi_args): Likewise.
(gimple_make_forwarder_block): Likewise.
(add_phi_args_after_copy_edge): Likewise.
(gimple_duplicate_sese_tail): Likewise.
From-SVN: r189518
Diffstat (limited to 'gcc/tree-outof-ssa.c')
-rw-r--r-- | gcc/tree-outof-ssa.c | 101 |
1 files changed, 25 insertions, 76 deletions
diff --git a/gcc/tree-outof-ssa.c b/gcc/tree-outof-ssa.c index 96d2ecd..f52b260 100644 --- a/gcc/tree-outof-ssa.c +++ b/gcc/tree-outof-ssa.c @@ -78,9 +78,6 @@ typedef struct _elim_graph { /* Source locus on each edge */ VEC(source_location,heap) *edge_locus; - /* Block location on each edge. */ - VEC(tree,heap) *edge_block; - /* Visited vector. */ sbitmap visited; @@ -99,9 +96,6 @@ typedef struct _elim_graph { /* Source locations for any constant copies. */ VEC(source_location,heap) *copy_locus; - - /* Block locations for any constant copies. */ - VEC(tree,heap) *copy_block; } *elim_graph; @@ -180,8 +174,7 @@ emit_partition_copy (rtx dest, rtx src, int unsignedsrcp, tree sizeexp) /* Insert a copy instruction from partition SRC to DEST onto edge E. */ static void -insert_partition_copy_on_edge (edge e, int dest, int src, source_location locus, - tree block) +insert_partition_copy_on_edge (edge e, int dest, int src, source_location locus) { tree var; rtx seq; @@ -201,10 +194,7 @@ insert_partition_copy_on_edge (edge e, int dest, int src, source_location locus, set_location_for_edge (e); /* If a locus is provided, override the default. */ if (locus) - { - set_curr_insn_source_location (locus); - set_curr_insn_block (block); - } + set_curr_insn_source_location (locus); var = partition_to_var (SA.map, src); seq = emit_partition_copy (SA.partition_to_pseudo[dest], @@ -219,8 +209,7 @@ insert_partition_copy_on_edge (edge e, int dest, int src, source_location locus, onto edge E. */ static void -insert_value_copy_on_edge (edge e, int dest, tree src, source_location locus, - tree block) +insert_value_copy_on_edge (edge e, int dest, tree src, source_location locus) { rtx seq, x; enum machine_mode dest_mode, src_mode; @@ -242,10 +231,7 @@ insert_value_copy_on_edge (edge e, int dest, tree src, source_location locus, set_location_for_edge (e); /* If a locus is provided, override the default. */ if (locus) - { - set_curr_insn_source_location (locus); - set_curr_insn_block (block); - } + set_curr_insn_source_location (locus); start_sequence (); @@ -283,7 +269,7 @@ insert_value_copy_on_edge (edge e, int dest, tree src, source_location locus, static void insert_rtx_to_part_on_edge (edge e, int dest, rtx src, int unsignedsrcp, - source_location locus, tree block) + source_location locus) { rtx seq; if (dump_file && (dump_flags & TDF_DETAILS)) @@ -301,10 +287,7 @@ insert_rtx_to_part_on_edge (edge e, int dest, rtx src, int unsignedsrcp, set_location_for_edge (e); /* If a locus is provided, override the default. */ if (locus) - { - set_curr_insn_source_location (locus); - set_curr_insn_block (block); - } + set_curr_insn_source_location (locus); /* We give the destination as sizeexp in case src/dest are BLKmode mems. Usually we give the source. As we result from SSA names @@ -321,8 +304,7 @@ insert_rtx_to_part_on_edge (edge e, int dest, rtx src, int unsignedsrcp, onto edge E. */ static void -insert_part_to_rtx_on_edge (edge e, rtx dest, int src, source_location locus, - tree block) +insert_part_to_rtx_on_edge (edge e, rtx dest, int src, source_location locus) { tree var; rtx seq; @@ -341,10 +323,7 @@ insert_part_to_rtx_on_edge (edge e, rtx dest, int src, source_location locus, set_location_for_edge (e); /* If a locus is provided, override the default. */ if (locus) - { - set_curr_insn_source_location (locus); - set_curr_insn_block (block); - } + set_curr_insn_source_location (locus); var = partition_to_var (SA.map, src); seq = emit_partition_copy (dest, @@ -368,10 +347,8 @@ new_elim_graph (int size) g->const_dests = VEC_alloc (int, heap, 20); g->const_copies = VEC_alloc (tree, heap, 20); g->copy_locus = VEC_alloc (source_location, heap, 10); - g->copy_block = VEC_alloc (tree, heap, 10); g->edge_list = VEC_alloc (int, heap, 20); g->edge_locus = VEC_alloc (source_location, heap, 10); - g->edge_block = VEC_alloc (tree, heap, 10); g->stack = VEC_alloc (int, heap, 30); g->visited = sbitmap_alloc (size); @@ -388,7 +365,6 @@ clear_elim_graph (elim_graph g) VEC_truncate (int, g->nodes, 0); VEC_truncate (int, g->edge_list, 0); VEC_truncate (source_location, g->edge_locus, 0); - VEC_truncate (tree, g->edge_block, 0); } @@ -404,9 +380,7 @@ delete_elim_graph (elim_graph g) VEC_free (int, heap, g->const_dests); VEC_free (int, heap, g->nodes); VEC_free (source_location, heap, g->copy_locus); - VEC_free (tree, heap, g->copy_block); VEC_free (source_location, heap, g->edge_locus); - VEC_free (tree, heap, g->edge_block); free (g); } @@ -439,13 +413,11 @@ elim_graph_add_node (elim_graph g, int node) /* Add the edge PRED->SUCC to graph G. */ static inline void -elim_graph_add_edge (elim_graph g, int pred, int succ, source_location locus, - tree block) +elim_graph_add_edge (elim_graph g, int pred, int succ, source_location locus) { VEC_safe_push (int, heap, g->edge_list, pred); VEC_safe_push (int, heap, g->edge_list, succ); VEC_safe_push (source_location, heap, g->edge_locus, locus); - VEC_safe_push (tree, heap, g->edge_block, block); } @@ -453,8 +425,7 @@ elim_graph_add_edge (elim_graph g, int pred, int succ, source_location locus, return the successor node. -1 is returned if there is no such edge. */ static inline int -elim_graph_remove_succ_edge (elim_graph g, int node, source_location *locus, - tree *block) +elim_graph_remove_succ_edge (elim_graph g, int node, source_location *locus) { int y; unsigned x; @@ -466,12 +437,9 @@ elim_graph_remove_succ_edge (elim_graph g, int node, source_location *locus, VEC_replace (int, g->edge_list, x + 1, -1); *locus = VEC_index (source_location, g->edge_locus, x / 2); VEC_replace (source_location, g->edge_locus, x / 2, UNKNOWN_LOCATION); - *block = VEC_index (tree, g->edge_block, x / 2); - VEC_replace (tree, g->edge_block, x / 2, NULL); return y; } *locus = UNKNOWN_LOCATION; - *block = NULL; return -1; } @@ -480,7 +448,7 @@ elim_graph_remove_succ_edge (elim_graph g, int node, source_location *locus, edge list. VAR will hold the partition number found. CODE is the code fragment executed for every node found. */ -#define FOR_EACH_ELIM_GRAPH_SUCC(GRAPH, NODE, VAR, LOCUS, BLOCK, CODE) \ +#define FOR_EACH_ELIM_GRAPH_SUCC(GRAPH, NODE, VAR, LOCUS, CODE) \ do { \ unsigned x_; \ int y_; \ @@ -492,8 +460,6 @@ do { \ (void) ((VAR) = VEC_index (int, (GRAPH)->edge_list, x_ + 1)); \ (void) ((LOCUS) = VEC_index (source_location, \ (GRAPH)->edge_locus, x_ / 2)); \ - (void) ((BLOCK) = VEC_index (tree, \ - (GRAPH)->edge_block, x_ / 2)); \ CODE; \ } \ } while (0) @@ -503,7 +469,7 @@ do { \ GRAPH. VAR will hold the partition number found. CODE is the code fragment executed for every node found. */ -#define FOR_EACH_ELIM_GRAPH_PRED(GRAPH, NODE, VAR, LOCUS, BLOCK, CODE) \ +#define FOR_EACH_ELIM_GRAPH_PRED(GRAPH, NODE, VAR, LOCUS, CODE) \ do { \ unsigned x_; \ int y_; \ @@ -515,8 +481,6 @@ do { \ (void) ((VAR) = VEC_index (int, (GRAPH)->edge_list, x_)); \ (void) ((LOCUS) = VEC_index (source_location, \ (GRAPH)->edge_locus, x_ / 2)); \ - (void) ((BLOCK) = VEC_index (tree, \ - (GRAPH)->edge_block, x_ / 2)); \ CODE; \ } \ } while (0) @@ -547,7 +511,6 @@ eliminate_build (elim_graph g) { gimple phi = gsi_stmt (gsi); source_location locus; - tree block; p0 = var_to_partition (g->map, gimple_phi_result (phi)); /* Ignore results which are not in partitions. */ @@ -556,7 +519,6 @@ eliminate_build (elim_graph g) Ti = PHI_ARG_DEF (phi, g->e->dest_idx); locus = gimple_phi_arg_location_from_edge (phi, g->e); - block = gimple_phi_arg_block_from_edge (phi, g->e); /* If this argument is a constant, or a SSA_NAME which is being left in SSA form, just queue a copy to be emitted on this @@ -570,7 +532,6 @@ eliminate_build (elim_graph g) VEC_safe_push (int, heap, g->const_dests, p0); VEC_safe_push (tree, heap, g->const_copies, Ti); VEC_safe_push (source_location, heap, g->copy_locus, locus); - VEC_safe_push (tree, heap, g->copy_block, block); } else { @@ -579,7 +540,7 @@ eliminate_build (elim_graph g) { eliminate_name (g, p0); eliminate_name (g, pi); - elim_graph_add_edge (g, p0, pi, locus, block); + elim_graph_add_edge (g, p0, pi, locus); } } } @@ -593,10 +554,9 @@ elim_forward (elim_graph g, int T) { int S; source_location locus; - tree block; SET_BIT (g->visited, T); - FOR_EACH_ELIM_GRAPH_SUCC (g, T, S, locus, block, + FOR_EACH_ELIM_GRAPH_SUCC (g, T, S, locus, { if (!TEST_BIT (g->visited, S)) elim_forward (g, S); @@ -612,9 +572,8 @@ elim_unvisited_predecessor (elim_graph g, int T) { int P; source_location locus; - tree block; - FOR_EACH_ELIM_GRAPH_PRED (g, T, P, locus, block, + FOR_EACH_ELIM_GRAPH_PRED (g, T, P, locus, { if (!TEST_BIT (g->visited, P)) return 1; @@ -629,15 +588,14 @@ elim_backward (elim_graph g, int T) { int P; source_location locus; - tree block; SET_BIT (g->visited, T); - FOR_EACH_ELIM_GRAPH_PRED (g, T, P, locus, block, + FOR_EACH_ELIM_GRAPH_PRED (g, T, P, locus, { if (!TEST_BIT (g->visited, P)) { elim_backward (g, P); - insert_partition_copy_on_edge (g->e, P, T, locus, block); + insert_partition_copy_on_edge (g->e, P, T, locus); } }); } @@ -666,7 +624,6 @@ elim_create (elim_graph g, int T) { int P, S; source_location locus; - tree block; if (elim_unvisited_predecessor (g, T)) { @@ -674,24 +631,23 @@ elim_create (elim_graph g, int T) rtx U = get_temp_reg (var); int unsignedsrcp = TYPE_UNSIGNED (TREE_TYPE (var)); - insert_part_to_rtx_on_edge (g->e, U, T, UNKNOWN_LOCATION, NULL); - FOR_EACH_ELIM_GRAPH_PRED (g, T, P, locus, block, + insert_part_to_rtx_on_edge (g->e, U, T, UNKNOWN_LOCATION); + FOR_EACH_ELIM_GRAPH_PRED (g, T, P, locus, { if (!TEST_BIT (g->visited, P)) { elim_backward (g, P); - insert_rtx_to_part_on_edge (g->e, P, U, unsignedsrcp, locus, - block); + insert_rtx_to_part_on_edge (g->e, P, U, unsignedsrcp, locus); } }); } else { - S = elim_graph_remove_succ_edge (g, T, &locus, &block); + S = elim_graph_remove_succ_edge (g, T, &locus); if (S != -1) { SET_BIT (g->visited, T); - insert_partition_copy_on_edge (g->e, T, S, locus, block); + insert_partition_copy_on_edge (g->e, T, S, locus); } } } @@ -706,7 +662,6 @@ eliminate_phi (edge e, elim_graph g) gcc_assert (VEC_length (tree, g->const_copies) == 0); gcc_assert (VEC_length (source_location, g->copy_locus) == 0); - gcc_assert (VEC_length (tree, g->copy_block) == 0); /* Abnormal edges already have everything coalesced. */ if (e->flags & EDGE_ABNORMAL) @@ -744,13 +699,11 @@ eliminate_phi (edge e, elim_graph g) int dest; tree src; source_location locus; - tree block; src = VEC_pop (tree, g->const_copies); dest = VEC_pop (int, g->const_dests); locus = VEC_pop (source_location, g->copy_locus); - block = VEC_pop (tree, g->copy_block); - insert_value_copy_on_edge (e, dest, src, locus, block); + insert_value_copy_on_edge (e, dest, src, locus); } } @@ -1135,12 +1088,8 @@ insert_backedge_copies (void) /* copy location if present. */ if (gimple_phi_arg_has_location (phi, i)) - { - gimple_set_location (stmt, - gimple_phi_arg_location (phi, i)); - gimple_set_block (stmt, - gimple_phi_arg_block (phi, i)); - } + gimple_set_location (stmt, + gimple_phi_arg_location (phi, i)); /* Insert the new statement into the block and update the PHI node. */ |