如何制作新的 LLVM 指令?
How to make a new LLVM instruction?
我正在尝试制作指令
%a = i32 add %b, %c
进入
%a = i32 mul %b, %c
我已经搜索了几个小时,但到目前为止我发现的答案是与创建在 Instructions.h(ex AllocaInst)中定义的新指令相关的答案,而不是 mul、sdiv、div,说明。
我也看过 https://llvm.org/docs/ProgrammersManual.html#creating-and-inserting-new-instructions
但我无法得到示例 "auto *newInst = new Instruction(...);"
工作,因为即使看了之后我也不知道参数应该是什么
https://llvm.org/doxygen/classllvm_1_1Instruction.html#a2b30181f228bc6318130557d7ffca945
编辑:
我想我已经成功地创建了指令本身,但我无法以正确的方式替换它。
Instruction *ni = BinaryOperator::CreateMul(inst.getOperand(0), newvalue);
ReplaceInstWithInst(*i, ni);
其中 *i 来自对基本块的迭代(例如 (auto &i : bb))
已解决!
Instruction *ni = BinaryOperator::CreateMul(inst.getOperand(0), newvalue);
bb.getInstList().insert(inst.getIterator(), ni);
我正在尝试制作指令
%a = i32 add %b, %c
进入
%a = i32 mul %b, %c
我已经搜索了几个小时,但到目前为止我发现的答案是与创建在 Instructions.h(ex AllocaInst)中定义的新指令相关的答案,而不是 mul、sdiv、div,说明。 我也看过 https://llvm.org/docs/ProgrammersManual.html#creating-and-inserting-new-instructions 但我无法得到示例 "auto *newInst = new Instruction(...);" 工作,因为即使看了之后我也不知道参数应该是什么 https://llvm.org/doxygen/classllvm_1_1Instruction.html#a2b30181f228bc6318130557d7ffca945
编辑: 我想我已经成功地创建了指令本身,但我无法以正确的方式替换它。
Instruction *ni = BinaryOperator::CreateMul(inst.getOperand(0), newvalue);
ReplaceInstWithInst(*i, ni);
其中 *i 来自对基本块的迭代(例如 (auto &i : bb))
已解决!
Instruction *ni = BinaryOperator::CreateMul(inst.getOperand(0), newvalue);
bb.getInstList().insert(inst.getIterator(), ni);