Dear All, In my development, a function returns a struct {i8*, i64}, and on the call site I need to assign the return value to a struct of type {some_struct*, i64}. One way to do it is to call the mutateType() method of llvm::Value on the return value of the function call; however, I’m concerned that this mutateType() method might be too disruptive (it’s discouraged to use it by the documentation). Since LLVM does not support cast between structs. Is there any way I can safely “cast” a value of one struct type to another? Thanks, - Jie
You can 1. extract individual elements of {i8*, i64}, 2. bitcast the first to some_struct*, 3. insert them into a new struct of type {some_struct*, i64}. -- Krzysztof Parzyszek kparzysz at quicinc.com AI tools development> -----Original Message----- > From: llvm-dev <llvm-dev-bounces at lists.llvm.org> On Behalf Of Jie Zhou via > llvm-dev > Sent: Wednesday, May 6, 2020 7:17 PM > To: Joerg Sonnenberger via llvm-dev <llvm-dev at lists.llvm.org> > Subject: [EXT] [llvm-dev] Cast between struct > > Dear All, > > In my development, a function returns a struct {i8*, i64}, and on the call > site I need to assign the return value to a struct of type {some_struct*, > i64}. > One way to do it is to call the mutateType() method of llvm::Value on the > return value of the function call; however, I’m concerned that this > mutateType() method might be too disruptive (it’s discouraged to use it by > the documentation). > Since LLVM does not support cast between structs. Is there any way I can > safely “cast” a value of one struct type to another? > > Thanks, > - Jie > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> On May 6, 2020, at 21:53, Krzysztof Parzyszek <kparzysz at quicinc.com> wrote: > > You can > 1. extract individual elements of {i8*, i64}, > 2. bitcast the first to some_struct*, > 3. insert them into a new struct of type {some_struct*, i64}.Thanks for the help. I’m thinking the same way. Now I’m stuck with how to create a struct; I know how to create a llvm::StructType but I’m not clear of how to create a Value whose type is struct). It seems that llvm disallowed directly create a Value object; all Values are created from one of its numerous descendants. Can you give me some guidance here? Thanks, - Jie> > > -- > Krzysztof Parzyszek kparzysz at quicinc.com AI tools development > >> -----Original Message----- >> From: llvm-dev <llvm-dev-bounces at lists.llvm.org> On Behalf Of Jie Zhou via >> llvm-dev >> Sent: Wednesday, May 6, 2020 7:17 PM >> To: Joerg Sonnenberger via llvm-dev <llvm-dev at lists.llvm.org> >> Subject: [EXT] [llvm-dev] Cast between struct >> >> Dear All, >> >> In my development, a function returns a struct {i8*, i64}, and on the call >> site I need to assign the return value to a struct of type {some_struct*, >> i64}. >> One way to do it is to call the mutateType() method of llvm::Value on the >> return value of the function call; however, I’m concerned that this >> mutateType() method might be too disruptive (it’s discouraged to use it by >> the documentation). >> Since LLVM does not support cast between structs. Is there any way I can >> safely “cast” a value of one struct type to another? >> >> Thanks, >> - Jie >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_llvm-2Ddev&d=DwIGaQ&c=kbmfwr1Yojg42sGEpaQh5ofMHBeTl9EI2eaqQZhHbOU&r=KAtyTEI8n3FritxDpKpR7rv3VjdmUs0luiVKZLb_bNI&m=uYmm3cX0yLTO1MaEx_UXqc7gisr4jIhk9jA-eFWAjAA&s=KKOI1Vd0TktBj4Yu95cYeygctxjDWhOm9DF1NgxRQAs&e=
Maybe Matching Threads
- Cast between struct
- Best way of implement a fat pointer for C
- How to use bugpoint for backend native code generation?
- [A bug?] Failed to use BuildMI to add R7 - R12 registers for tADDi8 and tPUSH of ARM
- [A bug?] Failed to use BuildMI to add R7 - R12 registers for tADDi8 and tPUSH of ARM