Commit 286ba5b3 by Jakub Jelinek Committed by Jakub Jelinek

re PR middle-end/38140 (ice for C code with -O2)

	PR middle-end/38140
	* tree-ssa-forwprop.c (forward_propagate_addr_expr_1): If
	propagating x = &a into *x = b, add a cast if not useless
	type conversion or don't optimize if another stmt would be
	needed.

	* gcc.dg/pr38140.c: New test.

From-SVN: r141949
parent 5ef87778
2008-11-17 Jakub Jelinek <jakub@redhat.com>
PR middle-end/38140
* tree-ssa-forwprop.c (forward_propagate_addr_expr_1): If
propagating x = &a into *x = b, add a cast if not useless
type conversion or don't optimize if another stmt would be
needed.
2008-11-17 Uros Bizjak <ubizjak@gmail.com>
PR middle-end/37908
......
2008-11-17 Jakub Jelinek <jakub@redhat.com>
PR middle-end/38140
* gcc.dg/pr38140.c: New test.
2008-11-17 Jack Howarth <howarth@bromo.med.uc.edu>
PR testsuite/38099
......
/* PR middle-end/38140 */
/* { dg-do compile } */
/* { dg-options "-O2 -fno-strict-aliasing" } */
int foo (void *x)
{
int (*fn) (int);
*(void **)&fn = x;
return fn (6);
}
......@@ -721,13 +721,28 @@ forward_propagate_addr_expr_1 (tree name, tree def_rhs,
&& TREE_OPERAND (lhs, 0) == name
&& may_propagate_address_into_dereference (def_rhs, lhs))
{
*lhsp = unshare_expr (TREE_OPERAND (def_rhs, 0));
fold_stmt_inplace (use_stmt);
tidy_after_forward_propagate_addr (use_stmt);
bool valid = true;
if (lhsp == gimple_assign_lhs_ptr (use_stmt)
&& !useless_type_conversion_p (TREE_TYPE (TREE_OPERAND (def_rhs, 0)),
TREE_TYPE (rhs))
&& !CONVERT_EXPR_CODE_P (rhs_code))
{
if (rhs_code == SSA_NAME)
gimple_assign_set_rhs_code (use_stmt, NOP_EXPR);
else
valid = false;
}
if (valid)
{
*lhsp = unshare_expr (TREE_OPERAND (def_rhs, 0));
fold_stmt_inplace (use_stmt);
tidy_after_forward_propagate_addr (use_stmt);
/* Continue propagating into the RHS if this was not the only use. */
if (single_use_p)
return true;
/* Continue propagating into the RHS if this was not the only
use. */
if (single_use_p)
return true;
}
}
/* Strip away any outer COMPONENT_REF, ARRAY_REF or ADDR_EXPR
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment