在LLVM指令中获取操作数

Che*_*ath 18 llvm

我正在为我的编译器编写一个优化,我使用LLVM IR作为我的中间语言.我解析了输入文件并将其转换为LLVM IR.在优化期间,我需要检索指令的操作数.我能够getOpCode()Instruction类中找到,但无法检索操作数列表.我该怎么做?

小智 26

有很多操作数访问器,通常由类提供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*for %a,I->getOperand(1)并将返回Value*for i32 2(可转换为ConstantInt).

  • 我怎么得到'%X`? (3认同)

Ale*_*lex 5

例如,如果有Instruction* I1I1->getOperand(0)将返回类型为 的第一个操作数Value*。您可以更进一步,使用I1->getOperand(0)->getName()它将返回操作数的名称。请参阅Value类方法。