【问题标题】:LLVM: Setting function attributes on a pointerLLVM:在指针上设置函数属性
【发布时间】:2014-07-31 20:51:59
【问题描述】:

在我通过 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。

关于如何做到这一点的任何建议?

【问题讨论】:

    标签: code-generation llvm


    【解决方案1】:

    您可以通过CallInst::addAttribute API(InvokeInst 类似)使用任何函数属性注释CallInst。这意味着,如果您计划通过一个为 readnone 的指针和一个不是的指针进行调用,则需要有不同的调用站点。

    【讨论】:

      猜你喜欢
      • 2017-05-29
      • 1970-01-01
      • 1970-01-01
      • 2017-01-13
      • 2013-01-07
      • 1970-01-01
      • 1970-01-01
      • 2015-01-09
      • 2017-01-11
      相关资源
      最近更新 更多