我可以以某种方式将参数传递给LLVM IR中的函数吗?

时间:2018-02-06 01:46:45

标签: llvm

我想将函数调用移到程序中的其他位置,但我的参数有问题。我需要获取与参数值相关联的对象。

Function *fu;

bool runOnModule(Module &M) override {
  for(Function &a : M){
      for(BasicBlock &b : a){
        for(Instruction &i : b){
          if(isa<CallInst>(i)){
            fu = cast<CallInst>(i).getCalledFunction();
          }
        }
      }
    }
  }
  moveToOtherFunc(fu);
  return true;
}

void moveToOtherFunc(Function *f){
   ...
   BasicBlock *bb = ...
   ...

   //now i must insert a arg object ( ArrayRef<Value*> arg )
   //it is a list of objects representing func arguments 
   CallInst::Create(f,arg,"",bb);
}

那么有一些函数可以给我一个参数列表吗?类似的东西:

ArgumentsValueList a = f->getArgumentsValueObjectsAssociatedWithThisFunction();

我现在有一个Function::arg_iterator,但这给了我关于参数类型和数量的信息,但没有一个持有参数值的对象,对吧?我需要做什么,所以我用参数移动call inst?谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用Function课程中的args()方法。

它为参数列表的开头和结尾返回一对迭代器,通过它们可以迭代所有参数。