/* 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;
/* 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;
/* 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;
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],
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;
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 ();
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))
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
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;
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,
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);
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);
}
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);
}
/* 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);
}
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;
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;
}
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_; \
(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)
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_; \
(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)
{
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. */
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
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
{
{
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);
}
}
}
{
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);
{
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;
{
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);
}
});
}
{
int P, S;
source_location locus;
- tree block;
if (elim_unvisited_predecessor (g, 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);
}
}
}
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)
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);
}
}
/* 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. */