Michael Muller
2012-Jan-11 12:50 UTC
[LLVMdev] ValueMapper question: no type mapping for GlobalValue?
Hi all, I was looking at the ValueMapper code this morning and I notice that it doesn't do type mapping for GlobalValues. Is this correct? I ask because I am seeing a case where I'm failing type assertions from ModuleLinker::linkGlobalInits() when an array initializer references an external global. It looks like the external global is being mapped directly and this causes an element type check to fail in ConstantArray::get(). Curiously, this only happens when that external global is also referenced from within a function in the same module. ============================================================================michaelMuller = mmuller at enduden.com | http://www.mindhog.net/~mmuller ----------------------------------------------------------------------------- There is no concept that is more demeaning to the human spirit than the notion that our freedom must be limited in the interests of our own protection. =============================================================================
Rafael Ávila de Espíndola
2012-Jan-12 05:02 UTC
[LLVMdev] ValueMapper question: no type mapping for GlobalValue?
On 11/01/12 07:50 AM, Michael Muller wrote:> > Hi all, I was looking at the ValueMapper code this morning and I notice that > it doesn't do type mapping for GlobalValues. Is this correct? > > I ask because I am seeing a case where I'm failing type assertions from > ModuleLinker::linkGlobalInits() when an array initializer references an > external global. It looks like the external global is being mapped directly > and this causes an element type check to fail in ConstantArray::get(). > Curiously, this only happens when that external global is also referenced from > within a function in the same module. >Do you have a testcase? I tried to reproduce this with ----------- a = global i64 42, align 8 ----------- and ---------- @a = external global i32 @b = constant [1 x i32*] [i32* @a], align 8 define i32 @f() nounwind uwtable readonly optsize { entry: %0 = load i32* @a, align 4 ret i32 %0 } ---------- but llvm-link correctly produced @b = constant [1 x i32*] [i32* bitcast (i64* @a to i32*)], align 8 @a = global i64 42, align 8 define i32 @f() nounwind uwtable readonly optsize { entry: %0 = load i32* bitcast (i64* @a to i32*), align 4 ret i32 %0 } Cheers, Rafael
Michael Muller
2012-Jan-12 11:36 UTC
[LLVMdev] ValueMapper question: no type mapping for GlobalValue?
=?ISO-8859-1?Q?Rafael_=C1vila_de_Esp=EDndola?= wrote:> On 11/01/12 07:50 AM, Michael Muller wrote: > > > > Hi all, I was looking at the ValueMapper code this morning and I notice that > > it doesn't do type mapping for GlobalValues. Is this correct? > > > > I ask because I am seeing a case where I'm failing type assertions from > > ModuleLinker::linkGlobalInits() when an array initializer references an > > external global. It looks like the external global is being mapped directly > > and this causes an element type check to fail in ConstantArray::get(). > > Curiously, this only happens when that external global is also referenced from > > within a function in the same module. > > > > Do you have a testcase? > > I tried to reproduce this with > > ----------- > a = global i64 42, align 8 > ----------- > > and > > ---------- > @a = external global i32 > @b = constant [1 x i32*] [i32* @a], align 8 > > define i32 @f() nounwind uwtable readonly optsize { > entry: > %0 = load i32* @a, align 4 > ret i32 %0 > } > ---------- > > but llvm-link correctly produced > > > @b = constant [1 x i32*] [i32* bitcast (i64* @a to i32*)], align 8 > @a = global i64 42, align 8 > > define i32 @f() nounwind uwtable readonly optsize { > entry: > %0 = load i32* bitcast (i64* @a to i32*), align 4 > ret i32 %0 > }I can reproduce this consistently, but only under an extremely large pile of code :-) I haven't tried to strip it down to minimal a test case yet, but I will. One salient difference with the code you've provided is that in my code, @a is a struct type. However, changing the example to use a minimal structure doesn't trigger the assertion failure. But I'm still curious: why doesn't the value mapper do type mapping on global variables?> > > Cheers, > Rafael > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >============================================================================michaelMuller = mmuller at enduden.com | http://www.mindhog.net/~mmuller ----------------------------------------------------------------------------- The natural progress of things is for liberty to yield and government to gain control. - Thomas Jefferson =============================================================================
Reasonably Related Threads
- [LLVMdev] ValueMapper question: no type mapping for GlobalValue?
- [LLVMdev] ValueMapper question: no type mapping for GlobalValue?
- [LLVMdev] ValueMapper question: no type mapping for GlobalValue?
- [LLVMdev] ValueMapper question: no type mapping for GlobalValue?
- [LLVMdev] ValueMapper question: no type mapping for GlobalValue?