我正在为编译器编写优化,并使用LLVM IR作为我的中间语言。我解析了输入文件并将其转换为LLVM IR。在优化期间,我需要检索指令的操作数。我能够在getOpCode()
类中找到Instruction
,但无法检索操作数列表。我该怎么做?
答案 0 :(得分:26)
有许多操作数访问器,通常由类llvm::User
提供,其doxygen页面为:http://llvm.org/doxygen/classllvm_1_1User.html有getNumOperands()
和getOperand(unsigned int)
,以及迭代器样式访问者op_begin()
和op_end()
。
例如,给定说明%X = add i32 %a, 2
,I->getOperand(0)
将返回Value*
%a
,I->getOperand(1)
将返回Value*
{ {1}}(可转换为ConstantInt)。
答案 1 :(得分:2)
例如,如果您有Instruction* I1
,I1->getOperand(0)
将返回Value*
类型的第一个操作数。您可以使用将返回操作数名称的I1->getOperand(0)->getName()
更进一步。请参阅Value
类方法。