isa
используются для проверки существующего класса dirived команд. Класс 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()
следует использовать здесь.
спасибо. Так что, поскольку я только интересуюсь проверкой, является ли инструкция Load или Store, я могу продолжать использовать isa (i) и isa (i) без изменения на if (i.getopcode() == ...)? –
mdrlol
В принципе, да. Так как load, store имеет свой собственный класс инструкций. –