diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2009-11-21 05:06:24 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@gcc.gnu.org> | 2009-11-21 05:06:24 +0000 |
commit | 42a06e46ab05b7cf751579a50ee302a8ab6b9cae (patch) | |
tree | 161f18860227e5ac9286e4688c55fcb199c6a522 /gcc/tree-ssa.c | |
parent | b70fdfe4beebbc1f82c14326ec3b6a85be0a36b3 (diff) | |
download | gcc-42a06e46ab05b7cf751579a50ee302a8ab6b9cae.zip gcc-42a06e46ab05b7cf751579a50ee302a8ab6b9cae.tar.gz gcc-42a06e46ab05b7cf751579a50ee302a8ab6b9cae.tar.bz2 |
tree-ssa.c (find_released_ssa_name): Handle NULL wi.
* tree-ssa.c (find_released_ssa_name): Handle NULL wi.
(insert_debug_temp_for_var_def): Handle degenerate PHI nodes.
(insert_debug_temps_for_defs): Handle PHI nodes.
* tree-ssa-dom.c (degenerate_phi_result): Don't crash on released
SSA names.
From-SVN: r154402
Diffstat (limited to 'gcc/tree-ssa.c')
-rw-r--r-- | gcc/tree-ssa.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index 15dddab..4d0ccb0 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -279,7 +279,7 @@ find_released_ssa_name (tree *tp, int *walk_subtrees, void *data_) { struct walk_stmt_info *wi = (struct walk_stmt_info *) data_; - if (wi->is_lhs) + if (wi && wi->is_lhs) return NULL_TREE; if (TREE_CODE (*tp) == SSA_NAME) @@ -346,7 +346,13 @@ insert_debug_temp_for_var_def (gimple_stmt_iterator *gsi, tree var) /* If we didn't get an insertion point, and the stmt has already been removed, we won't be able to insert the debug bind stmt, so we'll have to drop debug information. */ - if (is_gimple_assign (def_stmt)) + if (gimple_code (def_stmt) == GIMPLE_PHI) + { + value = degenerate_phi_result (def_stmt); + if (value && walk_tree (&value, find_released_ssa_name, NULL, NULL)) + value = NULL; + } + else if (is_gimple_assign (def_stmt)) { bool no_value = false; @@ -408,6 +414,7 @@ insert_debug_temp_for_var_def (gimple_stmt_iterator *gsi, tree var) at the expense of duplication of expressions. */ if (CONSTANT_CLASS_P (value) + || gimple_code (def_stmt) == GIMPLE_PHI || (usecount == 1 && (!gimple_assign_single_p (def_stmt) || is_gimple_min_invariant (value))) @@ -478,7 +485,7 @@ insert_debug_temps_for_defs (gimple_stmt_iterator *gsi) stmt = gsi_stmt (*gsi); - FOR_EACH_SSA_DEF_OPERAND (def_p, stmt, op_iter, SSA_OP_DEF) + FOR_EACH_PHI_OR_STMT_DEF (def_p, stmt, op_iter, SSA_OP_DEF) { tree var = DEF_FROM_PTR (def_p); |