如何通过 LLVM C++ API 在没有基本块的情况下在函数中创建指令?

How to create instruction in function without basic block by LLVM C++ API?

我想在没有基本块的函数中插入指令,例如:

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++ 在没有 BasicBlock 的情况下将指令创建到函数中 API?

I want to insert instructions into function without basic block, for example:

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
}

该函数只包含一个基本块,而不是零。要创建这样的函数,您需要将所有指令添加到函数的入口块。

How could I create instruction into function without BasicBlock by C++ API ?

您不能 - 既不能使用 C++ API 也不能使用任何其他方式。根据定义,每条指令都必须是基本块的一部分。

基本块是 CFG 中的节点,因此如果您有一条没有基本块的指令,它就不会成为 CFG 的一部分,因此永远不会被执行,这将毫无意义。