aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/tree-ssa-dse.c31
2 files changed, 13 insertions, 23 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b7c1870..bbf5651 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2008-05-14 Richard Guenther <rguenther@suse.de>
+
+ * tree-ssa-dse.c (dse_possible_dead_store_p): Remove dead code.
+ Make sure to register the store if the use is a PHI_NODE.
+
2008-05-14 Olivier Hainque <hainque@adacore.com>
* expr.c (expand_expr_real_1) <normal_inner_ref>: Force op0 to
diff --git a/gcc/tree-ssa-dse.c b/gcc/tree-ssa-dse.c
index 8c96004..a4e507c 100644
--- a/gcc/tree-ssa-dse.c
+++ b/gcc/tree-ssa-dse.c
@@ -313,6 +313,14 @@ dse_possible_dead_store_p (tree stmt,
gcc_assert (*use_p != NULL_USE_OPERAND_P);
*first_use_p = *use_p;
+ /* ??? If we hit a PHI_NODE we could skip to the PHI_RESULT uses.
+ Don't bother to do that for now. */
+ if (TREE_CODE (temp) == PHI_NODE)
+ {
+ fail = true;
+ break;
+ }
+
/* In the case of memory partitions, we may get:
# MPT.764_162 = VDEF <MPT.764_161(D)>
@@ -360,29 +368,6 @@ dse_possible_dead_store_p (tree stmt,
return false;
}
- /* Skip through any PHI nodes we have already seen if the PHI
- represents the only use of this store.
-
- Note this does not handle the case where the store has
- multiple VDEFs which all reach a set of PHI nodes in the same block. */
- while (*use_p != NULL_USE_OPERAND_P
- && TREE_CODE (*use_stmt) == PHI_NODE
- && bitmap_bit_p (dse_gd->stores, get_stmt_uid (*use_stmt)))
- {
- /* A PHI node can both define and use the same SSA_NAME if
- the PHI is at the top of a loop and the PHI_RESULT is
- a loop invariant and copies have not been fully propagated.
-
- The safe thing to do is exit assuming no optimization is
- possible. */
- if (SSA_NAME_DEF_STMT (PHI_RESULT (*use_stmt)) == *use_stmt)
- return false;
-
- /* Skip past this PHI and loop again in case we had a PHI
- chain. */
- single_imm_use (PHI_RESULT (*use_stmt), use_p, use_stmt);
- }
-
return true;
}