web-dev-qa-db-ja.com

LLVM命令でのオペランドの取得

コンパイラーの最適化を作成しており、中間言語としてLLVMIRを使用しています。入力ファイルを解析し、LLVMIRに変換しました。最適化中に、命令のオペランドを取得する必要があります。 InstructionクラスでgetOpCode()を見つけることはできますが、オペランドリストを取得できません。どうすればいいですか?

20

多くのオペランドアクセサーがあり、通常はクラス_llvm::User_によって提供され、そのdoxygenページは次のとおりです。 http://llvm.org/doxygen/classllvm_1_1User.htmlgetNumOperands()がありますおよびgetOperand(unsigned int)、およびイテレータスタイルのアクセサop_begin()およびop_end()

たとえば、命令_%X = add i32 %a, 2_が与えられると、I->getOperand(0)は_Value*_に対して_%a_を返し、I->getOperand(1)は_Value*_に対して_i32 2_を返します。 SOMECODE)__(ConstantIntにキャスト可能)。

26
user1118743

たとえば、_Instruction* I1_がある場合、I1->getOperand(0)はタイプ_Value*_の最初のオペランドを返します。オペランドの名前を返すI1->getOperand(0)->getName()を使用して、さらに先に進むことができます。 Valueクラスメソッドを参照してください。

2
Alex