1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-21 20:12:56 +02:00

precreate 4/8/16 byte mergable sections to simplify code.

llvm-svn: 77133
This commit is contained in:
Chris Lattner 2009-07-26 06:16:11 +00:00
parent e8b2f94ce2
commit d44b68fbeb
2 changed files with 29 additions and 22 deletions

View File

@ -43,13 +43,17 @@ namespace llvm {
SectionKind Kind) const;
virtual std::string printSectionFlags(unsigned flags) const;
const Section* DataRelSection;
const Section* DataRelLocalSection;
const Section* DataRelROSection;
const Section* DataRelROLocalSection;
const Section *DataRelSection;
const Section *DataRelLocalSection;
const Section *DataRelROSection;
const Section *DataRelROLocalSection;
const Section *MergableConst4Section;
const Section *MergableConst8Section;
const Section *MergableConst16Section;
private:
const Section* MergeableStringSection(const GlobalVariable *GV) const;
const Section *MergeableStringSection(const GlobalVariable *GV) const;
};
}

View File

@ -43,6 +43,13 @@ ELFTargetAsmInfo::ELFTargetAsmInfo(const TargetMachine &TM)
SectionFlags::Writable);
DataRelROLocalSection = getNamedSection("\t.data.rel.ro.local",
SectionFlags::Writable);
MergableConst4Section = getNamedSection(".rodata.cst4",
SectionFlags::setEntitySize(SectionFlags::Mergeable, 4));
MergableConst8Section = getNamedSection(".rodata.cst8",
SectionFlags::setEntitySize(SectionFlags::Mergeable, 8));
MergableConst16Section = getNamedSection(".rodata.cst16",
SectionFlags::setEntitySize(SectionFlags::Mergeable, 16));
}
@ -54,10 +61,15 @@ ELFTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV,
return MergeableStringSection(cast<GlobalVariable>(GV));
if (Kind.isMergableConst()) {
const Type *Ty = cast<GlobalVariable>(GV)->getInitializer()->getType();
const TargetData *TD = TM.getTargetData();
return getSectionForMergableConstant(TD->getTypeAllocSize(Ty), 0);
if (Kind.isMergableConst4())
return MergableConst4Section;
if (Kind.isMergableConst8())
return MergableConst8Section;
if (Kind.isMergableConst16())
return MergableConst16Section;
return ReadOnlySection; // .const
}
if (Kind.isReadOnly()) return getReadOnlySection();
@ -89,21 +101,12 @@ ELFTargetAsmInfo::getSectionForMergableConstant(uint64_t Size,
if (ReloInfo == 1)
return DataRelROLocalSection;
const char *SecName = 0;
switch (Size) {
default: break;
case 4: SecName = ".rodata.cst4"; break;
case 8: SecName = ".rodata.cst8"; break;
case 16: SecName = ".rodata.cst16"; break;
default: return ReadOnlySection; // .rodata
case 4: return MergableConst4Section;
case 8: return MergableConst8Section;
case 16: return MergableConst16Section;
}
if (SecName)
return getNamedSection(SecName,
SectionFlags::setEntitySize(SectionFlags::Mergeable,
Size));
return getReadOnlySection(); // .rodata
}
/// getFlagsForNamedSection - If this target wants to be able to infer