This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Help with "unable to generate reloads for" atomic_exchangesi


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]