从LLVM bitcode直接执行程序时出错(预期指令操作码)

时间:2016-03-23 16:50:36

标签: clang llvm llvm-clang llvm-ir

我正在尝试从我的编译器生成的LLVM bitcode运行程序,但是当我运行lli命令时它返回错误

lli-3.6: test2.ll:9:1: error: expected instruction opcode

当我将lliclang -S -emit-llvm生成的.ll一起使用时,它可以正常工作。但是,此代码中有许多优化。我试图手动插入其中一些,但它没有用。

我的问题是,我不知道我的代码结构是否正确,或者是否只是缺少特定的解释器才能正常工作。最初,我试图在代码中使用JIT,但它给了我更多错误的库和文档没有帮助。

我的llvm bitcode如下:

%struct.test = type { i32, i32 }

define internal void @test_program() {
entry:
  %a = alloca i32
  store i32 5, i32* %a
  call void @printf(i32 3)
  %bar = alloca %struct.test
}

define internal void @f(i32 %x) {
entry:
  %b = alloca i32
  %mul = mul i32 6, 2
  %add = add i32 %mul, 3
  %add1 = add i32 10, %add
  store i32 %add1, i32* %b
  %tmp_eq = icmp eq i32* %b, i32 25
  br i1 %tmp_eq, label %cond_true, label %cond_false

cond_true:                                        ; preds = %entry
  store i32 40, i32* %b

cond_false:                                       ; preds = %entry
  store i32 50, i32* %b
}

declare void @printf() 

1 个答案:

答案 0 :(得分:2)

您提供的LLVM IR文件格式错误 - 它的基本块上缺少terminator instructions%entry中的@f除外)。看起来您的自定义优化中存在错误。