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))] Segher