[llvm-commits] [llvm] r77104 - in /llvm/trunk: lib/Target/DarwinTargetAsmInfo.cpp test/CodeGen/X86/global-sections.ll
Chris Lattner
sabre at nondot.org
Sat Jul 25 17:51:36 PDT 2009
Author: lattner
Date: Sat Jul 25 19:51:36 2009
New Revision: 77104
URL: http://llvm.org/viewvc/llvm-project?rev=77104&view=rev
Log:
simplify DarwinTargetAsmInfo::SelectSectionForGlobal a bit
and make it more aggressive, we now put:
const int G2 __attribute__((weak)) = 42;
into the text (readonly) segment like gcc, previously we put
it into the data (readwrite) segment.
Modified:
llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp
llvm/trunk/test/CodeGen/X86/global-sections.ll
Modified: llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp?rev=77104&r1=77103&r2=77104&view=diff
==============================================================================
--- llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp Sat Jul 25 19:51:36 2009
@@ -127,37 +127,41 @@
const Section*
DarwinTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV,
SectionKind Kind) const {
+ assert(!Kind.isTLS() && "Darwin doesn't support TLS");
+
// FIXME: Use sectionflags:linkonce instead of isWeakForLinker() here.
bool isWeak = GV->isWeakForLinker();
bool isNonStatic = TM.getRelocationModel() != Reloc::Static;
+ if (Kind.isCode())
+ return isWeak ? TextCoalSection : TextSection;
+
+ // If this is weak/linkonce, put this in a coalescable section, either in text
+ // or data depending on if it is writable.
+ if (isWeak) {
+ if (Kind.isReadOnly())
+ return ConstTextCoalSection;
+ return DataCoalSection;
+ }
+
+ // FIXME: Alignment check should be handled by section classifier.
+ if (Kind.isMergableString())
+ return MergeableStringSection(cast<GlobalVariable>(GV));
+
switch (Kind.getKind()) {
- case SectionKind::ThreadData:
- case SectionKind::ThreadBSS:
- llvm_unreachable("Darwin doesn't support TLS");
- case SectionKind::Text:
- if (isWeak)
- return TextCoalSection;
- return TextSection;
case SectionKind::Data:
case SectionKind::DataRelLocal:
case SectionKind::DataRel:
case SectionKind::BSS:
if (cast<GlobalVariable>(GV)->isConstant())
- return isWeak ? ConstDataCoalSection : ConstDataSection;
- return isWeak ? DataCoalSection : DataSection;
+ return ConstDataSection;
+ return DataSection;
case SectionKind::ROData:
case SectionKind::DataRelRO:
case SectionKind::DataRelROLocal:
- return (isWeak ? ConstDataCoalSection :
- (isNonStatic ? ConstDataSection : getReadOnlySection()));
- case SectionKind::RODataMergeStr:
- return (isWeak ?
- ConstTextCoalSection :
- MergeableStringSection(cast<GlobalVariable>(GV)));
+ return isNonStatic ? ConstDataSection : getReadOnlySection();
case SectionKind::RODataMergeConst: {
- if (isWeak) return ConstDataCoalSection;
const Type *Ty = cast<GlobalVariable>(GV)->getInitializer()->getType();
const TargetData *TD = TM.getTargetData();
return getSectionForMergableConstant(TD->getTypeAllocSize(Ty), 0);
Modified: llvm/trunk/test/CodeGen/X86/global-sections.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/global-sections.ll?rev=77104&r1=77103&r2=77104&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/global-sections.ll (original)
+++ llvm/trunk/test/CodeGen/X86/global-sections.ll Sat Jul 25 19:51:36 2009
@@ -1,8 +1,25 @@
; RUN: llvm-as < %s | llc -mtriple=i386-unknown-linux-gnu | FileCheck %s -check-prefix=LINUX
+; RUN: llvm-as < %s | llc -mtriple=i386-apple-darwin9.7 | FileCheck %s -check-prefix=DARWIN
+
+; int G1;
@G1 = common global i32 0
; LINUX: .type G1, at object
; LINUX: .section .gnu.linkonce.b.G1,"aw", at nobits
; LINUX: .comm G1,4,4
+; DARWIN: .comm _G1,4,2
+
+
+
+
+; const int G2 __attribute__((weak)) = 42;
+ at G2 = weak_odr constant i32 42
+
+
+; TODO: linux drops this into .rodata, we drop it into ".gnu.linkonce.r.G2"
+
+; DARWIN: .section __TEXT,__const_coal,coalesced
+; DARWIN: _G2:
+; DARWIN: .long 42
More information about the llvm-commits
mailing list