Я пытаюсь проанализировать байт-код, состоящий из инструкции сохранения, с помощью inttoptr . У меня возникли проблемы с определением, имеет ли инструкция магазина значение inttoptr в качестве операнда значения (3-я инструкция в следующем коде в записи BB). Мой код операции выглядит следующим образом:
define dso_local i32 @test(i32* %p) #0 {
entry:
%p.addr = alloca i32*, align 8
store i32* %p, i32** %p.addr, align 8
store i32* inttoptr (i64 1000 to i32*), i32** %p.addr, align 8
%0 = load i32*, i32** %p.addr, align 8
%1 = load i32, i32* %0, align 4
ret i32 %1
}
Я пытаюсь проанализировать инструкцию магазина и пытаюсь определить, находится ли inttoptr в инструкции магазина, используя classof method и с dyn_cast , как в следующем коде:
StoreInst *store = dyn_cast<StoreInst>(I);
Value *vv = store->getValueOperand();
Value *vp = store->getPointerOperand();
if(IntToPtrInst::classof(vv)){
outs() << "Inttoptr found\n";
}
if(Instruction *inp = dyn_cast<IntToPtrInst>(vv)){
outs() << "Inttoptr found\n";
}
Кажется, я не могу обнаружить inttoptr ни с одним из методов. Я знаю, что байт-код не создает отдельную инструкцию для inttoptr , но он сливается с инструкцией сохранения. Было бы здорово, если бы кто-нибудь указал мне, что мне не хватает и как я могу обнаружить inttoptr в инструкции магазина.