对于像%cmp7 = icmp eq i32 %6 %7
这样的LLVM IR指令,我希望得到所有三个寄存器/符号名称(即%cmp %6 and %7
)
现在我可以通过命令%cmp
获取字符串pi->getName()
,其中pi是指令指针。但是当我尝试获取操作名称时,键入pi->getOperand(0)->getName()
得到空字符串。
我尝试isa<Instruction>(pi->getOperand(0))
来检查这是否是一条指令并返回true,但pi->getOperand(0)->hasName()
返回false。事情让我感到奇怪的是,为什么pi
和pi->getOperand(0)
都是说明,但只有pi
有名字?
有什么想法我可以使用API获取操作数名称(字符串%6
和%7
)吗?
我正在使用的LLVM版本是3.4.2
答案 0 :(得分:7)
对于LLVM指令,名称是可选,在这种情况下,icmp
指令的两个操作数实际上没有名称,因此是空字符串。
当你打印 LLVM模块到.ll文件时,编写器为每条指令分配一个%<num>
名称,使其具有人类可读性,但这只是作者所做的事情。在打印期间,该字符串在实际模块中不存在。