基本ブロックに配列アクセスがあるかどうかを確認するにはどうすればよいですか?基本ブロック内の配列アクセスを見つける
たとえば、次の例で[a]を検索したいとします。
例:
for(i=0;i<n;i++)
a[i]=a[i+1]+i;
基本ブロックに配列アクセスがあるかどうかを確認するにはどうすればよいですか?基本ブロック内の配列アクセスを見つける
たとえば、次の例で[a]を検索したいとします。
例:
for(i=0;i<n;i++)
a[i]=a[i+1]+i;
アレイのアクセスがgetelementptr
指示によってモデル化されています。 だからあなたのようなもので基本ブロックを反復処理することができます:
for (BasicBlock::iterator i = blk->begin(), e = blk->end(); i != e; ++i) {
if(isa<GetElementPtrInst>(i)) {
// process it here
}
}
GEPによってモデル化された配列アクセスだけではありません。ポインターのdereferncingもです。構造体メンバーへのアクセスですだからあなたはここで注意する必要があります –
しかし、質問はむしろあいまいなので、少なくとも良いスタートです! – joey
これも参照してください:http://stackoverflow.com/questions/9682705/identify-array-type-in-ir –
あなたはクランレベルとは対照的に、あなたは、LLVMレベルでこれを必要としますか?私。あなたがCコードを解析しているなら、ASTを見る方が良いでしょう。Clangが生成します –