事实上我找到了两个解决方案,我想知道是否有任何区别:
isa<LoadInst>(i)
.i.getopcode()
方法并与Load进行比较哪一个使用?
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()
应该在这里使用.