0

次のLLVM IRがあるとします

define void @foo(i32* %a, i32* %m) nounwind { ...

最初の引数に配列を渡し、m に変数のアドレスを渡すことで、foo を呼び出します。ここで、foo の arg リストを分析し、どの arg が配列に渡され、どれが単なるポインター アドレスであるかを判断する必要があります。どちらも実際にはアドレスであることはわかっていますが、渡されたタイプを静的に判別できるように、LLVM は何らかのメタデータを提供します。

注:私はオプトパスを書いています

4

1 に答える 1

1

おそらく、代わりに「配列へのポインター」タイプを使用できます。

define void @foo([0 x i32]* %a, i32* %m)

サイズがゼロの配列は完全に有効であり、llvm のドキュメントには次のように記載されています。

静的型によって暗示された配列の末尾を超えるインデックス付けに制限はありません

于 2013-06-22T19:17:51.163 に答える