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

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

https://gcc.gnu.org/g:3b2fbe3e723b20ea9089e5f45c55b79feb37085b

commit r9-8213-g3b2fbe3e723b20ea9089e5f45c55b79feb37085b
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Thu Jan 23 20:08:22 2020 +0100

    postreload: Fix up postreload combine [PR93402]

    The following testcase is miscompiled, because the postreload pass changes:
    -(insn 14 13 23 2 (parallel [
    -            (set (reg:DI 1 dx [94])
    -                (plus:DI (reg:DI 1 dx [95])
    -                    (reg:DI 5 di [92])))
    -            (clobber (reg:CC 17 flags))
    -        ]) "pr93402.c":8:30 186 {*adddi_1}
    -     (expr_list:REG_EQUAL (plus:DI (reg:DI 5 di [92])
    -            (const_int 111111111111 [0x19debd01c7]))
    -        (nil)))
    -(insn 23 14 25 2 (set (reg:SI 0 ax)
    +(insn 23 13 25 2 (set (reg:SI 0 ax)
             (const_int 0 [0])) "pr93402.c":10:1 67 {*movsi_internal}
          (nil))
     (insn 25 23 26 2 (use (reg:SI 0 ax)) "pr93402.c":10:1 -1
          (nil))
    -(insn 26 25 35 2 (use (reg:DI 1 dx)) "pr93402.c":10:1 -1
    +(insn 26 25 35 2 (use (plus:DI (reg:DI 1 dx [95])
    +            (reg:DI 5 di [92]))) "pr93402.c":10:1 -1
          (nil))
    A USE insn is not a normal insn and verify_changes called from
    apply_change_group is happy about any changes into it.
    The following patch avoids this optimization if we were to change
    the USE operand (this routine only changes a reg into (plus reg reg2)).

    2020-01-23  Jakub Jelinek  <ja...@redhat.com>

        PR rtl-optimization/93402
        * postreload.c (reload_combine_recognize_pattern): Don't try to adjust
        USE insns.

        * gcc.c-torture/execute/pr93402.c: New test.

Reply via email to