次のLLVM IRがあるとします
define void @foo(i32* %a, i32* %m) nounwind { ...
最初の引数に配列を渡し、m に変数のアドレスを渡すことで、foo を呼び出します。ここで、foo の arg リストを分析し、どの arg が配列に渡され、どれが単なるポインター アドレスであるかを判断する必要があります。どちらも実際にはアドレスであることはわかっていますが、渡されたタイプを静的に判別できるように、LLVM は何らかのメタデータを提供します。
注:私はオプトパスを書いています