diff options
author | Bin Cheng <bin.cheng@arm.com> | 2017-08-01 09:20:08 +0000 |
---|---|---|
committer | Bin Cheng <amker@gcc.gnu.org> | 2017-08-01 09:20:08 +0000 |
commit | 7061cfc027e29b6d276ef5e09835c93899cfd132 (patch) | |
tree | 1b875298231b36b3e75154c96662707ab1885345 /gcc | |
parent | 39637a44f4d65ccb23f83399eefd5f06d4bf4e4a (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/pr81627.c | 28 | ||||
-rw-r--r-- | gcc/tree-predcom.c | 10 |
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 { |