[llvm] r242520 - Make global aliases have symbol size equal to their type

Rafael EspĂ­ndola via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 6 12:23:57 PDT 2015


This caused pr24379.

I think we should revert it form trunk and 3.7 for now.

On 17 July 2015 at 08:12, John Brawn <john.brawn at arm.com> wrote:
> Author: john.brawn
> Date: Fri Jul 17 07:12:03 2015
> New Revision: 242520
>
> URL: http://llvm.org/viewvc/llvm-project?rev=242520&view=rev
> Log:
> Make global aliases have symbol size equal to their type
>
> This is mainly for the benefit of GlobalMerge, so that an alias into a
> MergedGlobals variable has the same size as the original non-merged
> variable.
>
> Differential Revision: http://reviews.llvm.org/D10837
>
> Modified:
>     llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
>     llvm/trunk/test/CodeGen/AArch64/global-merge-2.ll
>     llvm/trunk/test/CodeGen/AArch64/global-merge-3.ll
>     llvm/trunk/test/CodeGen/ARM/aliases.ll
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=242520&r1=242519&r2=242520&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Fri Jul 17 07:12:03 2015
> @@ -1111,6 +1111,16 @@ bool AsmPrinter::doFinalization(Module &
>
>      // Emit the directives as assignments aka .set:
>      OutStreamer->EmitAssignment(Name, lowerConstant(Alias.getAliasee()));
> +
> +    // Set the size of the alias symbol if we can, as otherwise the alias gets
> +    // the size of the aliasee which may not be correct e.g. if the alias is of
> +    // a member of a struct.
> +    if (MAI->hasDotTypeDotSizeDirective() && Alias.getValueType()->isSized()) {
> +      const DataLayout &DL = M.getDataLayout();
> +      uint64_t Size = DL.getTypeAllocSize(Alias.getValueType());
> +      OutStreamer->emitELFSize(cast<MCSymbolELF>(Name),
> +                               MCConstantExpr::create(Size, OutContext));
> +    }
>    }
>
>    GCModuleInfo *MI = getAnalysisIfAvailable<GCModuleInfo>();
>
> Modified: llvm/trunk/test/CodeGen/AArch64/global-merge-2.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/global-merge-2.ll?rev=242520&r1=242519&r2=242520&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/AArch64/global-merge-2.ll (original)
> +++ llvm/trunk/test/CodeGen/AArch64/global-merge-2.ll Fri Jul 17 07:12:03 2015
> @@ -35,10 +35,13 @@ define void @g1(i32 %a1, i32 %a2) {
>
>  ;CHECK:        .globl  x
>  ;CHECK: x = _MergedGlobals_x
> +;CHECK: .size x, 4
>  ;CHECK:        .globl  y
>  ;CHECK: y = _MergedGlobals_x+4
> +;CHECK: .size y, 4
>  ;CHECK:        .globl  z
>  ;CHECK: z = _MergedGlobals_x+8
> +;CHECK: .size z, 4
>
>  ;CHECK-APPLE-IOS: .globl       __MergedGlobals_x       ; @_MergedGlobals_x
>  ;CHECK-APPLE-IOS: .zerofill __DATA,__common,__MergedGlobals_x,12,3
>
> Modified: llvm/trunk/test/CodeGen/AArch64/global-merge-3.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/global-merge-3.ll?rev=242520&r1=242519&r2=242520&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/AArch64/global-merge-3.ll (original)
> +++ llvm/trunk/test/CodeGen/AArch64/global-merge-3.ll Fri Jul 17 07:12:03 2015
> @@ -42,8 +42,10 @@ define void @f1(i32 %a1, i32 %a2, i32 %a
>
>  ;CHECK:        .globl  x
>  ;CHECK: x = _MergedGlobals_x+4
> +;CHECK: .size x, 4000
>  ;CHECK:        .globl  y
>  ;CHECK: y = _MergedGlobals_y
> +;CHECK: .size y, 4000
>
>  ;CHECK-APPLE-IOS:.globl        _x
>  ;CHECK-APPLE-IOS: _x = __MergedGlobals_x+4
>
> Modified: llvm/trunk/test/CodeGen/ARM/aliases.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/aliases.ll?rev=242520&r1=242519&r2=242520&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/ARM/aliases.ll (original)
> +++ llvm/trunk/test/CodeGen/ARM/aliases.ll Fri Jul 17 07:12:03 2015
> @@ -2,19 +2,34 @@
>
>  ; CHECK: .globl        test
>
> +; CHECK: .globl structvar
> +; CHECK: .size structvar, 8
> +
>  ; CHECK: .globl        foo1
>  ; CHECK: foo1 = bar
> +; CHECK: .size foo1, 4
>
>  ; CHECK: .globl        foo2
>  ; CHECK: foo2 = bar
> +; CHECK: .size foo2, 4
>
>  ; CHECK: .weak bar_f
>  ; CHECK: bar_f = foo_f
>
>  ; CHECK: bar_i = bar
> +; CHECK: .size bar_i, 4
>
>  ; CHECK: .globl        A
>  ; CHECK: A = bar
> +; CHECK: .size A, 8
> +
> +; CHECK: .globl elem0
> +; CHECK: elem0 = structvar
> +; CHECK: .size elem0, 4
> +
> +; CHECK: .globl elem1
> +; CHECK: elem1 = structvar+4
> +; CHECK: .size elem1, 4
>
>  @bar = global i32 42
>  @foo1 = alias i32* @bar
> @@ -31,6 +46,10 @@ define i32 @foo_f() {
>
>  @A = alias bitcast (i32* @bar to i64*)
>
> + at structvar = global {i32, i32} {i32 1, i32 2}
> + at elem0 = alias getelementptr({i32, i32}, {i32, i32}*  @structvar, i32 0, i32 0)
> + at elem1 = alias getelementptr({i32, i32}, {i32, i32}*  @structvar, i32 0, i32 1)
> +
>  define i32 @test() {
>  entry:
>     %tmp = load i32, i32* @foo1
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list