LLVM - 没有BB的无效指令

时间:2010-10-27 21:22:11

标签: llvm

有人知道这个错误意味着什么吗?当我尝试反汇编LLVMWriteBitcodeToFile写的文件时,我收到错误。当我使用LLVMDumpModule转储模块并手动组装和反汇编文件时,不会发生错误。我正在尝试编译的模块(来自LLVMDumpModule)看起来像:

; ModuleID = 'Test'

define i32 @a(i32) {
entry:
  %icmp = icmp eq i32 %0, 1                       ; <i1> [#uses=1]
  br i1 %icmp, label %_L2, label %_L3

_L1:                                              ; preds = %_L3
  ret i32 %0
  call void @RAISE(i32 1)
  unreachable

_L2:                                              ; preds = %entry
  ret i32 1

_L3:                                              ; preds = %entry
  br label %_L1
}

declare void @RAISE(i32)

任何线索?

2 个答案:

答案 0 :(得分:4)

我不知道显示哪条指令的错误信息,但我的猜测是

call void @RAISE(i32 1), 

原因可能是它在终结符指令(基本块中的最后一条指令)之后

ret i32 %0

,因此没有父BB

答案 1 :(得分:2)

由于错误地构造了代表IR的内存LLVM对象,我之前遇到过类似的症状。使用最初生成此代码的代码,并确保它没有做任何可疑的事情。