llvm:将3个操作数降低到2个操作数指令

llvm:将3个操作数降低到2个操作数指令,llvm,operand,Llvm,Operand,当前llvm的添加、子,。。。指令需要3个操作数:dest,src1,src2 如何编写只支持2个操作数的自定义“add”指令? 例如:dest=dest+src1 我在.td文件中尝试了这一点,但没有成功: defm Reg: Instr<opcode, (outs RC:$dest), (ins RC:$A), !strconcat(opcodeStr, " $dest, $dest, $A"), [(set Ty:$dest,

当前llvm的添加、子,。。。指令需要3个操作数:
dest
src1
src2

如何编写只支持2个操作数的自定义“add”指令?
例如:
dest=dest+src1

我在.td文件中尝试了这一点,但没有成功:

defm Reg: Instr<opcode, (outs RC:$dest), (ins RC:$A),
              !strconcat(opcodeStr, " $dest, $dest, $A"),
              [(set Ty:$dest, (opNode Ty:$dest, Ty:$A))]>;
defm Reg:Instr;
它抱怨“输入操作数$dest出现在模式中,但不在操作数列表中!”


谢谢

您需要将其建模为3操作数指令,但需要添加一个约束,即源操作数之一等于目标操作数。请参见X86后端作为一个典型的示例,了解如何执行此操作