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=
Reasonably Related 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