aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-08-18 06:15:16 +0000
committerChris Lattner <sabre@nondot.org>2009-08-18 06:15:16 +0000
commitdabf07c70a5e13a4560d75667fa5c7db28921a92 (patch)
treebbaf94dcb552ae8dcfb382c406cb1c7685278508 /lib
parent6a66e585b8242b9764ec3343309697d24bb1e312 (diff)
Make AsmStreamer maintain a notion of the current section, pushing it up from the
MCAsmStreamer. Based on this, eliminate the current section from AsmPrinter. While I'm at it, clean up the last of the horrible "switch to null section" stuff and add an assert. This change is in preparation for completely eliminating asmprinter::switchtosection. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79324 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/CodeGen/AsmPrinter/AsmPrinter.cpp25
-rw-r--r--lib/MC/MCAsmStreamer.cpp4
-rw-r--r--lib/MC/MCStreamer.cpp2
3 files changed, 12 insertions, 19 deletions
diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index d8594db950..e6ee960dc4 100644
--- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -63,7 +63,6 @@ AsmPrinter::AsmPrinter(formatted_raw_ostream &o, TargetMachine &tm,
LastMI(0), LastFn(0), Counter(~0U),
PrevDLT(0, ~0U, ~0U) {
- CurrentSection = 0;
DW = 0; MMI = 0;
switch (AsmVerbose) {
case cl::BOU_UNSET: VerboseAsm = VDef; break;
@@ -91,19 +90,18 @@ TargetLoweringObjectFile &AsmPrinter::getObjFileLowering() const {
}
/// SwitchToSection - Switch to the specified section of the executable if we
-/// are not already in it! If "NS" is null, then this causes us to exit the
-/// current section and not reenter another one. This is generally used for
-/// asmprinter hacks.
-///
-/// FIXME: Remove support for null sections.
-///
+/// are not already in it!
void AsmPrinter::SwitchToSection(const MCSection *NS) {
- CurrentSection = NS;
- // FIXME: Remove support for null sections!
- if (NS)
- OutStreamer.SwitchSection(NS);
+ assert(NS != 0 && "Must specify a section to switch to");
+ OutStreamer.SwitchSection(NS);
+}
+
+/// getCurrentSection() - Return the current section we are emitting to.
+const MCSection *AsmPrinter::getCurrentSection() const {
+ return OutStreamer.getCurrentSection();
}
+
void AsmPrinter::getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll();
MachineFunctionPass::getAnalysisUsage(AU);
@@ -143,8 +141,6 @@ bool AsmPrinter::doInitialization(Module &M) {
<< '\n' << TAI->getCommentString()
<< " End of file scope inline assembly\n";
- SwitchToSection(0); // Reset back to no section to close off sections.
-
if (TAI->doesSupportDebugInformation() ||
TAI->doesSupportExceptionHandling()) {
MMI = getAnalysisIfAvailable<MachineModuleInfo>();
@@ -174,7 +170,6 @@ bool AsmPrinter::doFinalization(Module &M) {
// to stuff that is actually used. Note that doing so would require targets
// to notice uses in operands (due to constant exprs etc). This should
// happen with the MC stuff eventually.
- SwitchToSection(0);
// Print out module-level global variables here.
for (Module::const_global_iterator I = M.global_begin(), E = M.global_end();
@@ -776,7 +771,7 @@ void AsmPrinter::EmitAlignment(unsigned NumBits, const GlobalValue *GV,
if (TAI->getAlignmentIsInBytes()) NumBits = 1 << NumBits;
O << TAI->getAlignDirective() << NumBits;
- if (CurrentSection && CurrentSection->getKind().isText())
+ if (getCurrentSection()->getKind().isText())
if (unsigned FillValue = TAI->getTextAlignFillValue()) {
O << ',';
PrintHex(FillValue);
diff --git a/lib/MC/MCAsmStreamer.cpp b/lib/MC/MCAsmStreamer.cpp
index 60d66f93af..cb3642532c 100644
--- a/lib/MC/MCAsmStreamer.cpp
+++ b/lib/MC/MCAsmStreamer.cpp
@@ -24,12 +24,10 @@ class MCAsmStreamer : public MCStreamer {
raw_ostream &OS;
const TargetAsmInfo &TAI;
AsmPrinter *Printer;
- const MCSection *CurSection;
public:
MCAsmStreamer(MCContext &Context, raw_ostream &_OS, const TargetAsmInfo &tai,
AsmPrinter *_AsmPrinter)
- : MCStreamer(Context), OS(_OS), TAI(tai), Printer(_AsmPrinter),
- CurSection(0) {}
+ : MCStreamer(Context), OS(_OS), TAI(tai), Printer(_AsmPrinter) {}
~MCAsmStreamer() {}
/// @name MCStreamer Interface
diff --git a/lib/MC/MCStreamer.cpp b/lib/MC/MCStreamer.cpp
index a634f33ad3..8a6dcdae7a 100644
--- a/lib/MC/MCStreamer.cpp
+++ b/lib/MC/MCStreamer.cpp
@@ -11,7 +11,7 @@
using namespace llvm;
-MCStreamer::MCStreamer(MCContext &_Context) : Context(_Context) {
+MCStreamer::MCStreamer(MCContext &_Context) : Context(_Context), CurSection(0) {
}
MCStreamer::~MCStreamer() {