【发布时间】:2021-01-18 07:03:10
【问题描述】:
其实我已经找到了两种解决方案,想知道有没有区别:
- 使用 ISA,例如
isa<LoadInst>(i) - 使用 getopcode(
i.getopcode()方法并与 Load 进行比较)
我应该使用哪个来检查指令的操作码?
【问题讨论】:
标签: llvm
其实我已经找到了两种解决方案,想知道有没有区别:
isa<LoadInst>(i)
i.getopcode() 方法并与 Load 进行比较)我应该使用哪个来检查指令的操作码?
【问题讨论】:
标签: llvm
isa 用于检查现有的派生指令类。 i.getopcode() 类可以帮助您获取所有操作信息。
根据the Inheritance diagram for llvm::Instruction,LLVM内部会将所有指令分为几个不同的类,如llvm::BinaryOperator、llvm::CallInst、llvm::CmpInst等。但这些类没有确切的操作信息。
但是对于Instruction::getOpcode(),它会直接从llvm::Instruction对象中获取操作。您可以参考Instruction.def 了解每条指令的定义。基本上,操作码将是指令打算执行的确切操作。
假设,对于 LLVM IR add,您可以使用 isa<llvm::BinaryOperator> 知道这是一个 BinaryOperator。但这仅适用于它的教学课程。如果您想知道它是ADD 还是SUB。此处应使用i.getopcode()。
【讨论】: