2017-03-03 8 views
1

私はLLVM C-APIで少し演奏していますが、何とかLLVMBuildIndirectBr()、またはより正確にはLLVMBlockAddress()でスタックされています。なぜなら、最初の引数が何であるか分かりません。これはLLVMValueRefで、 '関数'を表すはずですが、私が見つけたドキュメントはそれ以上のことは言いません。LLVMBlockAddress()の最初の引数は何ですか?

答えて

1

its codeによれば、この関数はBlockAddress::get()の単なるCラッパーです。したがって、最初の引数はBBを含むFunctionです、私は推測します。

あなたは、それが属するFunctionへの参照を取得する最初のBB、その後、LLVMBlockAddress()への最初のパラメータとして渡すにLLVMGetBasicBlockParent()を呼び出す必要がありますので、唯一のBB引数を取るBlockAddress::get()過負荷のためのC APIは、ありません。

このような状況の経験則として、使用している「ネイティブ」C++メソッドを見つけて、そのドキュメントを探してみてください。

+0

確かに、この関数からLLVMValueRefを作成し、C++ APIを見てみるとこの問題に役立たないという質問がありました。 – lucvoo

+1

@lucvooさて、 'BlockAddress :: get()'は、BBのみを受け取り、 'bb-> GetParent()'が属する 'Function'を見つけ出します。したがって、[LLVMGetBasicBlockParent()](http://llvm.org/docs/doxygen/html/group__LLVMCCoreValueBasicBlock.html#ga94bcbe957389c2c2219d6a02e72691ef)を使用することができます。 – arrowd

+0

これはまさに私が探していたものです!あなたの答えを編集するか、このLLVMGetBasicBlockParent()のために別のものを作成できますか? – lucvoo

0

明らかに、それはLLVMFunctionType()とLLVMAddFunction()によって行われます。

関連する問題