+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
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)))
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. */