aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-dfa.c
diff options
context:
space:
mode:
authorDiego Novillo <dnovillo@google.com>2009-04-17 17:45:56 -0400
committerDiego Novillo <dnovillo@gcc.gnu.org>2009-04-17 17:45:56 -0400
commit07485407e17b3be47ede16306a9ba449a03f0a7b (patch)
tree35617d27227f8f0332b1eb102297803c6dd769e5 /gcc/tree-dfa.c
parent4e53d196cc0400d7cd1b90804987be4f14d6e2f1 (diff)
downloadgcc-07485407e17b3be47ede16306a9ba449a03f0a7b.zip
gcc-07485407e17b3be47ede16306a9ba449a03f0a7b.tar.gz
gcc-07485407e17b3be47ede16306a9ba449a03f0a7b.tar.bz2
omp-low.c (create_omp_child_function): Set DECL_CONTEXT for DECL.
* omp-low.c (create_omp_child_function): Set DECL_CONTEXT for DECL. * cgraphunit.c (cgraph_build_static_cdtor): Likewise. * tree-dfa.c (find_referenced_vars_in): Factor out of ... (find_vars_r): ... here. * tree-flow.h (find_referenced_vars_in): Declare. * tree-ssa-pre.c (create_expression_by_pieces): Assert that AVAIL_OUT exists for BLOCK. * Makefile.in (CGRAPH_H): Add dependency on cif-code.def (tree-loop-distribution.o): Fix dependency on TREE_VECTORIZER_H. (tree-parloops.o): Likewise. testsuite/ChangeLog * gcc.c-torture/execute/builtins/strlen-3.c: Fix ODR violation for variable 'inside_main'. From-SVN: r146295
Diffstat (limited to 'gcc/tree-dfa.c')
-rw-r--r--gcc/tree-dfa.c47
1 files changed, 29 insertions, 18 deletions
diff --git a/gcc/tree-dfa.c b/gcc/tree-dfa.c
index 1738dd0..1bd54cd 100644
--- a/gcc/tree-dfa.c
+++ b/gcc/tree-dfa.c
@@ -88,26 +88,10 @@ find_referenced_vars (void)
FOR_EACH_BB (bb)
{
for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
- {
- size_t i;
- gimple stmt = gsi_stmt (si);
- for (i = 0; i < gimple_num_ops (stmt); i++)
- walk_tree (gimple_op_ptr (stmt, i), find_vars_r, NULL, NULL);
- }
+ find_referenced_vars_in (gsi_stmt (si));
for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si))
- {
- gimple phi = gsi_stmt (si);
- size_t i, len = gimple_phi_num_args (phi);
-
- walk_tree (gimple_phi_result_ptr (phi), find_vars_r, NULL, NULL);
-
- for (i = 0; i < len; i++)
- {
- tree arg = gimple_phi_arg_def (phi, i);
- walk_tree (&arg, find_vars_r, NULL, NULL);
- }
- }
+ find_referenced_vars_in (gsi_stmt (si));
}
return 0;
@@ -498,6 +482,33 @@ find_vars_r (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
return NULL_TREE;
}
+/* Find referenced variables in STMT. In contrast with
+ find_new_referenced_vars, this function will not mark newly found
+ variables for renaming. */
+
+void
+find_referenced_vars_in (gimple stmt)
+{
+ size_t i;
+
+ if (gimple_code (stmt) != GIMPLE_PHI)
+ {
+ for (i = 0; i < gimple_num_ops (stmt); i++)
+ walk_tree (gimple_op_ptr (stmt, i), find_vars_r, NULL, NULL);
+ }
+ else
+ {
+ walk_tree (gimple_phi_result_ptr (stmt), find_vars_r, NULL, NULL);
+
+ for (i = 0; i < gimple_phi_num_args (stmt); i++)
+ {
+ tree arg = gimple_phi_arg_def (stmt, i);
+ walk_tree (&arg, find_vars_r, NULL, NULL);
+ }
+ }
+}
+
+
/* Lookup UID in the referenced_vars hashtable and return the associated
variable. */