[PATCH] D41705: Place undefined globals in .bss instead of .data
Eli Friedman via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 6 15:24:58 PST 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL324424: Place undefined globals in .bss instead of .data (authored by efriedma, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D41705?vs=132388&id=133092#toc
Repository:
rL LLVM
https://reviews.llvm.org/D41705
Files:
llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp
llvm/trunk/test/CodeGen/ARM/memfunc.ll
llvm/trunk/test/CodeGen/X86/undef-globals-bss.ll
Index: llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp
===================================================================
--- llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp
+++ llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp
@@ -52,11 +52,24 @@
delete Mang;
}
+static bool isNullOrUndef(const Constant *C) {
+ // Check that the constant isn't all zeros or undefs.
+ if (C->isNullValue() || isa<UndefValue>(C))
+ return true;
+ if (!isa<ConstantAggregate>(C))
+ return false;
+ for (auto Operand : C->operand_values()) {
+ if (!isNullOrUndef(cast<Constant>(Operand)))
+ return false;
+ }
+ return true;
+}
+
static bool isSuitableForBSS(const GlobalVariable *GV, bool NoZerosInBSS) {
const Constant *C = GV->getInitializer();
// Must have zero initializer.
- if (!C->isNullValue())
+ if (!isNullOrUndef(C))
return false;
// Leave constant zeros in readonly constant sections, so they can be shared.
Index: llvm/trunk/test/CodeGen/X86/undef-globals-bss.ll
===================================================================
--- llvm/trunk/test/CodeGen/X86/undef-globals-bss.ll
+++ llvm/trunk/test/CodeGen/X86/undef-globals-bss.ll
@@ -0,0 +1,12 @@
+; RUN: llc < %s | FileCheck %s
+target triple = "x86_64-apple-darwin"
+
+; CHECK: .zerofill __DATA,__bss,_vals,8000000,2 ## @vals
+ at vals = internal unnamed_addr global [2000000 x i32] undef, align 4
+
+; CHECK: .zerofill __DATA,__bss,_struct,8000040,3 ## @struct
+ at struct = internal global { i1, [8000000 x i8], [7 x i8], i64, { [4 x i32], { i8 }, i1 } }
+ { i1 false, [8000000 x i8] zeroinitializer, [7 x i8] undef, i64 0,
+ { [4 x i32], { i8 }, i1 }
+ { [4 x i32] zeroinitializer, { i8 } { i8 undef }, i1 false }
+ }, align 8
Index: llvm/trunk/test/CodeGen/ARM/memfunc.ll
===================================================================
--- llvm/trunk/test/CodeGen/ARM/memfunc.ll
+++ llvm/trunk/test/CodeGen/ARM/memfunc.ll
@@ -421,8 +421,10 @@
; CHECK: arr5:
; CHECK-NOT: .p2align
; CHECK: arr6:
-; CHECK: .p2align 4
-; CHECK: arr8:
+; CHECK-IOS: arr8,128,4
+; CHECK-DARWIN: arr8,128,4
+; CHECK-EABI: arr8,128,16
+; CHECK-GNUEABI: arr8,128,16
; CHECK: .p2align 4
; CHECK: arr9:
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D41705.133092.patch
Type: text/x-patch
Size: 2270 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180206/fedf10eb/attachment.bin>
More information about the llvm-commits
mailing list