2015-05-15 2 views

ответ

5

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() следует использовать здесь.

+0

спасибо. Так что, поскольку я только интересуюсь проверкой, является ли инструкция Load или Store, я могу продолжать использовать isa (i) и isa (i) без изменения на if (i.getopcode() == ...)? – mdrlol

+0

В принципе, да. Так как load, store имеет свой собственный класс инструкций. –