Próbuję utworzyć wartość LLVM typu struktury. Używam interfejsu LLVM-C i znaleźć funkcję:Jak utworzyć wartość struktury LLVM?
LLVMValueRef LLVMConstStruct (LLVMValueRef *ConstantVals, unsigned Count, LLVMBool Packed)
Działa to dobrze, jeżeli wszyscy członkowie są wartością stałą stworzony przez LLVMConstXXX() wygeneruje kod jak:
store { i32, i32, i32 } { i32 1, i32 2, i32 3 }, { i32, i32, i32 }* %17, align 4
ale problem jest wtedy, gdy użytkownik nie jest stała, będzie generować takie rzeczy jak:
%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
i kiedy wysłać ten kawałek kodu LLVM do NVVM (Nvidia PTX backend), to mówi:
module 0 (27, 39): parse error: invalid use of function-local name
Więc nie wiem, czy to tworzenie wartości struct jest poprawne. Potrzebuję wartości, a nie przydzielonej pamięci.
Ktoś ma pomysł?
Pozdrawiam, Xiang.
Dzięki! To działa!!! –