構造体型の LLVM 値を作成しようとしています。私はLLVM-Cインターフェースを使用しており、関数を見つけています:
LLVMValueRef LLVMConstStruct (LLVMValueRef *ConstantVals, unsigned Count, LLVMBool Packed)
すべてのメンバーが LLVMConstXXX() によって作成された定数値である場合、これは正常に機能し、次のようなコードが生成されます。
store { i32, i32, i32 } { i32 1, i32 2, i32 3 }, { i32, i32, i32 }* %17, align 4
しかし問題は、メンバーが定数でない場合、次のようなものが生成されることです。
%0 = call i32 @llvm.nvvm.read.ptx.sreg.tid.x()
store { i32, i32, i32 } { i32 1, i32 %0, i32 3 }, { i32, i32, i32 }* %17, align 4
そして、この LLVM コードを NVVM (Nvidia PTX バックエンド) に送信すると、次のように表示されます。
モジュール 0 (27、39): 解析エラー: 関数ローカル名の無効な使用
したがって、この構造体値の作成が正しいかどうかはわかりません。必要なのは、割り当てられたメモリではなく、値です。
誰でもアイデアがありますか?
よろしく、シャン。