Commit 1447bf05 by Richard Guenther Committed by Richard Biener

re PR tree-optimization/15255 ([tree-ssa] a * 2 + a * 2 is not converted to a * 4)

2008-04-29  Richard Guenther  <rguenther@suse.de>

	PR middle-end/15255
	* fold-const.c (fold_binary): Fold (A + A) * C to A * 2*C.

	* gcc.dg/fold-plusmult.c: New testcase.

From-SVN: r134798
parent 59e6913a
2008-04-29 Richard Guenther <rguenther@suse.de>
PR middle-end/15255
* fold-const.c (fold_binary): Fold (A + A) * C to A * 2*C.
2008-04-29 Richard Guenther <rguenther@suse.de>
* tree-ssa-alias.c (finalize_ref_all_pointers): Remove.
(compute_may_aliases): Do not call finalize_ref_all_pointers.
(compute_flow_insensitive_aliasing): Do not treat
......
......@@ -10154,6 +10154,17 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
return fold_build2 (LSHIFT_EXPR, type, op1,
TREE_OPERAND (arg0, 1));
/* (A + A) * C -> A * 2 * C */
if (TREE_CODE (arg0) == PLUS_EXPR
&& TREE_CODE (arg1) == INTEGER_CST
&& operand_equal_p (TREE_OPERAND (arg0, 0),
TREE_OPERAND (arg0, 1), 0))
return fold_build2 (MULT_EXPR, type,
omit_one_operand (type, TREE_OPERAND (arg0, 0),
TREE_OPERAND (arg0, 1)),
fold_build2 (MULT_EXPR, type,
build_int_cst (type, 2) , arg1));
strict_overflow_p = false;
if (TREE_CODE (arg1) == INTEGER_CST
&& 0 != (tem = extract_muldiv (op0, arg1, code, NULL_TREE,
......
2008-04-29 Richard Guenther <rguenther@suse.de>
PR middle-end/15255
* gcc.dg/fold-plusmult.c: New testcase.
2008-04-29 Richard Guenther <rguenther@suse.de>
PR middle-end/36077
* gcc.c-torture/execute/pr36077.c: New testcase.
/* { dg-do compile } */
/* { dg-options "-fdump-tree-original" } */
int test1 (int a)
{
return 2*a + 2*a;
}
int test2 (int a)
{
return (a + a)*2;
}
/* { dg-final { scan-tree-dump-times "<a> \\\* 4" 2 "original" } } */
/* { dg-final { cleanup-tree-dump "original" } } */
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