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

Reply via email to