获取LLVM指令中的操作数

获取LLVM指令中的操作数,llvm,Llvm,我正在为我的编译器编写一个优化,我使用LLVM IR作为我的中间语言。我已经解析了输入文件并将其转换为LLVM IR。在优化过程中,我需要检索指令的操作数。我能够在指令类中找到getOpCode(),但无法检索操作数列表。我该怎么做呢?有很多操作数访问器,通常由类llvm::User提供,其doxygen页面是:有getNumOperands()和getOperator(unsigned int)以及迭代器样式的访问器op_begin()和op_end() 例如,给定指令%X=addi32%a,

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

有很多操作数访问器,通常由类
llvm::User
提供,其doxygen页面是:有
getNumOperands()
getOperator(unsigned int)
以及迭代器样式的访问器
op_begin()
op_end()


例如,给定指令
%X=addi32%a,2
I->getOperand(0)
将返回
%a
值*
I->getOperand(1)
将返回
i32 2
值*
(可强制转换为常量)。

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

如何获取
%X
?我发现它确实取决于类型。对于MachineInstructions,第0个操作数似乎是返回值,而参数从1开始。对于常规指令,它看起来像指令本身是返回类型(可以强制转换为Value*)。虽然不是100%确定,但这部分并没有真正的文档记录,我找不到任何关于它的好信息(除了这个问题)。