如何检查指令的操作码?

mdr*_*lol 3 llvm

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

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

哪一个使用?

Kun*_*ing 6

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

根据该继承图llvm::Instruction,LLVM内部将划分所有的指令分成几个不同的类别,如llvm::BinaryOperator,llvm::CallInst,llvm::CmpInst等,但有这些类没有确切的操作信息.

但是,对于Instruction::getOpcode(),它将直接从llvm::Instruction对象获取操作.你可以参考Instruction.def 来了解每条指令的定义.基本上,操作码将是指令所要求的精确操作.

说,对于LLVM IR add.你可以使用 isa<llvm::BinaryOperator>,知道这是一个BinaryOperator.但这仅适用于指令类.如果你想知道它是a ADD还是a SUB.i.getopcode()应该在这里使用.