From 9d0e97f324c8e05247c0f3d3ca55ddd9f6d77f33 Mon Sep 17 00:00:00 2001 From: Eli Friedman Date: Wed, 31 Oct 2018 23:03:58 +0000 Subject: [PATCH] [IR] Allow increasing the alignment of dso-local globals. I think this is the actual important property; the previous visibility check was an approximation. Differential Revision: https://reviews.llvm.org/D53852 llvm-svn: 345790 --- lib/IR/Globals.cpp | 2 +- test/CodeGen/ARM/memfunc.ll | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/IR/Globals.cpp b/lib/IR/Globals.cpp index 3f57b1dbfa8..cbd6450a20c 100644 --- a/lib/IR/Globals.cpp +++ b/lib/IR/Globals.cpp @@ -252,7 +252,7 @@ bool GlobalValue::canIncreaseAlignment() const { // Conservatively assume ELF if there's no parent pointer. bool isELF = (!Parent || Triple(Parent->getTargetTriple()).isOSBinFormatELF()); - if (isELF && hasDefaultVisibility() && !hasLocalLinkage()) + if (isELF && !isDSOLocal()) return false; return true; diff --git a/test/CodeGen/ARM/memfunc.ll b/test/CodeGen/ARM/memfunc.ll index b415ff7b7f4..6c0668a53e8 100644 --- a/test/CodeGen/ARM/memfunc.ll +++ b/test/CodeGen/ARM/memfunc.ll @@ -388,6 +388,7 @@ entry: @arr7 = external global [7 x i8], align 1 @arr8 = internal global [128 x i8] undef @arr9 = weak_odr global [128 x i8] undef +@arr10 = dso_local global [8 x i8] c"\01\02\03\04\05\06\07\08", align 1 define void @f9(i8* %dest, i32 %n) "no-frame-pointer-elim"="true" { entry: call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dest, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @arr1, i32 0, i32 0), i32 %n, i1 false) @@ -399,7 +400,7 @@ entry: call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dest, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @arr7, i32 0, i32 0), i32 %n, i1 false) call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dest, i8* getelementptr inbounds ([128 x i8], [128 x i8]* @arr8, i32 0, i32 0), i32 %n, i1 false) call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dest, i8* getelementptr inbounds ([128 x i8], [128 x i8]* @arr9, i32 0, i32 0), i32 %n, i1 false) - + call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dest, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @arr10, i32 0, i32 0), i32 %n, i1 false) unreachable } @@ -427,6 +428,11 @@ entry: ; CHECK-GNUEABI: arr8,128,16 ; CHECK: .p2align 4 ; CHECK: arr9: +; CHECK-IOS: .p2align 3 +; CHECK-DARWIN: .p2align 2 +; CHECK-EABI: .p2align 2 +; CHECK-GNUEABI: .p2align 2 +; CHECK: arr10: ; CHECK-NOT: arr7: