diff options
author | Chris Lattner <sabre@nondot.org> | 2009-08-08 23:39:42 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-08-08 23:39:42 +0000 |
commit | 93b6db3de934a3cfca5586df25184fef4a54c500 (patch) | |
tree | 3c32466a689b69726787f2b72bcdaf6a3879df50 /lib/Target/PIC16/PIC16TargetObjectFile.cpp | |
parent | 8e9ece75db5045ec057efbbdba6550fa0d85e695 (diff) |
sink the 'name' and 'isdirective' state out of MCSection into its derived classes.
This totally optimizes PIC16 sections by not having an 'isdirective' bit anymore!! ;-)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78517 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/PIC16/PIC16TargetObjectFile.cpp')
-rw-r--r-- | lib/Target/PIC16/PIC16TargetObjectFile.cpp | 77 |
1 files changed, 44 insertions, 33 deletions
diff --git a/lib/Target/PIC16/PIC16TargetObjectFile.cpp b/lib/Target/PIC16/PIC16TargetObjectFile.cpp index a9668f9c07..ed1caf225e 100644 --- a/lib/Target/PIC16/PIC16TargetObjectFile.cpp +++ b/lib/Target/PIC16/PIC16TargetObjectFile.cpp @@ -15,17 +15,37 @@ #include "llvm/Module.h" #include "llvm/MC/MCSection.h" #include "llvm/MC/MCContext.h" +#include "llvm/Support/raw_ostream.h" using namespace llvm; +MCSectionPIC16::MCSectionPIC16(const StringRef &name, SectionKind K, + MCContext &Ctx) : MCSection(K), Name(name) { + Ctx.SetSection(Name, this); +} + +MCSectionPIC16 *MCSectionPIC16::Create(const StringRef &Name, + SectionKind K, MCContext &Ctx) { + return new (Ctx) MCSectionPIC16(Name, K, Ctx); +} + + +void MCSectionPIC16::PrintSwitchToSection(const TargetAsmInfo &TAI, + raw_ostream &OS) const { + OS << getName() << '\n'; +} + + + + PIC16TargetObjectFile::PIC16TargetObjectFile() : ExternalVarDecls(0), ExternalVarDefs(0) { } -const MCSection *PIC16TargetObjectFile:: -getPIC16Section(const char *Name, bool isDirective, SectionKind Kind) const { +const MCSectionPIC16 *PIC16TargetObjectFile:: +getPIC16Section(const char *Name, SectionKind Kind) const { if (MCSection *S = getContext().GetSection(Name)) - return S; - return MCSectionPIC16::Create(Name, isDirective, Kind, getContext()); + return (MCSectionPIC16*)S; + return MCSectionPIC16::Create(Name, Kind, getContext()); } @@ -33,39 +53,35 @@ void PIC16TargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &tm){ TargetLoweringObjectFile::Initialize(Ctx, tm); TM = &tm; - BSSSection = getPIC16Section("udata.# UDATA", false, - SectionKind::getBSS()); - ReadOnlySection = getPIC16Section("romdata.# ROMDATA", false, + BSSSection = getPIC16Section("udata.# UDATA", SectionKind::getBSS()); + ReadOnlySection = getPIC16Section("romdata.# ROMDATA", SectionKind::getReadOnly()); - DataSection = getPIC16Section("idata.# IDATA", false, - SectionKind::getDataRel()); + DataSection = getPIC16Section("idata.# IDATA", SectionKind::getDataRel()); // Need because otherwise a .text symbol is emitted by DwarfWriter // in BeginModule, and gpasm cribbs for that .text symbol. - TextSection = getPIC16Section("", true, SectionKind::getText()); + TextSection = getPIC16Section("", SectionKind::getText()); - ROSections.push_back(new PIC16Section(ReadOnlySection)); + ROSections.push_back(new PIC16Section((MCSectionPIC16*)ReadOnlySection)); // FIXME: I don't know what the classification of these sections really is. ExternalVarDecls = new PIC16Section(getPIC16Section("ExternalVarDecls", - false, SectionKind::getMetadata())); ExternalVarDefs = new PIC16Section(getPIC16Section("ExternalVarDefs", - false, SectionKind::getMetadata())); } const MCSection *PIC16TargetObjectFile:: getSectionForFunction(const std::string &FnName) const { std::string T = PAN::getCodeSectionName(FnName); - return getPIC16Section(T.c_str(), false, SectionKind::getText()); + return getPIC16Section(T.c_str(), SectionKind::getText()); } const MCSection *PIC16TargetObjectFile:: getSectionForFunctionFrame(const std::string &FnName) const { std::string T = PAN::getFrameSectionName(FnName); - return getPIC16Section(T.c_str(), false, SectionKind::getDataRel()); + return getPIC16Section(T.c_str(), SectionKind::getDataRel()); } const MCSection * @@ -92,9 +108,8 @@ PIC16TargetObjectFile::getBSSSectionForGlobal(const GlobalVariable *GV) const { // No BSS section spacious enough was found. Crate a new one. if (!FoundBSS) { std::string name = PAN::getUdataSectionName(BSSSections.size()); - const MCSection *NewSection = getPIC16Section(name.c_str(), false, - // FIXME. - SectionKind::getMetadata()); + const MCSectionPIC16 *NewSection + = getPIC16Section(name.c_str(), /*FIXME*/ SectionKind::getMetadata()); FoundBSS = new PIC16Section(NewSection); @@ -134,9 +149,8 @@ PIC16TargetObjectFile::getIDATASectionForGlobal(const GlobalVariable *GV) const{ // No IDATA section spacious enough was found. Crate a new one. if (!FoundIDATA) { std::string name = PAN::getIdataSectionName(IDATASections.size()); - const MCSection *NewSection = getPIC16Section(name.c_str(), false, - // FIXME. - SectionKind::getMetadata()); + const MCSectionPIC16 *NewSection = + getPIC16Section(name.c_str(), /*FIXME*/ SectionKind::getMetadata()); FoundIDATA = new PIC16Section(NewSection); @@ -169,10 +183,8 @@ PIC16TargetObjectFile::getSectionForAuto(const GlobalVariable *GV) const { // No Auto section was found. Crate a new one. if (!FoundAutoSec) { - const MCSection *NewSection = getPIC16Section(name.c_str(), - // FIXME. - false, - SectionKind::getMetadata()); + const MCSectionPIC16 *NewSection = + getPIC16Section(name.c_str(), /*FIXME*/ SectionKind::getMetadata()); FoundAutoSec = new PIC16Section(NewSection); @@ -270,7 +282,7 @@ getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind, return CreateSectionForGlobal(GVar, Mang); } - return getPIC16Section(GV->getSection().c_str(), false, Kind); + return getPIC16Section(GV->getSection().c_str(), Kind); } // Create a new section for global variable. If Addr is given then create @@ -322,8 +334,8 @@ PIC16TargetObjectFile::CreateBSSSectionForGlobal(const GlobalVariable *GV, PIC16Section *NewBSS = FoundBSS; if (NewBSS == NULL) { - const MCSection *NewSection = getPIC16Section(Name.c_str(), false, - SectionKind::getBSS()); + const MCSectionPIC16 *NewSection = + getPIC16Section(Name.c_str(), SectionKind::getBSS()); NewBSS = new PIC16Section(NewSection); BSSSections.push_back(NewBSS); } @@ -374,9 +386,8 @@ PIC16TargetObjectFile::CreateIDATASectionForGlobal(const GlobalVariable *GV, PIC16Section *NewIDATASec = FoundIDATASec; if (NewIDATASec == NULL) { - const MCSection *NewSection = getPIC16Section(Name.c_str(), false, - // FIXME: - SectionKind::getMetadata()); + const MCSectionPIC16 *NewSection = + getPIC16Section(Name.c_str(), /* FIXME */SectionKind::getMetadata()); NewIDATASec = new PIC16Section(NewSection); IDATASections.push_back(NewIDATASec); } @@ -414,8 +425,8 @@ PIC16TargetObjectFile::CreateROSectionForGlobal(const GlobalVariable *GV, PIC16Section *NewRomSec = FoundROSec; if (NewRomSec == NULL) { - const MCSection *NewSection = getPIC16Section(Name.c_str(), false, - SectionKind::getReadOnly()); + const MCSectionPIC16 *NewSection = + getPIC16Section(Name.c_str(), SectionKind::getReadOnly()); NewRomSec = new PIC16Section(NewSection); ROSections.push_back(NewRomSec); } |