LLVM - неверная инструкция без BB - PullRequest
4 голосов
/ 28 октября 2010

Кто-то знает, что означает эта ошибка?Я получаю ошибку, когда пытаюсь разобрать файл, написанный 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 ]

4 голосов
/ 01 июня 2012

Я не знаю, какое сообщение об ошибке отображается для какой инструкции, но я предполагаю, что

call void @RAISE(i32 1), 

, и причина может заключаться в том, что это после инструкции-терминатора (последняя инструкция в базовойблок)

ret i32 %0

, и, следовательно, не родительский BB

2 голосов
/ 24 ноября 2010

Ранее я сталкивался с подобными симптомами из-за неправильного построения объектов LLVM в памяти, представляющих IR.Поиграйте с кодом, который изначально генерировал это, и убедитесь, что он не делает ничего подозрительного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...