2012-03-12 97 views
1

如何检查基本块中是否有数组访问?在基本块中查找数组访问

例如,我想在以下示例中找到[i]。

例如:

  for(i=0;i<n;i++) 
        a[i]=a[i+1]+i; 
+0

你确定你需要这个在LLVM的水平,而不是锵水平?即如果你正在分析C代码,你最好看看AST Clang生成 – 2012-03-12 18:01:48

回答

1

阵列的访问通过getelementptr指令建模。 所以,你可以用类似遍历基本块:

for (BasicBlock::iterator i = blk->begin(), e = blk->end(); i != e; ++i) { 
    if(isa<GetElementPtrInst>(i)) { 
    // process it here 
    } 
} 
+0

虽然数组访问并不是GEP建模的唯一事物。指针解除也是。所以是结构成员访问。所以你在这里需要小心 – 2012-03-12 14:04:03

+0

没问题,但问题很模糊,所以这至少是一个好的开始! – joey 2012-03-12 15:10:59

+0

另请参阅:http://stackoverflow.com/questions/9682705/identify-array-type-in​​-ir – 2012-03-13 13:35:06