+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.
(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
(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)
(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.
--- /dev/null
+/* { 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" } } */