【问题标题】:How to check the opcode of an instruction?如何检查指令的操作码?
【发布时间】:2021-01-18 07:03:10
【问题描述】:

其实我已经找到了两种解决方案,想知道有没有区别:

  • 使用 ISA,例如 isa<LoadInst>(i)
  • 使用 getopcode(i.getopcode() 方法并与 Load 进行比较)

我应该使用哪个来检查指令的操作码?

【问题讨论】:

    标签: llvm


    【解决方案1】:

    isa 用于检查现有的派生指令类。 i.getopcode() 类可以帮助您获取所有操作信息。

    根据the Inheritance diagram for llvm::Instruction,LLVM内部会将所有指令分为几个不同的类,如llvm::BinaryOperatorllvm::CallInstllvm::CmpInst等。但这些类没有确切的操作信息。

    但是对于Instruction::getOpcode(),它会直接从llvm::Instruction对象中获取操作。您可以参考Instruction.def 了解每条指令的定义。基本上,操作码将是指令打算执行的确切操作。

    假设,对于 LLVM IR add,您可以使用 isa<llvm::BinaryOperator> 知道这是一个 BinaryOperator。但这仅适用于它的教学课程。如果您想知道它是ADD 还是SUB。此处应使用i.getopcode()

    【讨论】:

    • 谢谢。因此,由于我只对检查指令是加载还是存储感兴趣,因此我可以继续使用 isa(i) 和 isa(i) 而无需更改为 if (i.getopcode()==. ..)?
    • 基本上,是的。由于加载,存储有自己的指令类。
    猜你喜欢
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2018-06-26
    • 2011-07-03
    • 2021-08-02
    • 1970-01-01
    相关资源
    最近更新 更多