如何查看指令的操作码?

How to check the opcode of an instruction?

其实我找到了两种解决方法,想知道有什么不同:

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

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

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

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

例如,对于 LLVM IR add,您可以使用 isa<llvm::BinaryOperator> 知道这是一个 BinaryOperator。但这仅适用于指令 class 的内容。如果您想知道它是 ADD 还是 SUBi.getopcode()这里应该用