【问题标题】:LLVM get operand and lvalue name of an instructionLLVM 获取指令的操作数和左值名称
【发布时间】:2014-06-26 15:38:55
【问题描述】:

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

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

我尝试isa<Instruction>(pi->getOperand(0)) 来检查这是否是一条指令,它返回true,但pi->getOperand(0)->hasName() 返回false。让我感到奇怪的是为什么pipi->getOperand(0) 都是指令,而只有pi 有名字?

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

我使用的 LLVM 版本是 3.4.2

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 好的。所以唯一的选择可能是我自己重命名,并维护一个映射,以便在不同指令中的同名之间进行连接
    • @MinGao 标准的 LLVM 监视指令的方式就是使用指向这些指令的指针。
    • "%1"... 通常是寄存器中的值,在内存中没有地址。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    相关资源
    最近更新 更多