我想将函数调用移到程序中的其他位置,但我的参数有问题。我需要获取与参数值相关联的对象。
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?谢谢