aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorBin Cheng <bin.cheng@arm.com>2017-08-01 09:20:08 +0000
committerBin Cheng <amker@gcc.gnu.org>2017-08-01 09:20:08 +0000
commit7061cfc027e29b6d276ef5e09835c93899cfd132 (patch)
tree1b875298231b36b3e75154c96662707ab1885345 /gcc
parent39637a44f4d65ccb23f83399eefd5f06d4bf4e4a (diff)
downloadgcc-7061cfc027e29b6d276ef5e09835c93899cfd132.zip
gcc-7061cfc027e29b6d276ef5e09835c93899cfd132.tar.gz
gcc-7061cfc027e29b6d276ef5e09835c93899cfd132.tar.bz2
re PR tree-optimization/81627 (ICE on valid code at -O3: in check_loop_closed_ssa_use, at tree-ssa-loop-manip.c:707)
PR tree-optimization/81627 * tree-predcom.c (prepare_finalizers): Always rewrite into loop closed ssa form for store-store chain. gcc/testsuite * gcc.dg/tree-ssa/pr81627.c: New. From-SVN: r250764
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr81627.c28
-rw-r--r--gcc/tree-predcom.c10
4 files changed, 44 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c8ed19d..9e09d56 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
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
* tree-predcom.c (add_ref_to_chain): Don't set has_max_use_after
for store-store chain.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e2f695f..a86b281 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
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
* gcc.dg/tree-ssa/pr81620-1.c: New.
* gcc.dg/tree-ssa/pr81620-2.c: New.
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr81627.c b/gcc/testsuite/gcc.dg/tree-ssa/pr81627.c
new file mode 100644
index 0000000..9ba43be
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr81627.c
@@ -0,0 +1,28 @@
+/* { 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" } } */
diff --git a/gcc/tree-predcom.c b/gcc/tree-predcom.c
index f7a57a4..4538773 100644
--- a/gcc/tree-predcom.c
+++ b/gcc/tree-predcom.c
@@ -2983,11 +2983,11 @@ prepare_finalizers (struct loop *loop, vec<chain_p> chains)
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
{