diff options
author | Marc Glisse <marc.glisse@inria.fr> | 2014-11-03 11:47:04 +0100 |
---|---|---|
committer | Marc Glisse <glisse@gcc.gnu.org> | 2014-11-03 10:47:04 +0000 |
commit | 956623c1378de3c48e77b23c2f2fa275f183e270 (patch) | |
tree | b8fffd826c781877806bce6555060851ee0637bd /gcc/tree-ssa.c | |
parent | b25b35c4ca7edf62118660048d5a7672653644f4 (diff) | |
download | gcc-956623c1378de3c48e77b23c2f2fa275f183e270.zip gcc-956623c1378de3c48e77b23c2f2fa275f183e270.tar.gz gcc-956623c1378de3c48e77b23c2f2fa275f183e270.tar.bz2 |
re PR tree-optimization/60770 (disappearing clobbers)
2014-11-03 Marc Glisse <marc.glisse@inria.fr>
PR tree-optimization/60770
gcc/
* tree-into-ssa.c (rewrite_update_stmt): Return whether the
statement should be removed.
(maybe_register_def): Likewise. Replace clobbers with default
definitions.
(rewrite_dom_walker::before_dom_children): Remove statement if
rewrite_update_stmt says so.
* tree-ssa-live.c: Include tree-ssa.h.
(set_var_live_on_entry): Do not mark undefined variables as live.
(verify_live_on_entry): Do not check undefined variables.
* tree-ssa.h (ssa_undefined_value_p): New parameter for the case
of partially undefined variables.
* tree-ssa.c (ssa_undefined_value_p): Likewise.
(execute_update_addresses_taken): Do not drop clobbers.
gcc/testsuite/
* gcc.dg/tree-ssa/pr60770-1.c: New file.
From-SVN: r217034
Diffstat (limited to 'gcc/tree-ssa.c')
-rw-r--r-- | gcc/tree-ssa.c | 19 |
1 files changed, 4 insertions, 15 deletions
diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index bcf65e1..2535461 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -1188,10 +1188,11 @@ tree_ssa_strip_useless_type_conversions (tree exp) } -/* Return true if T, an SSA_NAME, has an undefined value. */ +/* Return true if T, an SSA_NAME, has an undefined value. PARTIAL is what + should be returned if the value is only partially undefined. */ bool -ssa_undefined_value_p (tree t) +ssa_undefined_value_p (tree t, bool partial) { gimple def_stmt; tree var = SSA_NAME_VAR (t); @@ -1215,7 +1216,7 @@ ssa_undefined_value_p (tree t) return true; /* Check if the complex was not only partially defined. */ - if (is_gimple_assign (def_stmt) + if (partial && is_gimple_assign (def_stmt) && gimple_assign_rhs_code (def_stmt) == COMPLEX_EXPR) { tree rhs1, rhs2; @@ -1561,18 +1562,6 @@ execute_update_addresses_taken (void) if (gimple_assign_lhs (stmt) != lhs) gimple_assign_set_lhs (stmt, lhs); - /* For var ={v} {CLOBBER}; where var lost - TREE_ADDRESSABLE just remove the stmt. */ - if (DECL_P (lhs) - && TREE_CLOBBER_P (rhs) - && bitmap_bit_p (suitable_for_renaming, DECL_UID (lhs))) - { - unlink_stmt_vdef (stmt); - gsi_remove (&gsi, true); - release_defs (stmt); - continue; - } - if (gimple_assign_rhs1 (stmt) != rhs) { gimple_stmt_iterator gsi = gsi_for_stmt (stmt); |