【发布时间】:2020-10-29 08:31:47
【问题描述】:
我想在没有基本块的函数中插入指令,例如:
define void @_Z2f2v() nounwind {
%a = alloca i32, align 4
%b = alloca i32, align 4
store i32 2, i32* %a, align 4
%1 = load i32* %a, align 4
%2 = icmp sgt i32 %1, 0
ret void
}
但我阅读了 LLVM 文档,我拥有的所有 C++ API 都是:
BasicBlock *bb = BasicBlock::Create(...);
irBuilder.setInsertPoint(bb);
irBuilder.CreateXXXInst(...);
或
Instruction *inst = new XXXInst(..., Instruction *insertBefore);
Instruction *inst = new XXXInst(..., BasicBlock *insertAtEnd);
看来我必须在函数的开头创建一个BasicBlock。
如何通过 C++ API 在没有 BasicBlock 的情况下将指令创建到函数中?
【问题讨论】:
-
它不需要BasicBlock,它只需要一个插入指令的位置。
-
我应该使用什么位置?你能给我一个简短的例子吗?
-
任何指令本身就是一个位置,正如您可以从“insertBefore”参数名称中推断的那样。此外,您可以使用现有指令作为
setInsertPoint的参数。 -
@oakad,您能告诉我,在我通过
llvm::Function::Create(...)创建函数后,我可以获得哪些现有指令?或者你的意思是llvm::Function本身就是一个指令? -
指令肯定需要一个基本块。但是:为什么要避免使用基本块?这里真正的问题是什么?