如何检查指令的操作码?

时间:2015-05-15 01:52:59

标签: llvm

事实上我找到了两个解决方案,我想知道是否有任何区别:

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

使用哪一个?

1 个答案:

答案 0 :(得分:5)

isa用于检查现有的dirived指令类。 class 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()