Generalize check for clobbers. Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.
Richard. 2020-05-25 Richard Biener <rguent...@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. --- gcc/testsuite/g++.dg/torture/pr95284.C | 16 ++++++++++++++++ gcc/tree-ssa-sink.c | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/torture/pr95284.C diff --git a/gcc/testsuite/g++.dg/torture/pr95284.C b/gcc/testsuite/g++.dg/torture/pr95284.C new file mode 100644 index 00000000000..3c273ef8d55 --- /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 b61ecf12d1f..962ad076968 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; -- 2.25.1