3

函数是这样创建的:

llvm::FunctionType* FunctionTypePtr = llvm::FunctionType::get( returnTypePtr , types , false );
llvm::Function* llvmFunction = llvm::Function::Create(FunctionTypePtr,
                        llvm::GlobalValue::ExternalLinkage,
                        functionName,
                        llvmModule);

然后通过向块添加指令来创建函数的主体:

llvm::BasicBlock* entryBlock = llvm::BasicBlock::Create(llvmContext, "", llvmFunction);
llvm::IRBuilder<> builder(entryBlock);

足够的上下文,现在解决问题:我想为函数参数值添加加载指令,例如:

//where do i get address??
llvm::LoadInst* load = builder.CreateLoad(address, "read");

我不知道如何/在哪里获取address函数参数的变量。

4

1 回答 1

5

你不应该加载任何东西。使用 Function::arg_iterator 获取与参数对应的值。

有关详细信息,请参阅http://llvm.org/docs/doxygen/html/classllvm_1_1Function.html (arg_begin / arg_end) 和http://llvm.org/docs/ProgrammersManual.html#Function

于 2012-09-27T08:33:19.700 回答