[llvm-commits] [llvm] r77107 - in /llvm/trunk: include/llvm/Target/TargetAsmInfo.h lib/Target/DarwinTargetAsmInfo.cpp test/CodeGen/X86/global-sections.ll
Chris Lattner
sabre at nondot.org
Sat Jul 25 18:24:18 PDT 2009
Author: lattner
Date: Sat Jul 25 20:24:18 2009
New Revision: 77107
URL: http://llvm.org/viewvc/llvm-project?rev=77107&view=rev
Log:
finish simplifying DarwinTargetAsmInfo::SelectSectionForGlobal
for now. Make the section switching directives more consistent
by not including \n and including \t for them all.
Modified:
llvm/trunk/include/llvm/Target/TargetAsmInfo.h
llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp
llvm/trunk/test/CodeGen/X86/global-sections.ll
Modified: llvm/trunk/include/llvm/Target/TargetAsmInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetAsmInfo.h?rev=77107&r1=77106&r2=77107&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Target/TargetAsmInfo.h (original)
+++ llvm/trunk/include/llvm/Target/TargetAsmInfo.h Sat Jul 25 20:24:18 2009
@@ -65,6 +65,12 @@
K == DataRelRO || K == DataRelROLocal ||
K == RODataMergeConst || K == RODataMergeStr;
}
+
+ /// isReadOnlyWithDynamicInit - Return true if this data is readonly, but
+ /// the dynamic linker has to write to it to apply relocations.
+ bool isReadOnlyWithDynamicInit() const {
+ return K == DataRelRO || K == DataRelROLocal;
+ }
bool isBSS() const {
return K == BSS || K == ThreadBSS;
@@ -87,6 +93,9 @@
}
bool isMergableString() const { return K == RODataMergeStr; }
+ bool isMergableConstant() const {
+ return K == RODataMergeStr || K == RODataMergeConst;
+ }
static SectionKind get(Kind K) {
SectionKind Res = { K };
Modified: llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp?rev=77107&r1=77106&r2=77107&view=diff
==============================================================================
--- llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp Sat Jul 25 20:24:18 2009
@@ -39,7 +39,7 @@
// there, if needed.
SixteenByteConstantSection = 0;
- ReadOnlySection = getUnnamedSection("\t.const\n", SectionFlags::None);
+ ReadOnlySection = getUnnamedSection("\t.const", SectionFlags::None);
TextCoalSection =
getNamedSection("\t__TEXT,__textcoal_nt,coalesced,pure_instructions",
@@ -48,7 +48,7 @@
SectionFlags::None);
ConstDataCoalSection = getNamedSection("\t__DATA,__const_coal,coalesced",
SectionFlags::None);
- ConstDataSection = getUnnamedSection(".const_data", SectionFlags::None);
+ ConstDataSection = getUnnamedSection("\t.const_data", SectionFlags::None);
DataCoalSection = getNamedSection("\t__DATA,__datacoal_nt,coalesced",
SectionFlags::Writable);
@@ -75,7 +75,7 @@
// Sections:
CStringSection = "\t.cstring";
- JumpTableDataSection = "\t.const\n";
+ JumpTableDataSection = "\t.const";
BSSSection = 0;
if (TM.getRelocationModel() == Reloc::Static) {
@@ -131,7 +131,6 @@
// 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;
@@ -148,30 +147,24 @@
if (Kind.isMergableString())
return MergeableStringSection(cast<GlobalVariable>(GV));
- switch (Kind.getKind()) {
- case SectionKind::Data:
- case SectionKind::DataRelLocal:
- case SectionKind::DataRel:
- case SectionKind::BSS:
- if (cast<GlobalVariable>(GV)->isConstant())
- return ConstDataSection;
- return DataSection;
-
- case SectionKind::ROData:
- case SectionKind::DataRelRO:
- case SectionKind::DataRelROLocal:
- return isNonStatic ? ConstDataSection : getReadOnlySection();
- case SectionKind::RODataMergeConst: {
+ if (Kind.isMergableConstant()) {
const Type *Ty = cast<GlobalVariable>(GV)->getInitializer()->getType();
const TargetData *TD = TM.getTargetData();
return getSectionForMergableConstant(TD->getTypeAllocSize(Ty), 0);
}
- default:
- llvm_unreachable("Unsuported section kind for global");
- }
- // FIXME: Do we have any extra special weird cases?
- return NULL;
+ // If this is marked const, put it into a const section. But if the dynamic
+ // linker needs to write to it, put it in the data segment.
+ if (Kind.isReadOnlyWithDynamicInit())
+ return ConstDataSection;
+
+ // FIXME: ROData -> const in -static mode that is relocatable but they happen
+ // by the static linker. Why not mergable?
+ if (Kind.isReadOnly())
+ return getReadOnlySection();
+
+ // Otherwise, just drop the variable in the normal data section.
+ return DataSection;
}
const Section*
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=77107&r1=77106&r2=77107&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/global-sections.ll (original)
+++ llvm/trunk/test/CodeGen/X86/global-sections.ll Sat Jul 25 20:24:18 2009
@@ -23,3 +23,20 @@
; DARWIN: .section __TEXT,__const_coal,coalesced
; DARWIN: _G2:
; DARWIN: .long 42
+
+
+; int * const G3 = &G1;
+ at G3 = constant i32* @G1
+
+; DARWIN: .const_data
+; DARWIN: .globl _G3
+; DARWIN: _G3:
+; DARWIN: .long _G1
+
+
+; _Complex long long const G4 = 34;
+ at G4 = constant {i64,i64} { i64 34, i64 0 }
+
+; DARWIN: .const
+; DARWIN: _G4:
+; .long 34
More information about the llvm-commits
mailing list