Ocaml Llvm_executionengine无法正确执行指针操作

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

我试图用我的非类型化语言生成代码来装箱和取消装箱值。为了计算简单整数文本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
  %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);