6

对于像%cmp7 = icmp eq i32 %6 %7我想获取所有三个寄存器/符号名称的 LLVM IR 指令(即%cmp %6 and %7

%cmp现在我可以通过命令获取字符串,pi->getName()其中 pi 是指令指针。但是,当我尝试获取 oprand 名称时,我通过键入pi->getOperand(0)->getName().

我试图isa<Instruction>(pi->getOperand(0))检查这是否是一条指令,它返回真但pi->getOperand(0)->hasName()返回假。让我感到奇怪的是,为什么两者pi都是pi->getOperand(0)指令但只有pi名称?

有什么想法可以通过使用 API获取操作数名称(字符串%6和 此处)?%7

我使用的 LLVM 版本是 3.4.2

4

1 回答 1

8

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

当您将 LLVM 模块打印到 .ll 文件时,编写器会%<num>为每条指令分配一个名称以使其易于阅读,但这只是编写器在打印期间所做的事情,实际模块中不存在该字符串。

于 2014-06-26T19:09:54.473 回答