2012-03-12 12 views
1

基本ブロックに配列アクセスがあるかどうかを確認するにはどうすればよいですか?基本ブロック内の配列アクセスを見つける

たとえば、次の例で[a]を検索したいとします。

例:

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

あなたはクランレベルとは対照的に、あなたは、LLVMレベルでこれを必要としますか?私。あなたがCコードを解析しているなら、ASTを見る方が良いでしょう。Clangが生成します –

答えて

1

アレイのアクセスがgetelementptr指示によってモデル化されています。 だからあなたのようなもので基本ブロックを反復処理することができます:

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

GEPによってモデル化された配列アクセスだけではありません。ポインターのdereferncingもです。構造体メンバーへのアクセスですだからあなたはここで注意する必要があります –

+0

しかし、質問はむしろあいまいなので、少なくとも良いスタートです! – joey

+0

これも参照してください:http://stackoverflow.com/questions/9682705/identify-array-type-in​​-ir –