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

--- Comment #2 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jeff Law <[email protected]>:

https://gcc.gnu.org/g:4b618758b2bfe6d64932301fd4a77a8fc982b1b4

commit r16-6399-g4b618758b2bfe6d64932301fd4a77a8fc982b1b4
Author: Jeff Law <[email protected]>
Date:   Fri Dec 26 15:24:56 2025 -0700

    [RISC-V][PR target/123283] Wrap naked REG operands with a USE.

    I was in the process of testing this patch when Andreas filed PR123283.

    What's going on is we have patterns in sync.md which have naked operands:

    (define_insn "subword_atomic_fetch_strong_<atomic_optab>"
      [(set (match_operand:SI 0 "register_operand" "=&r")   ;; old value at mem
        (match_operand:SI 1 "memory_operand" "+A"))        ;; mem location
       (set (match_dup 1)
        (unspec_volatile:SI
          [(any_atomic:SI (match_dup 1)
                 (match_operand:SI 2 "arith_operand" "rI")) ;; value for op
           (match_operand:SI 3 "const_int_operand")]           ;; model
         UNSPEC_SYNC_OLD_OP_SUBWORD))
        (match_operand:SI 4 "arith_operand" "rI")          ;; mask
        (match_operand:SI 5 "arith_operand" "rI")          ;; not_mask
        (clobber (match_scratch:SI 6 "=&r"))               ;; tmp_1
        (clobber (match_scratch:SI 7 "=&r"))]              ;; tmp_2

    Note carefully operands #4 and #5 and the fact they are a toplevel
construct as
    opposed to being an operand of another RTX.  That's a no-no.  They need to
be
    wrapped with a USE.

    I spot-checked sync.md and found a few more instances.   Fixing the set I
found
    fixed the testsuite regressions I was seeing and also fixes the
mis-compilation
    of libgo.  Bootstrapped and regression tested on my BPI and Pioneer.  It's
also
    clean on the riscv64-elf and riscv32-elf targets in my tester.

            PR target/123283
    gcc/
            * config/riscv/sync.md (subword_atomic_fetch_strong_nand): Add
            USEs for naked operands that might be pseudos.
            (subword_atomic_fetch_strong_<atomic_optab>): Likewise.
            (subword_atomic_exchange_strong): Likewise.
            (subword_atomic_cas_strong): Likewise.

Reply via email to