This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: Help with "unable to generate reloads for" atomic_exchangesi
- From: Richard Sandiford <richard dot sandiford at arm dot com>
- To: William Tambe <tambewilliam at gmail dot com>
- Cc: gcc-help <gcc-help at gcc dot gnu dot org>
- Date: Tue, 24 Sep 2019 11:58:24 +0100
- Subject: Re: Help with "unable to generate reloads for" atomic_exchangesi
- References: <CAF8i9mMMPrnuO4NszLaFDOFCQ3yB-iwDJYwXtkEM3zjxdKo82Q@mail.gmail.com>
William Tambe <tambewilliam@gmail.com> writes:
> I have defined atomic_exchangesi as follow in the machine description:
>
> (define_insn "atomic_exchangesi"
> [(set (match_operand:SI 0 "register_operand" "=r,r")
> (match_operand:SI 1 "memory_operand" "+B,W"))
> (set (match_dup 1)
> (unspec:SI
> [(match_operand:SI 2 "register_operand" "0,0")
> (match_operand:SI 3 "const_int_operand")]
> 0))]
"+" operands have to be destinations, so I think you need to swap
the match_operand:SI 1 and match_dup 1 around. (It's OK to have
a match_dup 1 source before a match_operand 1 destination.)
Richard
> ""
> "@
> ...
> ...")
>
>
> However GCC throw the following error for atomic_exchangesi:
> Any idea what could be the cause of such an error ?
>
> error: unable to generate reloads for:
> 902 | }
> | ^
> (insn 89 86 90 12 (parallel [
> (set (reg:SI 4 %4 [orig:36 _30 ] [36])
> (mem/v:SI (plus:SI (reg/f:SI 0 %sp)
> (const_int 36 [0x24])) [-1 S4 A32]))
> (set (mem/v:SI (plus:SI (reg/f:SI 0 %sp)
> (const_int 36 [0x24])) [-1 S4 A32])
> (unspec:SI [
> (reg:SI 3 %3 [orig:34 _28 ] [34])
> (const_int 32770 [0x8002])
> ] 0))
> ]) "/linux/include/asm-generic/atomic.h":118:1 35 {atomic_exchangesi}
> (nil))
> during RTL pass: reload