Я пытаюсь идентифицировать StoreInst
. Я прочитал руководство по LLVM и попытался использовать dyn_cast
для этого. Но следующая программа возвращает очень странный результат.
bool runOnFunction(Function &F) override{
for (const BasicBlock &BB : F){
for (const Instruction &I : BB){
const char *s = I.getOpcodeName();
std::string str(s);
errs()<<"at the instruction of "<<str<<"\n";
if (const StoreInst *SI = dyn_cast<StoreInst>(&I))
errs()<<"FOUND STORE\n";
}
}
return true;
}
Результат следующий. dyn_cast
так или иначе возвращает true, когда инструкция на самом деле является CallInst. Кто-нибудь знает, почему это произошло? И как я могу это исправить? Кстати, я установил несколько старых версий LLVM на той же машине, но мне кажется, что я скомпилировал проход под LLVM-7.0.0 и получил файл .ll, используя clang-7.0.0 clang-7 -O0 -S -emit-llvm HelloWorld.cpp
. Повлияют ли предыдущие установленные версии на эту версию? Спасибо !!
at the instruction of call
at the instruction of call
at the instruction of ret
at the instruction of alloca
FOUND STORE
at the instruction of alloca
FOUND STORE
at the instruction of alloca
FOUND STORE
at the instruction of store
at the instruction of store
at the instruction of store
at the instruction of call
at the instruction of call
at the instruction of ret
at the instruction of call
at the instruction of ret