相关疑难解决方法(0)

访问LLVM阵列中的元素

我正在尝试使用LLVM来为我的代码添加即时编译,但发现很难找到关于如何在LLVM中执行我想要的事情的参考,尽管已经通过Kaleidoscope教程检查了语言参考手册,程序员手册和doxygen文档.是否有更多对LLVM的C++ API的引用?

现在提出具体问题.我已经分配了一个带有两个元素的数组对象(我假设它对应double[2]于C++):

const llvm::Type* double_t = llvm::Type::getDoubleTy(llvm::getGlobalContext());
const llvm::Type* array_t =  llvm::ArrayType::get(double_t,2)
Run Code Online (Sandbox Code Playgroud)

稍后在代码中,我创建了一个函数,其中此数组是参数之一.然后,在我的函数中,我提取数组中的第一个元素并将其返回给用户:

llvm::Function::arg_iterator AI = jit_function_->arg_begin();
llvm::Value *x = AI;
llvm::Value *x0 = Builder.CreateExtractValue(x,0);
Builder.CreateRet(x0);
Run Code Online (Sandbox Code Playgroud)

代码很好,但是当我尝试运行它时,它不起作用.例如:

typedef double (*GenType)(double[2]);
GenType FP = GenType(intptr_t(TheExecutionEngine->getPointerToFunction(jit_function_)));
double y[2] = {10,20};
double r = FP(y);
printf("r = %g\n", r);
Run Code Online (Sandbox Code Playgroud)

返回值只是废话,我看不出我做错了什么.如果我将数组(10和20)中的值作为函数的标量参数传递,它可以正常工作.

llvm

9
推荐指数
1
解决办法
5356
查看次数

标签 统计

llvm ×1