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

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

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

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

我试过isa<Instruction>(pi->getOperand(0))检查这是否是一条指令并且它返回 true 但是 pi->getOperand(0)->hasName()返回错误。事情让我感到奇怪的是,为什么这两个 pipi->getOperand(0)是说明,但只有 pi有名字吗?

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

我使用的 LLVM 版本是 3.4.2

最佳答案

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

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

关于LLVM 获取指令的操作数和左值名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24434771/

相关文章:

linker - LLVM 的 lld 的命令行选项文档在哪里?

c++ - 如何将 llvm::outs() 重定向到文件?

compiler-construction - 获取LLVM值的原始变量名

llvm - 如何在LLVM中的两个 block 之间插入基本 block

c++ - 如何在 LLVM 中运行模块传递

python - llvm 可以从托管语言执行代码吗?

c - LLVM 结构数组迭代

llvm - 如何执行llvm代码

c++ - 可以将 llvm::FunctionType 转换为 C/C++ 原始函数指针吗?

c++ - 即时编译 C++ : clang/libtooling fails to set Triple for LLVM IR