LLVM获取指令的操作数和左值名称

时间:2014-06-26 15:38:56

标签: llvm llvm-ir llvm-c++-api

对于像%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。事情让我感到奇怪的是,为什么pipi->getOperand(0)都是说明,但只有pi有名字?

有什么想法我可以使用API​​获取操作数名称(字符串%6%7)吗?

我正在使用的LLVM版本是3.4.2

1 个答案:

答案 0 :(得分:7)

对于LLVM指令,名称是可选,在这种情况下,icmp指令的两个操作数实际上没有名称,因此是空字符串。

当你打印 LLVM模块到.ll文件时,编写器为每条指令分配一个%<num>名称,使其具有人类可读性,但这只是作者所做的事情。在打印期间,该字符串在实际模块中不存在。