事实上我找到了两个解决方案,我想知道是否有任何区别:
isa<LoadInst>(i)
。i.getopcode()
方法并与Load 使用哪一个?
答案 0 :(得分:5)
isa
用于检查现有的dirived指令类。 class 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()
。