Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(761)

Unified Diff: gcc/gcc/tree-ssa-uncprop.c

Issue 3050029: [gcc] GCC 4.5.0=>4.5.1 (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/nacl-toolchain.git
Patch Set: Created 10 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gcc/gcc/tree-ssa-structalias.c ('k') | gcc/gcc/tree-stdarg.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gcc/gcc/tree-ssa-uncprop.c
diff --git a/gcc/gcc/tree-ssa-uncprop.c b/gcc/gcc/tree-ssa-uncprop.c
index ceaa40d9c110611559ed993bc4f154c83ec01c49..a26a2aed369b0825a2c19b3b66ad63a79c9dec53 100644
--- a/gcc/gcc/tree-ssa-uncprop.c
+++ b/gcc/gcc/tree-ssa-uncprop.c
@@ -1,5 +1,6 @@
/* Routines for discovering and unpropagating edge equivalences.
- Copyright (C) 2005, 2007, 2008 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2007, 2008, 2010
+ Free Software Foundation, Inc.
This file is part of GCC.
@@ -53,7 +54,7 @@ struct edge_equivalency
in the CFG.
When complete, each edge that creates an equivalency will have an
- EDGE_EQUIVALENCY structure hanging off the edge's AUX field.
+ EDGE_EQUIVALENCY structure hanging off the edge's AUX field.
The caller is responsible for freeing the AUX fields. */
static void
@@ -157,7 +158,7 @@ associate_equivalences_with_edges (void)
equivalency->rhs = op1;
if (code == EQ_EXPR)
true_edge->aux = equivalency;
- else
+ else
false_edge->aux = equivalency;
}
@@ -177,7 +178,7 @@ associate_equivalences_with_edges (void)
&& !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (cond))
{
int i, n_labels = gimple_switch_num_labels (stmt);
- tree *info = XCNEWVEC (tree, n_basic_blocks);
+ tree *info = XCNEWVEC (tree, last_basic_block);
/* Walk over the case label vector. Record blocks
which are reached by a single case label which represents
@@ -289,9 +290,9 @@ struct equiv_hash_elt
VEC(tree,heap) *equivalences;
};
-static void uncprop_initialize_block (struct dom_walk_data *, basic_block);
-static void uncprop_finalize_block (struct dom_walk_data *, basic_block);
-static void uncprop_into_successor_phis (struct dom_walk_data *, basic_block);
+static void uncprop_enter_block (struct dom_walk_data *, basic_block);
+static void uncprop_leave_block (struct dom_walk_data *, basic_block);
+static void uncprop_into_successor_phis (basic_block);
/* Hashing and equality routines for the hash table. */
@@ -358,7 +359,7 @@ record_equiv (tree value, tree equivalence)
free (equiv_hash_elt);
equiv_hash_elt = (struct equiv_hash_elt *) *slot;
-
+
VEC_safe_push (tree, heap, equiv_hash_elt->equivalences, equivalence);
}
@@ -381,18 +382,12 @@ tree_ssa_uncprop (void)
calculate_dominance_info (CDI_DOMINATORS);
/* Setup callbacks for the generic dominator tree walker. */
- walk_data.walk_stmts_backward = false;
walk_data.dom_direction = CDI_DOMINATORS;
walk_data.initialize_block_local_data = NULL;
- walk_data.before_dom_children_before_stmts = uncprop_initialize_block;
- walk_data.before_dom_children_walk_stmts = NULL;
- walk_data.before_dom_children_after_stmts = uncprop_into_successor_phis;
- walk_data.after_dom_children_before_stmts = NULL;
- walk_data.after_dom_children_walk_stmts = NULL;
- walk_data.after_dom_children_after_stmts = uncprop_finalize_block;
+ walk_data.before_dom_children = uncprop_enter_block;
+ walk_data.after_dom_children = uncprop_leave_block;
walk_data.global_data = NULL;
walk_data.block_local_data_size = 0;
- walk_data.interesting_blocks = NULL;
/* Now initialize the dominator walker. */
init_walk_dominator_tree (&walk_data);
@@ -432,8 +427,8 @@ tree_ssa_uncprop (void)
the dominator tree. */
static void
-uncprop_finalize_block (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED,
- basic_block bb ATTRIBUTE_UNUSED)
+uncprop_leave_block (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED,
+ basic_block bb ATTRIBUTE_UNUSED)
{
/* Pop the topmost value off the equiv stack. */
tree value = VEC_pop (tree, equiv_stack);
@@ -447,8 +442,7 @@ uncprop_finalize_block (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED,
/* Unpropagate values from PHI nodes in successor blocks of BB. */
static void
-uncprop_into_successor_phis (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED,
- basic_block bb)
+uncprop_into_successor_phis (basic_block bb)
{
edge e;
edge_iterator ei;
@@ -463,7 +457,7 @@ uncprop_into_successor_phis (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED,
/* If there are no PHI nodes in this destination, then there is
no sense in recording any equivalences. */
- if (!phis)
+ if (gimple_seq_empty_p (phis))
continue;
/* Record any equivalency associated with E. */
@@ -476,7 +470,6 @@ uncprop_into_successor_phis (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED,
/* Walk over the PHI nodes, unpropagating values. */
for (gsi = gsi_start (phis) ; !gsi_end_p (gsi); gsi_next (&gsi))
{
- /* Sigh. We'll have more efficient access to this one day. */
gimple phi = gsi_stmt (gsi);
tree arg = PHI_ARG_DEF (phi, e->dest_idx);
struct equiv_hash_elt equiv_hash_elt;
@@ -556,8 +549,8 @@ single_incoming_edge_ignoring_loop_edges (basic_block bb)
}
static void
-uncprop_initialize_block (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED,
- basic_block bb)
+uncprop_enter_block (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED,
+ basic_block bb)
{
basic_block parent;
edge e;
@@ -583,6 +576,8 @@ uncprop_initialize_block (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED,
if (!recorded)
VEC_safe_push (tree, heap, equiv_stack, NULL_TREE);
+
+ uncprop_into_successor_phis (bb);
}
static bool
@@ -591,7 +586,7 @@ gate_uncprop (void)
return flag_tree_dom != 0;
}
-struct gimple_opt_pass pass_uncprop =
+struct gimple_opt_pass pass_uncprop =
{
{
GIMPLE_PASS,
« no previous file with comments | « gcc/gcc/tree-ssa-structalias.c ('k') | gcc/gcc/tree-stdarg.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698