如何制作新的 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);