So I must have botched this when I hand-applied Richard's patch and use that to generate a new one (I went back to his original and verified he got it right).
We had a test like && MEM_P (whatever) ANd wanted to include regs ie && (MEM_P (whatever) || REG_P (whatever)) I added the latter, but didn't remove the former. As a result the testcase still failed. This applies the obvious bit to remove the && MEM_P (whatever) line. You could legitimately ask why the tester didn't flag the failure. The tester only looks for regressions. A new test that fails is ignored. I'd like to change that one day, but for now that's where we are to avoid excessive noise. Anyway, I put the attached patch into my tester last week. And: http://gcc.gnu.org/jenkins/job/arm-linux-gnueabi/962/console Tests that now work, but didn't before (1 tests): gcc.c-torture/compile/pr90275.c -O3 -g (test for excess errors) Committing to the trunk as obvious. Jeff
commit 529ea7d9596b26ba103578eeab448e9862a2d2c5 Author: Jeff Law <l...@redhat.com> Date: Wed Mar 18 16:07:28 2020 -0600 Complete change to resolve pr90275. PR rtl-optimization/90275 * cse.c (cse_insn): Delete no-op register moves too. diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8694f272a9c..3a2e491113e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2020-03-12 Richard Sandiford <richard.sandif...@arm.com> + + PR rtl-optimization/90275 + * cse.c (cse_insn): Delete no-op register moves too. + 2020-03-18 Martin Sebor <mse...@redhat.com> PR ipa/92799 diff --git a/gcc/cse.c b/gcc/cse.c index 08984c17040..3e8724b3fed 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -5329,7 +5329,6 @@ cse_insn (rtx_insn *insn) else if (n_sets == 1 && !CALL_P (insn) && (MEM_P (trial) || REG_P (trial)) - && MEM_P (dest) && rtx_equal_p (trial, dest) && !side_effects_p (dest) && (cfun->can_delete_dead_exceptions