aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/PIC16/PIC16TargetObjectFile.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-08-08 23:39:42 +0000
committerChris Lattner <sabre@nondot.org>2009-08-08 23:39:42 +0000
commit93b6db3de934a3cfca5586df25184fef4a54c500 (patch)
tree3c32466a689b69726787f2b72bcdaf6a3879df50 /lib/Target/PIC16/PIC16TargetObjectFile.cpp
parent8e9ece75db5045ec057efbbdba6550fa0d85e695 (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.cpp77
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);
}