summaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-threadedge.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2009-04-28 08:50:19 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2009-04-28 08:50:19 +0000
commit448ee6624d1ccc7626e13021c4d07db27d75a521 (patch)
treeeeeda80bc63372aa4a48d848ceb4bb06bb28cb7c /gcc/tree-ssa-threadedge.c
parente8a861bd078e982b9020121454f331b1528b04b1 (diff)
downloadgcc-448ee6624d1ccc7626e13021c4d07db27d75a521.tar.gz
tree.h (SSA_NAME_VALUE): Remove.
2009-04-28 Richard Guenther <rguenther@suse.de> * tree.h (SSA_NAME_VALUE): Remove. (struct tree_ssa_name): Remove value_handle member. * tree-vrp.c (execute_vrp): Initialize/free the value-handle array for jump threading. * tree-ssa-propagate.c (ssa_prop_init): Do not initialize SSA_NAME_VALUEs. * print-tree.c (print_node): Do not dump SSA_NAME_VALUEs. * tree-flow.h (threadedge_initialize_values): Declare. (threadedge_finalize_values): Likewise. * tree-ssa-threadedge.c (ssa_name_values): New global variable. (SSA_NAME_VALUE): Define. (threadedge_initialize_values): New function. (threadedge_finalize_values): Likewise. * tree-ssa-dom.c (ssa_name_values): New global variable. (SSA_NAME_VALUE): Define. (tree_ssa_dominator_optimize): Initialize/free the value-handle array. From-SVN: r146877
Diffstat (limited to 'gcc/tree-ssa-threadedge.c')
-rw-r--r--gcc/tree-ssa-threadedge.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/gcc/tree-ssa-threadedge.c b/gcc/tree-ssa-threadedge.c
index 1429c18c998..473bc9b90b4 100644
--- a/gcc/tree-ssa-threadedge.c
+++ b/gcc/tree-ssa-threadedge.c
@@ -49,6 +49,35 @@ along with GCC; see the file COPYING3. If not see
to copy as part of the jump threading process. */
static int stmt_count;
+/* Array to record value-handles per SSA_NAME. */
+VEC(tree,heap) *ssa_name_values;
+
+/* Set the value for the SSA name NAME to VALUE. */
+
+void
+set_ssa_name_value (tree name, tree value)
+{
+ if (SSA_NAME_VERSION (name) >= VEC_length (tree, ssa_name_values))
+ VEC_safe_grow_cleared (tree, heap, ssa_name_values,
+ SSA_NAME_VERSION (name) + 1);
+ VEC_replace (tree, ssa_name_values, SSA_NAME_VERSION (name), value);
+}
+
+/* Initialize the per SSA_NAME value-handles array. Returns it. */
+void
+threadedge_initialize_values (void)
+{
+ gcc_assert (ssa_name_values == NULL);
+ ssa_name_values = VEC_alloc(tree, heap, num_ssa_names);
+}
+
+/* Free the per SSA_NAME value-handle array. */
+void
+threadedge_finalize_values (void)
+{
+ VEC_free(tree, heap, ssa_name_values);
+}
+
/* Return TRUE if we may be able to thread an incoming edge into
BB to an outgoing edge from BB. Return FALSE otherwise. */
@@ -126,7 +155,7 @@ remove_temporary_equivalences (VEC(tree, heap) **stack)
break;
prev_value = VEC_pop (tree, *stack);
- SSA_NAME_VALUE (dest) = prev_value;
+ set_ssa_name_value (dest, prev_value);
}
}
@@ -145,7 +174,7 @@ record_temporary_equivalence (tree x, tree y, VEC(tree, heap) **stack)
y = tmp ? tmp : y;
}
- SSA_NAME_VALUE (x) = y;
+ set_ssa_name_value (x, y);
VEC_reserve (tree, heap, *stack, 2);
VEC_quick_push (tree, *stack, prev_x);
VEC_quick_push (tree, *stack, x);