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 に答える