[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