在LLVM指令中获取操作数

时间:2011-12-28 04:23:03

标签: llvm

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

2 个答案:

答案 0 :(得分:26)

有许多操作数访问器,通常由类llvm::User提供,其doxygen页面为:http://llvm.org/doxygen/classllvm_1_1User.htmlgetNumOperands()getOperand(unsigned int),以及迭代器样式访问者op_begin()op_end()

例如,给定说明%X = add i32 %a, 2I->getOperand(0)将返回Value* %aI->getOperand(1)将返回Value* { {1}}(可转换为ConstantInt)。

答案 1 :(得分:2)

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