forked from OSchip/llvm-project
Remove SectionKind::Small*. This was only used on mips, and is apparently
a sad mistake that is regretted. :) llvm-svn: 76935
This commit is contained in:
parent
d9baf6aed8
commit
26aff56462
|
@ -50,12 +50,6 @@ namespace llvm {
|
||||||
RODataMergeStr, ///< Readonly data section: nul-terminated strings.
|
RODataMergeStr, ///< Readonly data section: nul-terminated strings.
|
||||||
RODataMergeConst, ///< Readonly data section: fixed-length constants.
|
RODataMergeConst, ///< Readonly data section: fixed-length constants.
|
||||||
|
|
||||||
/// Small sections - These sections contains "short" data, and should be
|
|
||||||
/// placed "near" the GP.
|
|
||||||
SmallData, ///< Small data section
|
|
||||||
SmallBSS, ///< Small bss section
|
|
||||||
SmallROData, ///< Small readonly section
|
|
||||||
|
|
||||||
/// Thread local data.
|
/// Thread local data.
|
||||||
ThreadData, ///< Initialized TLS data objects
|
ThreadData, ///< Initialized TLS data objects
|
||||||
ThreadBSS ///< Uninitialized TLS data objects
|
ThreadBSS ///< Uninitialized TLS data objects
|
||||||
|
@ -64,13 +58,11 @@ namespace llvm {
|
||||||
static inline bool isReadOnly(Kind K) {
|
static inline bool isReadOnly(Kind K) {
|
||||||
return (K == SectionKind::ROData ||
|
return (K == SectionKind::ROData ||
|
||||||
K == SectionKind::RODataMergeConst ||
|
K == SectionKind::RODataMergeConst ||
|
||||||
K == SectionKind::RODataMergeStr ||
|
K == SectionKind::RODataMergeStr);
|
||||||
K == SectionKind::SmallROData);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool isBSS(Kind K) {
|
static inline bool isBSS(Kind K) {
|
||||||
return (K == SectionKind::BSS ||
|
return K == SectionKind::BSS;
|
||||||
K == SectionKind::SmallBSS);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -102,8 +102,6 @@ ELFTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV) const {
|
||||||
} else {
|
} else {
|
||||||
switch (Kind) {
|
switch (Kind) {
|
||||||
case SectionKind::Data:
|
case SectionKind::Data:
|
||||||
case SectionKind::SmallData:
|
|
||||||
return DataSection;
|
|
||||||
case SectionKind::DataRel:
|
case SectionKind::DataRel:
|
||||||
return DataRelSection;
|
return DataRelSection;
|
||||||
case SectionKind::DataRelLocal:
|
case SectionKind::DataRelLocal:
|
||||||
|
@ -113,11 +111,8 @@ ELFTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV) const {
|
||||||
case SectionKind::DataRelROLocal:
|
case SectionKind::DataRelROLocal:
|
||||||
return DataRelROLocalSection;
|
return DataRelROLocalSection;
|
||||||
case SectionKind::BSS:
|
case SectionKind::BSS:
|
||||||
case SectionKind::SmallBSS:
|
|
||||||
// ELF targets usually have BSS sections
|
|
||||||
return getBSSSection_();
|
return getBSSSection_();
|
||||||
case SectionKind::ROData:
|
case SectionKind::ROData:
|
||||||
case SectionKind::SmallROData:
|
|
||||||
return getReadOnlySection();
|
return getReadOnlySection();
|
||||||
case SectionKind::RODataMergeStr:
|
case SectionKind::RODataMergeStr:
|
||||||
return MergeableStringSection(GVar);
|
return MergeableStringSection(GVar);
|
||||||
|
|
|
@ -20,8 +20,6 @@ using namespace llvm;
|
||||||
MipsTargetAsmInfo::MipsTargetAsmInfo(const MipsTargetMachine &TM):
|
MipsTargetAsmInfo::MipsTargetAsmInfo(const MipsTargetMachine &TM):
|
||||||
ELFTargetAsmInfo(TM) {
|
ELFTargetAsmInfo(TM) {
|
||||||
|
|
||||||
Subtarget = &TM.getSubtarget<MipsSubtarget>();
|
|
||||||
|
|
||||||
AlignmentIsInBytes = false;
|
AlignmentIsInBytes = false;
|
||||||
COMMDirectiveTakesAlignment = true;
|
COMMDirectiveTakesAlignment = true;
|
||||||
Data16bitsDirective = "\t.half\t";
|
Data16bitsDirective = "\t.half\t";
|
||||||
|
@ -34,57 +32,13 @@ MipsTargetAsmInfo::MipsTargetAsmInfo(const MipsTargetMachine &TM):
|
||||||
BSSSection = "\t.section\t.bss";
|
BSSSection = "\t.section\t.bss";
|
||||||
CStringSection = ".rodata.str";
|
CStringSection = ".rodata.str";
|
||||||
|
|
||||||
if (!Subtarget->hasABICall()) {
|
if (!TM.getSubtarget<MipsSubtarget>().hasABICall()) {
|
||||||
JumpTableDirective = "\t.word\t";
|
JumpTableDirective = "\t.word\t";
|
||||||
SmallDataSection = getNamedSection("\t.sdata", SectionFlags::Writeable);
|
SmallDataSection = getNamedSection("\t.sdata", SectionFlags::Writeable);
|
||||||
SmallBSSSection = getNamedSection("\t.sbss",
|
SmallBSSSection = getNamedSection("\t.sbss",
|
||||||
SectionFlags::Writeable |
|
SectionFlags::Writeable |
|
||||||
SectionFlags::BSS);
|
SectionFlags::BSS);
|
||||||
} else
|
} else {
|
||||||
JumpTableDirective = "\t.gpword\t";
|
JumpTableDirective = "\t.gpword\t";
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
SectionKind::Kind MipsTargetAsmInfo::
|
|
||||||
SectionKindForGlobal(const GlobalValue *GV) const {
|
|
||||||
SectionKind::Kind K = ELFTargetAsmInfo::SectionKindForGlobal(GV);
|
|
||||||
|
|
||||||
if (Subtarget->hasABICall())
|
|
||||||
return K;
|
|
||||||
|
|
||||||
if (K != SectionKind::Data && K != SectionKind::BSS &&
|
|
||||||
K != SectionKind::RODataMergeConst)
|
|
||||||
return K;
|
|
||||||
|
|
||||||
if (isa<GlobalVariable>(GV)) {
|
|
||||||
const TargetData *TD = TM.getTargetData();
|
|
||||||
unsigned Size = TD->getTypeAllocSize(GV->getType()->getElementType());
|
|
||||||
unsigned Threshold = Subtarget->getSSectionThreshold();
|
|
||||||
|
|
||||||
if (Size > 0 && Size <= Threshold) {
|
|
||||||
if (K == SectionKind::BSS)
|
|
||||||
return SectionKind::SmallBSS;
|
|
||||||
else
|
|
||||||
return SectionKind::SmallData;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return K;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Section* MipsTargetAsmInfo::
|
|
||||||
SelectSectionForGlobal(const GlobalValue *GV) const {
|
|
||||||
SectionKind::Kind K = SectionKindForGlobal(GV);
|
|
||||||
const GlobalVariable *GVA = dyn_cast<GlobalVariable>(GV);
|
|
||||||
|
|
||||||
if (GVA && (!GVA->isWeakForLinker()))
|
|
||||||
switch (K) {
|
|
||||||
case SectionKind::SmallData:
|
|
||||||
return getSmallDataSection();
|
|
||||||
case SectionKind::SmallBSS:
|
|
||||||
return getSmallBSSSection();
|
|
||||||
default: break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ELFTargetAsmInfo::SelectSectionForGlobal(GV);
|
|
||||||
}
|
|
||||||
|
|
|
@ -29,13 +29,6 @@ namespace llvm {
|
||||||
struct MipsTargetAsmInfo : public ELFTargetAsmInfo {
|
struct MipsTargetAsmInfo : public ELFTargetAsmInfo {
|
||||||
explicit MipsTargetAsmInfo(const MipsTargetMachine &TM);
|
explicit MipsTargetAsmInfo(const MipsTargetMachine &TM);
|
||||||
|
|
||||||
/// SectionKindForGlobal - This hook allows the target to select proper
|
|
||||||
/// section kind used for global emission.
|
|
||||||
virtual SectionKind::Kind
|
|
||||||
SectionKindForGlobal(const GlobalValue *GV) const;
|
|
||||||
|
|
||||||
virtual const Section* SelectSectionForGlobal(const GlobalValue *GV) const;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const MipsSubtarget *Subtarget;
|
const MipsSubtarget *Subtarget;
|
||||||
};
|
};
|
||||||
|
|
|
@ -257,12 +257,6 @@ TargetAsmInfo::SectionFlagsForGlobal(const GlobalValue *GV,
|
||||||
case SectionKind::RODataMergeConst:
|
case SectionKind::RODataMergeConst:
|
||||||
// No additional flags here
|
// No additional flags here
|
||||||
break;
|
break;
|
||||||
case SectionKind::SmallData:
|
|
||||||
case SectionKind::SmallBSS:
|
|
||||||
Flags |= SectionFlags::Writeable;
|
|
||||||
break;
|
|
||||||
case SectionKind::SmallROData:
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
llvm_unreachable("Unexpected section kind!");
|
llvm_unreachable("Unexpected section kind!");
|
||||||
}
|
}
|
||||||
|
@ -359,18 +353,12 @@ TargetAsmInfo::UniqueSectionForGlobal(const GlobalValue* GV,
|
||||||
return ".gnu.linkonce.d.rel.ro" + GV->getNameStr();
|
return ".gnu.linkonce.d.rel.ro" + GV->getNameStr();
|
||||||
case SectionKind::DataRelROLocal:
|
case SectionKind::DataRelROLocal:
|
||||||
return ".gnu.linkonce.d.rel.ro.local" + GV->getNameStr();
|
return ".gnu.linkonce.d.rel.ro.local" + GV->getNameStr();
|
||||||
case SectionKind::SmallData:
|
|
||||||
return ".gnu.linkonce.s." + GV->getNameStr();
|
|
||||||
case SectionKind::BSS:
|
case SectionKind::BSS:
|
||||||
return ".gnu.linkonce.b." + GV->getNameStr();
|
return ".gnu.linkonce.b." + GV->getNameStr();
|
||||||
case SectionKind::SmallBSS:
|
|
||||||
return ".gnu.linkonce.sb." + GV->getNameStr();
|
|
||||||
case SectionKind::ROData:
|
case SectionKind::ROData:
|
||||||
case SectionKind::RODataMergeConst:
|
case SectionKind::RODataMergeConst:
|
||||||
case SectionKind::RODataMergeStr:
|
case SectionKind::RODataMergeStr:
|
||||||
return ".gnu.linkonce.r." + GV->getNameStr();
|
return ".gnu.linkonce.r." + GV->getNameStr();
|
||||||
case SectionKind::SmallROData:
|
|
||||||
return ".gnu.linkonce.s2." + GV->getNameStr();
|
|
||||||
case SectionKind::ThreadData:
|
case SectionKind::ThreadData:
|
||||||
return ".gnu.linkonce.td." + GV->getNameStr();
|
return ".gnu.linkonce.td." + GV->getNameStr();
|
||||||
case SectionKind::ThreadBSS:
|
case SectionKind::ThreadBSS:
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
; RUN: llvm-as < %s | llc -mips-ssection-threshold=8 -march=mips -f -o %t0
|
|
||||||
; RUN: llvm-as < %s | llc -mips-ssection-threshold=0 -march=mips -f -o %t1
|
|
||||||
; RUN: grep {sdata} %t0 | count 1
|
|
||||||
; RUN: grep {sbss} %t0 | count 1
|
|
||||||
; RUN: grep {gp_rel} %t0 | count 2
|
|
||||||
; RUN: not grep {sdata} %t1
|
|
||||||
; RUN: not grep {sbss} %t1
|
|
||||||
; RUN: not grep {gp_rel} %t1
|
|
||||||
; RUN: grep {\%hi} %t1 | count 2
|
|
||||||
; RUN: grep {\%lo} %t1 | count 2
|
|
||||||
|
|
||||||
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64"
|
|
||||||
target triple = "mipsallegrexel-psp-elf"
|
|
||||||
|
|
||||||
%struct.anon = type { i32, i32 }
|
|
||||||
@s0 = global [8 x i8] c"AAAAAAA\00", align 4
|
|
||||||
@foo = global %struct.anon { i32 2, i32 3 }
|
|
||||||
@bar = global %struct.anon zeroinitializer
|
|
||||||
|
|
||||||
define i8* @A0() nounwind {
|
|
||||||
entry:
|
|
||||||
ret i8* getelementptr ([8 x i8]* @s0, i32 0, i32 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
define i32 @A1() nounwind {
|
|
||||||
entry:
|
|
||||||
load i32* getelementptr (%struct.anon* @foo, i32 0, i32 0), align 8
|
|
||||||
load i32* getelementptr (%struct.anon* @foo, i32 0, i32 1), align 4
|
|
||||||
add i32 %1, %0
|
|
||||||
ret i32 %2
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue