Ocaml Llvm_executionengine无法正确执行指针操作
我试图用我的非类型化语言生成代码来装箱和取消装箱值。为了计算简单整数文本3,我生成:Ocaml Llvm_executionengine无法正确执行指针操作,ocaml,llvm,llvm-ir,Ocaml,Llvm,Llvm Ir,我试图用我的非类型化语言生成代码来装箱和取消装箱值。为了计算简单整数文本3,我生成: define i64 @0() { entry: %value = alloca { i64, [10 x i8], <10 x i64> } %boxptr = getelementptr inbounds { i64, [10 x i8], <10 x i64> }* %value, i32 0, i32 0 store i64 3, i64* %boxptr %bo
define i64 @0() {
entry:
%value = alloca { i64, [10 x i8], <10 x i64> }
%boxptr = getelementptr inbounds { i64, [10 x i8], <10 x i64> }* %value, i32 0, i32 0
store i64 3, i64* %boxptr
%boxptr1 = getelementptr inbounds { i64, [10 x i8], <10 x i64> }* %value, i32 0, i32 0
%load = load i64* %boxptr1
ret i64 %load
}
我的解释器怎么了?
lli
很旧,不受支持。您使用的是哪种EE-JIT还是MCJIT?你的LLVM版本是什么?主机/目标三元组?我只是用lli
检查生成的代码是否正常。我用的是JIT,不是MCJIT。我的LLVM版本是3.4.2,主机/目标是core-avx-i/x86_64-apple-darwin13.3.0。我发现我的ExecutionEngine.create正在退回到ExecutionEngine.create_解释器。忘记准时制;它不工作。不支持解释器。现在几乎唯一受支持的执行引擎是MCJIT。试试看。
open Llvm_executionengine
let the_execution_engine = ExecutionEngine.create_interpreter the_module
let print_and_jit se =
let f = sexpr_matcher se in
let result = ExecutionEngine.run_function f [||] the_execution_engine in
print_string "Evaluated to ";
print_int (GenericValue.as_int result);