Maybe try this: (define_insn "myInst" [ (set (match_operand:DI 0 "register_operand" "=r") (unspec:DI [(match_operand:DI 1 "register_operand" "r") (match_operand:DI 2 "register_operand" "r") (reg:DI 66)] 5)) (set (reg:DI 66) (unspec:DI [(match_operand:DI 1 "register_operand" "r") (match_operand:DI 2 "register_operand" "r") (reg:DI 66)] 6)) ] "" "myInst\\t%0,%1,%2" [(set_attr "type" "arith") (set_attr "mode" "DI") (set_attr "length" "1")])
Which basically means op[0] = unspec:5(op[1], op[2], reg:66); [reg:66] = unspec:6(op[1], op[2], reg:66) So when you have two in a row, the second depends on the first as you have the set of reg:66. The clobber in your original code does not do that, it says reg 66 cannot be depended on the value across the instruction. Thanks, Andrew Pinski