File pr34043-4.diff of Package gcc43
2008-02-29 Richard Guenther <rguenther@suse.de>
* tree-ssa-sccvn.c (visit_reference_op_store): Do not insert
struct copies into the expression table.
(simplify_unary_expression): Handle VIEW_CONVERT_EXPR.
(try_to_simplify): Likewise.
Index: gcc/tree-ssa-sccvn.c
===================================================================
*** gcc/tree-ssa-sccvn.c 2008-03-01 19:53:24.000000000 +0100
--- gcc/tree-ssa-sccvn.c 2008-03-01 19:53:24.000000000 +0100
*************** visit_reference_op_store (tree lhs, tree
*** 1311,1317 ****
changed |= set_ssa_val_to (vdef, vdef);
}
! vn_reference_insert (lhs, op, vdefs);
}
else
{
--- 1365,1374 ----
changed |= set_ssa_val_to (vdef, vdef);
}
! /* Do not insert structure copies into the tables. */
! if (is_gimple_min_invariant (op)
! || is_gimple_reg (op))
! vn_reference_insert (lhs, op, vdefs);
}
else
{
*************** simplify_unary_expression (tree rhs)
*** 1549,1561 ****
else if (TREE_CODE (rhs) == NOP_EXPR
|| TREE_CODE (rhs) == CONVERT_EXPR
|| TREE_CODE (rhs) == REALPART_EXPR
! || TREE_CODE (rhs) == IMAGPART_EXPR)
{
/* We want to do tree-combining on conversion-like expressions.
Make sure we feed only SSA_NAMEs or constants to fold though. */
tree tem = valueize_expr (VN_INFO (op0)->expr);
if (UNARY_CLASS_P (tem)
|| BINARY_CLASS_P (tem)
|| TREE_CODE (tem) == SSA_NAME
|| is_gimple_min_invariant (tem))
op0 = tem;
--- 1606,1620 ----
else if (TREE_CODE (rhs) == NOP_EXPR
|| TREE_CODE (rhs) == CONVERT_EXPR
|| TREE_CODE (rhs) == REALPART_EXPR
! || TREE_CODE (rhs) == IMAGPART_EXPR
! || TREE_CODE (rhs) == VIEW_CONVERT_EXPR)
{
/* We want to do tree-combining on conversion-like expressions.
Make sure we feed only SSA_NAMEs or constants to fold though. */
tree tem = valueize_expr (VN_INFO (op0)->expr);
if (UNARY_CLASS_P (tem)
|| BINARY_CLASS_P (tem)
+ || TREE_CODE (tem) == VIEW_CONVERT_EXPR
|| TREE_CODE (tem) == SSA_NAME
|| is_gimple_min_invariant (tem))
op0 = tem;
*************** try_to_simplify (tree stmt, tree rhs)
*** 1607,1613 ****
/* Fallthrough for some codes that can operate on registers. */
if (!(TREE_CODE (rhs) == REALPART_EXPR
! || TREE_CODE (rhs) == IMAGPART_EXPR))
break;
/* We could do a little more with unary ops, if they expand
into binary ops, but it's debatable whether it is worth it. */
--- 1666,1673 ----
/* Fallthrough for some codes that can operate on registers. */
if (!(TREE_CODE (rhs) == REALPART_EXPR
! || TREE_CODE (rhs) == IMAGPART_EXPR
! || TREE_CODE (rhs) == VIEW_CONVERT_EXPR))
break;
/* We could do a little more with unary ops, if they expand
into binary ops, but it's debatable whether it is worth it. */