从 LLVM 位码(预期指令操作码)直接执行程序时出错
Error when direct executing program from LLVM bitcode (expected instruction opcode)
我正在尝试从我的编译器生成的 LLVM 位码中 运行 一个程序,但是当我 运行 lli
命令它 returns 一个错误
lli-3.6: test2.ll:9:1: error: expected instruction opcode
当我将 lli
与 clang -S -emit-llvm
生成的 .ll 一起使用时,它起作用了。不过,此代码中有许多优化。我试图手动插入其中一些,但没有用。
我的问题是我不知道我的代码结构是否正确,或者它是否只是缺少一些特定的东西,以让解释器正常工作。最初,我尝试在代码中使用 JIT,但它给我带来了更多库错误,而且文档也没有帮助。
我的 llvm 位码如下:
%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()
您提供的 LLVM IR 文件格式错误 - 它的基本块缺少 terminator instructions(@f
中的 %entry
除外)。您的自定义优化中似乎存在错误。
我正在尝试从我的编译器生成的 LLVM 位码中 运行 一个程序,但是当我 运行 lli
命令它 returns 一个错误
lli-3.6: test2.ll:9:1: error: expected instruction opcode
当我将 lli
与 clang -S -emit-llvm
生成的 .ll 一起使用时,它起作用了。不过,此代码中有许多优化。我试图手动插入其中一些,但没有用。
我的问题是我不知道我的代码结构是否正确,或者它是否只是缺少一些特定的东西,以让解释器正常工作。最初,我尝试在代码中使用 JIT,但它给我带来了更多库错误,而且文档也没有帮助。
我的 llvm 位码如下:
%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()
您提供的 LLVM IR 文件格式错误 - 它的基本块缺少 terminator instructions(@f
中的 %entry
除外)。您的自定义优化中似乎存在错误。