2014-11-20 Richard Biener <rguenther@suse.de>
PR middle-end/63962
* match.pd ((p +p off1) +p off2 -> (p +p (off1 + off2))):
Guard with single-use operand 0.
* gcc.dg/tree-ssa/forwprop-30.c: New testcase.
From-SVN: r217828
+2014-11-20 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/63962
+ * match.pd ((p +p off1) +p off2 -> (p +p (off1 + off2))):
+ Guard with single-use operand 0.
+
2014-11-20 Richard Biener <rguenther@suse.de>
PR tree-optimization/63677
/* Associate (p +p off1) +p off2 as (p +p (off1 + off2)). */
(simplify
- (pointer_plus (pointer_plus @0 @1) @3)
- (pointer_plus @0 (plus @1 @3)))
+ (pointer_plus (pointer_plus@2 @0 @1) @3)
+ (if (TREE_CODE (@2) != SSA_NAME || has_single_use (@2))
+ (pointer_plus @0 (plus @1 @3))))
/* Pattern match
tem1 = (long) ptr1;
+2014-11-20 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/63962
+ * gcc.dg/tree-ssa/forwprop-30.c: New testcase.
+
2014-11-20 Richard Biener <rguenther@suse.de>
PR tree-optimization/63677
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O -fdump-tree-optimized" } */
+
+int *p;
+int *foo (int *q, int i, int j)
+{
+ p = q + i;
+ return p + j;
+}
+
+/* We shouldn't associate (q + i) + j to q + (i + j) here as we
+ need q + i as well. */
+
+/* { dg-final { scan-tree-dump-times "\\+" 2 "optimized" } } */
+/* { dg-final { cleanup-tree-dump "optimized" } } */