[PATCH] D29925: Implement intrinsic mangling for literal struct types.Fixes PR 31921
Daniel Berlin via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 13 22:16:23 PST 2017
dberlin added inline comments.
================
Comment at: lib/IR/Function.cpp:538
+ if (!STyp->isLiteral()) {
+ Result += STyp->getName();
+ } else {
----------------
chandlerc wrote:
> Uh.... Am I the only one horrified that we didn't prefix this with anything?
>
> Won't this cause types named 's...' to potentially collide with literal types? Yeah, pretty sure it will. It's not unique to literal types.
>
> Let's take a look at:
>
> %i32 = type { i32 }
>
> define %i32* @test_struct(%i32* %v) gc "statepoint-example" {
> entry:
> %tok = call token (i64, i32, i1 ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i1f(i64 0, i32 0, i1 ()* @return_i1, i32 0, i32 0, i32 0, i32 0, %i32* %v)
> %v-new = call %i32* @llvm.experimental.gc.relocate.p0i32(token %tok, i32 7, i32 7)
> ret %i32* %v-new
> }
>
> declare zeroext i1 @return_i1()
> declare token @llvm.experimental.gc.statepoint.p0f_i1f(i64, i32, i1 ()*, i32, i32, ...)
> declare %i32* @llvm.experimental.gc.relocate.p0i32(token, i32, i32)
> ;declare i32* @llvm.experimental.gc.relocate.p0i32(token, i32, i32)
>
> Also, I think we need to ensure nested types are distinguishable here much like below with function types.
I just kinda assumed people knew what they were doing in the existing code :)
In any case, updated to prefix structs with s_ in the struct case, and sl_ in the literal case.
We end structs with "s" to be distinguishable.
https://reviews.llvm.org/D29925
More information about the llvm-commits
mailing list