https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114768

--- Comment #7 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:9f295847a9c32081bdd0fe908ffba58e830a24fb

commit r14-10035-g9f295847a9c32081bdd0fe908ffba58e830a24fb
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Fri Apr 19 08:47:53 2024 +0200

    rtlanal: Fix set_noop_p for volatile loads or stores [PR114768]

    On the following testcase, combine propagates the mem/v load into mem store
    with the same address and then removes it, because noop_move_p says it is a
    no-op move.  If it was the other way around, i.e. mem/v store and mem load,
    or both would be mem/v, it would be kept.
    The problem is that rtx_equal_p never checks any kind of flags on the rtxes
    (and I think it would be quite dangerous to change it at this point), and
    set_noop_p checks side_effects_p on just one of the operands, not both.
    In the MEM <- MEM set, it only checks it on the destination, in
    store to ZERO_EXTRACT only checks it on the source.

    The following patch adds the missing side_effects_p checks.

    2024-04-19  Jakub Jelinek  <ja...@redhat.com>

            PR rtl-optimization/114768
            * rtlanal.cc (set_noop_p): Don't return true for MEM <- MEM
            sets if src has side-effects or for stores into ZERO_EXTRACT
            if ZERO_EXTRACT operand has side-effects.

            * gcc.dg/pr114768.c: New test.

Reply via email to