On Tue, Sep 24, 2019 at 10:52 AM Segher Boessenkool <segher@xxxxxxxxxxxxxxxxxxx> wrote: > > On Tue, Sep 24, 2019 at 04:31:49AM -0500, William Tambe wrote: > > 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))] > > "" > > "@ > > ... > > ...") > > Don't use "+", just use matching constraints, like the "0" you already > have, but then "1"? Like > > (define_insn "atomic_exchangesi" > [(set (match_operand:SI 0 "register_operand" "=r,r") > (match_operand:SI 1 "memory_operand" "B,W")) > (set (match_operand:SI 2 "memory_operand" "=1,1") > (unspec:SI > [(match_operand:SI 3 "register_operand" "0,0") > (match_operand:SI 4 "const_int_operand")] > 0))] > Per https://gcc.gnu.org/onlinedocs/gccint/Standard-Names.html , atomic_exchangesi only has 4 operands instead of 5 operands as it is the case in your example. I did try the following, but I get "repeated operand number 1" (define_insn "atomic_exchangesi" [(set (match_operand:SI 0 "register_operand" "=r,r") (match_operand:SI 1 "memory_operand" "B,W")) (set (match_operand:SI 1 "memory_operand" "=1,1") (unspec:SI [(match_operand:SI 2 "register_operand" "0,0") (match_operand:SI 3 "const_int_operand")] 0))] "" "@ ... ...") Any other suggestions that I could try ? > > Segher