LLVM可以';找不到getelementptr指令
我有一个字节码片段:LLVM可以';找不到getelementptr指令,llvm,Llvm,我有一个字节码片段: define void @setGlobal(i32 %a) #0 { entry: %a.addr = alloca i32, align 4 store i32 %a, i32* %a.addr, align 4 %0 = load i32* %a.addr, align 4 store i32 %0, i32* @Global, align 4 %1 = load i32* %a.addr, align 4 store i32 %1, i32*
define void @setGlobal(i32 %a) #0 {
entry:
%a.addr = alloca i32, align 4
store i32 %a, i32* %a.addr, align 4
%0 = load i32* %a.addr, align 4
store i32 %0, i32* @Global, align 4
%1 = load i32* %a.addr, align 4
store i32 %1, i32* getelementptr inbounds ([5 x i32]* @GlobalVec, i32 0, i64 0), align 4
store i32 2, i32* getelementptr inbounds ([5 x i32]* @GlobalVec, i32 0, i64 2), align 4
ret void
}
我正在使用此代码从“store i32%1,i32*getelementptr inbounds([5 x i32]*@GlobalVec,i32 0,i64 0),align 4”中查找getelementptr:
for(Module::iterator F=p_Module.begin(),endF=p_Module.end();F!=endF;++F){
对于(函数::迭代器BB=F->begin(),endBB=F->end();BB!=endBB;++BB){
对于(基本块::迭代器I=BB->begin(),endI=BB->end();I
!=endI;++I){
if(StoreInst*SI=dyn_铸件(I)){
if(指令*gep=dyn_转换(SI->GetOperator(1)))
{
如果(gep->getOpcode()==指令::GetElementPtr)
{
//做点什么
}
}
}
}
}
}
此代码找不到getelementptr。我做错了什么 位代码片段中没有
getelementptr
指令,因此无法找到它们
看起来像getelementptr
指令的两种情况实际上是-指示符号是它们作为另一条指令(store
)的一部分出现,这不是常规指令可以做到的
因此,如果要搜索该表达式,则需要查找,而不是GetElementPtrInst
for (Module::iterator F = p_Module.begin(), endF = p_Module.end(); F != endF; ++F) {
for (Function::iterator BB = F->begin(), endBB = F->end(); BB != endBB; ++BB) {
for (BasicBlock::iterator I = BB->begin(), endI = BB->end(); I
!= endI; ++I) {
if (StoreInst* SI = dyn_cast<StoreInst>(I)) {
if (Instruction *gep = dyn_cast<Instruction>(SI->getOperand(1)))
{
if (gep->getOpcode() == Instruction::GetElementPtr)
{
//do something
}
}
}
}
}
}