diff options
Diffstat (limited to 'gcc/tree-dfa.c')
-rw-r--r-- | gcc/tree-dfa.c | 47 |
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. */ |