llvm:将3个操作数降低到2个操作数指令
当前llvm的添加、子,。。。指令需要3个操作数: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,
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后端作为一个典型的示例,了解如何执行此操作