如何查看指令的操作码?
How to check the opcode of an instruction?
其实我找到了两种解决方法,想知道有什么不同:
- 使用 isa,比如
isa<LoadInst>(i)
- 使用 getopcode(
i.getopcode()
方法并与加载进行比较)
我应该使用哪个来检查指令的操作码?
isa
用于检查现有的派生指令 class。 class i.getopcode()
可以帮助您获取所有操作的信息。
根据the Inheritance diagram for llvm::Instruction
,LLVM在内部会将所有指令分成几个不同的classes,如llvm::BinaryOperator
、llvm::CallInst
、llvm::CmpInst
等。但是这些 classes 没有确切的操作信息。
但是对于Instruction::getOpcode()
,它会直接从llvm::Instruction
对象中获取操作。您可以参考 Instruction.def 了解每条指令的定义。基本上,操作码将是指令打算执行的确切操作。
例如,对于 LLVM IR add
,您可以使用 isa<llvm::BinaryOperator>
知道这是一个 BinaryOperator
。但这仅适用于指令 class 的内容。如果您想知道它是 ADD
还是 SUB
。 i.getopcode()
这里应该用
其实我找到了两种解决方法,想知道有什么不同:
- 使用 isa,比如
isa<LoadInst>(i)
- 使用 getopcode(
i.getopcode()
方法并与加载进行比较)
我应该使用哪个来检查指令的操作码?
isa
用于检查现有的派生指令 class。 class i.getopcode()
可以帮助您获取所有操作的信息。
根据the Inheritance diagram for llvm::Instruction
,LLVM在内部会将所有指令分成几个不同的classes,如llvm::BinaryOperator
、llvm::CallInst
、llvm::CmpInst
等。但是这些 classes 没有确切的操作信息。
但是对于Instruction::getOpcode()
,它会直接从llvm::Instruction
对象中获取操作。您可以参考 Instruction.def 了解每条指令的定义。基本上,操作码将是指令打算执行的确切操作。
例如,对于 LLVM IR add
,您可以使用 isa<llvm::BinaryOperator>
知道这是一个 BinaryOperator
。但这仅适用于指令 class 的内容。如果您想知道它是 ADD
还是 SUB
。 i.getopcode()
这里应该用