LLVM:在指针上设置函数属性

时间:2014-06-10 22:45:44

标签: code-generation llvm

在我通过LLVM C ++ API生成的一些代码中,有一段时间我给了一个函数的原始地址。我将其转换为函数指针并按如下方式调用它:

llvm::FunctionType* ft = llvm::FunctionType::get(...);
llvm::Constant* iptr = llvm::ConstantInt::get(
    engine->getDataLayout()->getIntPtrType(state.context, 0), (uint64_t) pointer);
llvm::Value* fptr = llvm::ConstantExpr::getIntToPtr(iptr,
    llvm::PointerType::get(ft, 0));

llvm::Value* retval = state.builder.CreateCall(fptr, params);

这很好用--- 但是我希望能够设置一些函数属性来帮助优化:具体来说,readnone

不幸的是,我发现这样做的唯一API就是llvm::Function,而我没有。我希望属性是函数类型的属性,因为它在C中的工作方式,但llvm::FunctionType似乎没有属性API。

有关如何执行此操作的任何建议吗?

1 个答案:

答案 0 :(得分:2)

您可以通过CallInst API(以及CallInst::addAttribute的相似内容)使用任何功能属性注释InvokeInst。这意味着如果您计划通过一个readnone指针和一个不指针的指针调用,则需要拥有不同的调用站点。