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.
|
||||
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.
|
||||
ThreadData, ///< Initialized TLS data objects
|
||||
ThreadBSS ///< Uninitialized TLS data objects
|
||||
|
@ -64,13 +58,11 @@ namespace llvm {
|
|||
static inline bool isReadOnly(Kind K) {
|
||||
return (K == SectionKind::ROData ||
|
||||
K == SectionKind::RODataMergeConst ||
|
||||
K == SectionKind::RODataMergeStr ||
|
||||
K == SectionKind::SmallROData);
|
||||
K == SectionKind::RODataMergeStr);
|
||||
}
|
||||
|
||||
static inline bool isBSS(Kind K) {
|
||||
return (K == SectionKind::BSS ||
|
||||
K == SectionKind::SmallBSS);
|
||||
return K == SectionKind::BSS;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -102,8 +102,6 @@ ELFTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV) const {
|
|||
} else {
|
||||
switch (Kind) {
|
||||
case SectionKind::Data:
|
||||
case SectionKind::SmallData:
|
||||
return DataSection;
|
||||
case SectionKind::DataRel:
|
||||
return DataRelSection;
|
||||
case SectionKind::DataRelLocal:
|
||||
|
@ -113,11 +111,8 @@ ELFTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV) const {
|
|||
case SectionKind::DataRelROLocal:
|
||||
return DataRelROLocalSection;
|
||||
case SectionKind::BSS:
|
||||
case SectionKind::SmallBSS:
|
||||
// ELF targets usually have BSS sections
|
||||
return getBSSSection_();
|
||||
case SectionKind::ROData:
|
||||
case SectionKind::SmallROData:
|
||||
return getReadOnlySection();
|
||||
case SectionKind::RODataMergeStr:
|
||||
return MergeableStringSection(GVar);
|
||||
|
|
|
@ -20,8 +20,6 @@ using namespace llvm;
|
|||
MipsTargetAsmInfo::MipsTargetAsmInfo(const MipsTargetMachine &TM):
|
||||
ELFTargetAsmInfo(TM) {
|
||||
|
||||
Subtarget = &TM.getSubtarget<MipsSubtarget>();
|
||||
|
||||
AlignmentIsInBytes = false;
|
||||
COMMDirectiveTakesAlignment = true;
|
||||
Data16bitsDirective = "\t.half\t";
|
||||
|
@ -34,57 +32,13 @@ MipsTargetAsmInfo::MipsTargetAsmInfo(const MipsTargetMachine &TM):
|
|||
BSSSection = "\t.section\t.bss";
|
||||
CStringSection = ".rodata.str";
|
||||
|
||||
if (!Subtarget->hasABICall()) {
|
||||
if (!TM.getSubtarget<MipsSubtarget>().hasABICall()) {
|
||||
JumpTableDirective = "\t.word\t";
|
||||
SmallDataSection = getNamedSection("\t.sdata", SectionFlags::Writeable);
|
||||
SmallBSSSection = getNamedSection("\t.sbss",
|
||||
SectionFlags::Writeable |
|
||||
SectionFlags::BSS);
|
||||
} else
|
||||
} else {
|
||||
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 {
|
||||
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:
|
||||
const MipsSubtarget *Subtarget;
|
||||
};
|
||||
|
|
|
@ -257,12 +257,6 @@ TargetAsmInfo::SectionFlagsForGlobal(const GlobalValue *GV,
|
|||
case SectionKind::RODataMergeConst:
|
||||
// No additional flags here
|
||||
break;
|
||||
case SectionKind::SmallData:
|
||||
case SectionKind::SmallBSS:
|
||||
Flags |= SectionFlags::Writeable;
|
||||
break;
|
||||
case SectionKind::SmallROData:
|
||||
break;
|
||||
default:
|
||||
llvm_unreachable("Unexpected section kind!");
|
||||
}
|
||||
|
@ -359,18 +353,12 @@ TargetAsmInfo::UniqueSectionForGlobal(const GlobalValue* GV,
|
|||
return ".gnu.linkonce.d.rel.ro" + GV->getNameStr();
|
||||
case SectionKind::DataRelROLocal:
|
||||
return ".gnu.linkonce.d.rel.ro.local" + GV->getNameStr();
|
||||
case SectionKind::SmallData:
|
||||
return ".gnu.linkonce.s." + GV->getNameStr();
|
||||
case SectionKind::BSS:
|
||||
return ".gnu.linkonce.b." + GV->getNameStr();
|
||||
case SectionKind::SmallBSS:
|
||||
return ".gnu.linkonce.sb." + GV->getNameStr();
|
||||
case SectionKind::ROData:
|
||||
case SectionKind::RODataMergeConst:
|
||||
case SectionKind::RODataMergeStr:
|
||||
return ".gnu.linkonce.r." + GV->getNameStr();
|
||||
case SectionKind::SmallROData:
|
||||
return ".gnu.linkonce.s2." + GV->getNameStr();
|
||||
case SectionKind::ThreadData:
|
||||
return ".gnu.linkonce.td." + GV->getNameStr();
|
||||
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