コンパイラーの最適化を作成しており、中間言語としてLLVMIRを使用しています。入力ファイルを解析し、LLVMIRに変換しました。最適化中に、命令のオペランドを取得する必要があります。 Instruction
クラスでgetOpCode()
を見つけることはできますが、オペランドリストを取得できません。どうすればいいですか?
多くのオペランドアクセサーがあり、通常はクラス_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にキャスト可能)。
たとえば、_Instruction* I1
_がある場合、I1->getOperand(0)
はタイプ_Value*
_の最初のオペランドを返します。オペランドの名前を返すI1->getOperand(0)->getName()
を使用して、さらに先に進むことができます。 Value
クラスメソッドを参照してください。