GEP を使用して、配列から i32 のポインターを取得しようとしています。
しかし、問題は次のとおりです。配列のサイズがわかりません。
llvm.org の IR ドキュメントによると、GEP は 2 の補数演算を静かにラップしてベース アドレスにオフセットを追加するだけです。
そこで、アドバイスをお願いしたいです。このように安全ですか:
%v1 = alloca i32
store i32 5, i32* %v1
%6 = load i32* %v1
%7 = bitcast i32* %v0 to [1 x i32]*
%8 = getelementptr [1 x i32]* %7, i32 0, i32 %6
%9 = load i32* %8
store i32 %9, i32* %v0
%v0 の型は i32* であり、%v0 が mem 内の配列を指していることはわかっていますが、サイズは 1 ではなく 9 です。次に、%7 から "GEP" し、それを [1 x i32] として扱います。 [9 x i32]ではありませんが、「オフセット」は 5(%6) です。
それで、何か問題はありますか?安全ではない、または良くないだけで基本的には大丈夫ですか?