+2017-08-01 Bin Cheng <bin.cheng@arm.com>
+
+ PR tree-optimization/81627
+ * tree-predcom.c (prepare_finalizers): Always rewrite into loop
+ closed ssa form for store-store chain.
+
2017-08-01 Bin Cheng <bin.cheng@arm.com>
PR tree-optimization/81620
+2017-08-01 Bin Cheng <bin.cheng@arm.com>
+
+ PR tree-optimization/81627
+ * gcc.dg/tree-ssa/pr81627.c: New.
+
2017-08-01 Bin Cheng <bin.cheng@arm.com>
PR tree-optimization/81620
--- /dev/null
+/* { dg-do run } */
+/* { dg-options "-O3 -fno-tree-loop-vectorize -fdump-tree-pcom-details" } */
+
+int a, b, c, d[6], e = 3, f;
+
+void abort (void);
+void fn1 ()
+{
+ for (b = 1; b < 5; b++)
+ {
+ for (c = 0; c < 5; c++)
+ d[b] = e;
+ if (a)
+ f++;
+ d[b + 1] = 1;
+ }
+}
+
+int main ()
+{
+ fn1 ();
+ if (d[0] != 0 || d[1] != 3 || d[2] != 3
+ || d[3] != 3 || d[4] != 3 || d[5] != 1)
+ abort ();
+
+ return 0;
+}
+/* { dg-final { scan-tree-dump-times "Store-stores chain" 1 "pcom" } } */
if (prepare_finalizers_chain (loop, chain))
{
i++;
- /* We don't corrupt loop closed ssa form for store elimination
- chain if eliminated stores only store loop invariant values
- into memory. */
- if (!chain->inv_store_elimination)
- loop_closed_ssa |= (!chain->inv_store_elimination);
+ /* Be conservative, assume loop closed ssa form is corrupted
+ by store-store chain. Though it's not always the case if
+ eliminated stores only store loop invariant values into
+ memory. */
+ loop_closed_ssa = true;
}
else
{