aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Berlin <dberlin@dbrelin.org>2007-07-18 15:44:28 +0000
committerDaniel Berlin <dberlin@dbrelin.org>2007-07-18 15:44:28 +0000
commit528bc47dafc8fdd1a6272a9f0a7556bcd001d966 (patch)
treec53527fbd2f51b07fc3d2854903b5f4ea1d26240
parent021091ed3677909c89535903e7f7386d37ff5757 (diff)
2007-07-18 Daniel Berlin <dberlin@dberlin.org>
* tree-ssa-sccvn.c (try_to_simplify): Use valid_gimple_expression * tree-ssa-propagate (valid_gimple_expression): Handle ADDR_EXPR properly. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@126721 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-ssa-propagate.c19
-rw-r--r--gcc/tree-ssa-sccvn.c2
3 files changed, 22 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5cf388443ad..df4a61104c9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2007-07-18 Daniel Berlin <dberlin@dberlin.org>
+
+ * tree-ssa-sccvn.c (try_to_simplify): Use valid_gimple_expression
+ * tree-ssa-propagate (valid_gimple_expression): Handle ADDR_EXPR
+ properly.
+
2007-07-18 Rask Ingemann Lambertsen <rask@sygehus.dk>
PR target/32808
diff --git a/gcc/tree-ssa-propagate.c b/gcc/tree-ssa-propagate.c
index 096664d90d1..4803362aef5 100644
--- a/gcc/tree-ssa-propagate.c
+++ b/gcc/tree-ssa-propagate.c
@@ -606,10 +606,21 @@ valid_gimple_expression_p (tree expr)
switch (code)
{
case ADDR_EXPR:
- if (TREE_CODE (TREE_OPERAND (expr, 0)) == ARRAY_REF
- && !is_gimple_val (TREE_OPERAND (TREE_OPERAND (expr, 0), 1)))
- return false;
- break;
+ {
+ tree t = TREE_OPERAND (expr, 0);
+ while (handled_component_p (t))
+ {
+ /* ??? More checks needed, see the GIMPLE verifier. */
+ if ((TREE_CODE (t) == ARRAY_REF
+ || TREE_CODE (t) == ARRAY_RANGE_REF)
+ && !is_gimple_val (TREE_OPERAND (t, 1)))
+ return false;
+ t = TREE_OPERAND (t, 0);
+ }
+ if (!is_gimple_addressable (t))
+ return false;
+ break;
+ }
case TRUTH_NOT_EXPR:
if (!is_gimple_val (TREE_OPERAND (expr, 0)))
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c
index 53e680c383a..589058fdc2c 100644
--- a/gcc/tree-ssa-sccvn.c
+++ b/gcc/tree-ssa-sccvn.c
@@ -1437,7 +1437,7 @@ try_to_simplify (tree stmt, tree rhs)
if (TREE_READONLY (rhs)
&& TREE_STATIC (rhs)
&& DECL_INITIAL (rhs)
- && is_gimple_min_invariant (DECL_INITIAL (rhs)))
+ && valid_gimple_expression_p (DECL_INITIAL (rhs)))
return DECL_INITIAL (rhs);
/* Fallthrough. */