aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa.c
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2014-11-03 11:47:04 +0100
committerMarc Glisse <glisse@gcc.gnu.org>2014-11-03 10:47:04 +0000
commit956623c1378de3c48e77b23c2f2fa275f183e270 (patch)
treeb8fffd826c781877806bce6555060851ee0637bd /gcc/tree-ssa.c
parentb25b35c4ca7edf62118660048d5a7672653644f4 (diff)
downloadgcc-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.c19
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);