diff options
author | Richard Biener <rguenther@suse.de> | 2020-05-25 09:17:51 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2020-05-25 11:17:09 +0200 |
commit | f73f8bab9f2474f175cc5ca5ba8ebb32808a4cae (patch) | |
tree | 240811d6078fada90000cc4ffc550a60c62ced18 | |
parent | af62ba41a4ed1e760e0056ba142798e8d6266e4d (diff) | |
download | gcc-f73f8bab9f2474f175cc5ca5ba8ebb32808a4cae.zip gcc-f73f8bab9f2474f175cc5ca5ba8ebb32808a4cae.tar.gz gcc-f73f8bab9f2474f175cc5ca5ba8ebb32808a4cae.tar.bz2 |
tree-optimization/95284 - amend previous store commoning fix
Generalize check for clobbers.
2020-05-25 Richard Biener <rguenther@suse.de>
PR tree-optimization/95284
* tree-ssa-sink.c (sink_common_stores_to_bb): Amend previous
fix.
* g++.dg/torture/pr95284.C: New testcase.
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/torture/pr95284.C | 16 | ||||
-rw-r--r-- | gcc/tree-ssa-sink.c | 2 |
4 files changed, 28 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1a808b7..8a08927 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2020-05-25 Richard Biener <rguenther@suse.de> + + PR tree-optimization/95284 + * tree-ssa-sink.c (sink_common_stores_to_bb): Amend previous + fix. + 2020-05-25 Hongtao Liu <hongtao.liu@intel.com> PR target/95125 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 99cdfd0..db94bd0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2020-05-25 Richard Biener <rguenther@suse.de> + + PR tree-optimization/95284 + * g++.dg/torture/pr95284.C: New testcase. + 2020-05-25 Eric Botcazou <ebotcazou@adacore.com> * gnat.dg/renaming16.adb: New test. diff --git a/gcc/testsuite/g++.dg/torture/pr95284.C b/gcc/testsuite/g++.dg/torture/pr95284.C new file mode 100644 index 0000000..3c273ef --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr95284.C @@ -0,0 +1,16 @@ +// { dg-do compile } +// { dg-require-effective-target lp64 } + +#include <algorithm> + +short a; +unsigned long long c; +char d; +unsigned e; + +void f() +{ + for (;;) + for (char b = 0; b < 19; b += 2) + a = std::min((1 ? d : 0) ? e : c, (unsigned long long)72252803048); +} diff --git a/gcc/tree-ssa-sink.c b/gcc/tree-ssa-sink.c index b61ecf1..962ad07 100644 --- a/gcc/tree-ssa-sink.c +++ b/gcc/tree-ssa-sink.c @@ -536,7 +536,7 @@ sink_common_stores_to_bb (basic_block bb) else if (! operand_equal_p (gimple_assign_lhs (first_store), gimple_assign_lhs (def), 0) || (gimple_clobber_p (first_store) - && !gimple_clobber_p (def))) + != gimple_clobber_p (def))) { first_store = NULL; break; |