Commit b302f2e0 by Richard Biener Committed by Richard Biener

re PR rtl-optimization/78546 (wrong code at -O2 and above)

2016-11-29  Richard Biener  <rguenther@suse.de>

	PR middle-end/78546
	* match.pd: Add CST1 - (CST2 - A) -> CST3 + A missing case.

	* gcc.dg/tree-ssa/forwprop-36.c: New testcase.

From-SVN: r242953
parent e24dcd7d
2016-11-29 Richard Biener <rguenther@suse.de>
PR middle-end/78546
* match.pd: Add CST1 - (CST2 - A) -> CST3 + A missing case.
2016-11-29 Janus Weil <janus@gcc.gnu.org>
* doc/contrib.texi: Add a few missing gfortran contributors.
......@@ -1195,7 +1195,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(minus @0 (minus @0 @1))
@1)
/* (A +- CST) +- CST -> A + CST */
/* (A +- CST1) +- CST2 -> A + CST3 */
(for outer_op (plus minus)
(for inner_op (plus minus)
(simplify
......@@ -1208,7 +1208,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(if (cst && !TREE_OVERFLOW (cst))
(inner_op @0 { cst; } ))))))
/* (CST - A) +- CST -> CST - A */
/* (CST1 - A) +- CST2 -> CST3 - A */
(for outer_op (plus minus)
(simplify
(outer_op (minus CONSTANT_CLASS_P@1 @0) CONSTANT_CLASS_P@2)
......@@ -1216,6 +1216,13 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(if (cst && !TREE_OVERFLOW (cst))
(minus { cst; } @0)))))
/* CST1 - (CST2 - A) -> CST3 + A */
(simplify
(minus CONSTANT_CLASS_P@1 (minus CONSTANT_CLASS_P@2 @0))
(with { tree cst = const_binop (MINUS_EXPR, type, @1, @2); }
(if (cst && !TREE_OVERFLOW (cst))
(plus { cst; } @0))))
/* ~A + A -> -1 */
(simplify
(plus:c (bit_not @0) @0)
......
2016-11-29 Richard Biener <rguenther@suse.de>
PR middle-end/78546
* gcc.dg/tree-ssa/forwprop-36.c: New testcase.
2016-11-29 Segher Boessenkool <segher@kernel.crashing.org>
* gcc.target/powerpc/rldic-0.c: New testcase.
......
/* { dg-do compile { target int128 } } */
/* { dg-options "-O -fdump-tree-cddce1" } */
typedef unsigned __int128 u128;
u128 a, b;
static inline u128
foo (u128 p1)
{
p1 += ~b;
return -p1;
}
int
main ()
{
u128 x = foo (~0x7fffffffffffffff);
if (x != 0x8000000000000001)
__builtin_abort();
return 0;
}
/* { dg-final { scan-tree-dump "if \\(b.0_\[0-9\]+ != 0\\)" "cddce1" } } */
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