From: Bruno Cardoso Lopes Date: Tue, 22 Jul 2008 16:24:21 +0000 (+0000) Subject: simplified small section logic X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=c92a0e90b73a502d218249b29ff496256e87a596;p=oota-llvm.git simplified small section logic git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53912 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/Mips/MipsTargetAsmInfo.cpp b/lib/Target/Mips/MipsTargetAsmInfo.cpp index 4678c3b2031..78b5c4aee0e 100644 --- a/lib/Target/Mips/MipsTargetAsmInfo.cpp +++ b/lib/Target/Mips/MipsTargetAsmInfo.cpp @@ -45,45 +45,29 @@ MipsTargetAsmInfo::MipsTargetAsmInfo(const MipsTargetMachine &TM): SectionFlags::Writeable | SectionFlags::BSS); } -static bool isSuitableForBSS(const GlobalVariable *GV) { - if (!GV->hasInitializer()) - return true; - - // Leave constant zeros in readonly constant sections, so they can be shared - Constant *C = GV->getInitializer(); - return (C->isNullValue() && !GV->isConstant() && !NoZerosInBSS); -} - SectionKind::Kind MipsTargetAsmInfo::SectionKindForGlobal(const GlobalValue *GV) const { - const TargetData *TD = ETM->getTargetData(); - const GlobalVariable *GVA = dyn_cast(GV); - - if (!GVA) - return ELFTargetAsmInfo::SectionKindForGlobal(GV); - - // if this is a internal constant string, there is a special - // section for it, but not in small data/bss. - if (GVA->hasInitializer() && GV->hasInternalLinkage()) { - Constant *C = GVA->getInitializer(); - const ConstantArray *CVA = dyn_cast(C); - if (CVA && CVA->isCString()) - return ELFTargetAsmInfo::SectionKindForGlobal(GV); - } - - const Type *Ty = GV->getType()->getElementType(); - unsigned Size = TD->getABITypeSize(Ty); - unsigned Threshold = - MipsTM->getSubtarget().getSSectionThreshold(); - - if (Size > 0 && Size <= Threshold) { - if (isSuitableForBSS(GVA)) - return SectionKind::SmallBSS; - else - return SectionKind::SmallData; + SectionKind::Kind K = ELFTargetAsmInfo::SectionKindForGlobal(GV); + + if (K != SectionKind::Data && K != SectionKind::BSS && + K != SectionKind::RODataMergeConst) + return K; + + if (isa(GV)) { + const TargetData *TD = ETM->getTargetData(); + unsigned Size = TD->getABITypeSize(GV->getType()->getElementType()); + unsigned Threshold = + MipsTM->getSubtarget().getSSectionThreshold(); + + if (Size > 0 && Size <= Threshold) { + if (K == SectionKind::BSS) + return SectionKind::SmallBSS; + else + return SectionKind::SmallData; + } } - return ELFTargetAsmInfo::SectionKindForGlobal(GV); + return K; } const Section*