From 290c2f56ce551ebcf4480ac2944986fe4bb339e9 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 3 Aug 2009 23:20:21 +0000 Subject: [PATCH] eliminate CurrentSection, rename CurrentSection_ -> CurrentSection, make it private, eliminate IsInTextSection. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78017 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/AsmPrinter.h | 15 ++++++------ lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 35 +++++++++++---------------- lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 2 +- 3 files changed, 22 insertions(+), 30 deletions(-) diff --git a/include/llvm/CodeGen/AsmPrinter.h b/include/llvm/CodeGen/AsmPrinter.h index cab75f1852d..847c9452664 100644 --- a/include/llvm/CodeGen/AsmPrinter.h +++ b/include/llvm/CodeGen/AsmPrinter.h @@ -60,6 +60,10 @@ namespace llvm { typedef gcp_map_type::iterator gcp_iterator; gcp_map_type GCMetadataPrinters; + /// CurrentSection - The current section we are emitting to. This is + /// controlled and used by the SwitchToSection method. + const MCSection *CurrentSection; + protected: /// MMI - If available, this is a pointer to the current MachineModuleInfo. MachineModuleInfo *MMI; @@ -110,14 +114,9 @@ namespace llvm { /// std::string CurrentFnName; - /// CurrentSection - The current section we are emitting to. This is - /// controlled and used by the SwitchSection method. - std::string CurrentSection; - const MCSection *CurrentSection_; - - /// IsInTextSection - True if the current section we are emitting to is a - /// text section. - bool IsInTextSection; + /// getCurrentSection() - Return the current section we are emitting to. + const MCSection *getCurrentSection() const { return CurrentSection; } + /// VerboseAsm - Emit comments in assembly output if this is true. /// diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index f813c8b3a83..742997aaaa5 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -55,8 +55,9 @@ AsmPrinter::AsmPrinter(formatted_raw_ostream &o, TargetMachine &tm, OutContext(*new MCContext()), OutStreamer(*createAsmStreamer(OutContext, O)), - IsInTextSection(false), LastMI(0), LastFn(0), Counter(~0U), + 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; @@ -86,20 +87,16 @@ TargetLoweringObjectFile &AsmPrinter::getObjFileLowering() const { /// FIXME: Remove support for null sections. /// void AsmPrinter::SwitchToSection(const MCSection *NS) { - const std::string &NewSection = NS ? NS->getName() : ""; - // If we're already in this section, we're done. - if (CurrentSection == NewSection) return; + if (CurrentSection == NS) return; // Close the current section, if applicable. - if (TAI->getSectionEndDirectiveSuffix() && !CurrentSection.empty()) - O << CurrentSection << TAI->getSectionEndDirectiveSuffix() << '\n'; + if (NS != 0 && TAI->getSectionEndDirectiveSuffix()) + O << NS->getName() << TAI->getSectionEndDirectiveSuffix() << '\n'; - // FIXME: Make CurrentSection a Section* in the future - CurrentSection = NewSection; - CurrentSection_ = NS; + CurrentSection = NS; - if (!CurrentSection.empty()) { + if (NS != 0) { // If section is named we need to switch into it via special '.section' // directive and also append funky flags. Otherwise - section name is just // some magic assembler directive. @@ -109,15 +106,12 @@ void AsmPrinter::SwitchToSection(const MCSection *NS) { getObjFileLowering().getSectionFlagsAsString(NS->getKind(), FlagsStr); O << TAI->getSwitchToSectionDirective() - << CurrentSection - << FlagsStr.c_str(); + << CurrentSection->getName() << FlagsStr.c_str(); } else { - O << CurrentSection; + O << CurrentSection->getName(); } O << TAI->getDataSectionStartSuffix() << '\n'; } - - IsInTextSection = NS ? NS->getKind().isText() : false; } void AsmPrinter::getAnalysisUsage(AnalysisUsage &AU) const { @@ -787,12 +781,11 @@ void AsmPrinter::EmitAlignment(unsigned NumBits, const GlobalValue *GV, if (TAI->getAlignmentIsInBytes()) NumBits = 1 << NumBits; O << TAI->getAlignDirective() << NumBits; - unsigned FillValue = TAI->getTextAlignFillValue(); - UseFillExpr &= IsInTextSection && FillValue; - if (UseFillExpr) { - O << ','; - PrintHex(FillValue); - } + if (CurrentSection && CurrentSection->getKind().isText()) + if (unsigned FillValue = TAI->getTextAlignFillValue()) { + O << ','; + PrintHex(FillValue); + } O << '\n'; } diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 3cb273fd582..be481bdc271 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -1463,7 +1463,7 @@ void DwarfDebug::EndFunction(MachineFunction *MF) { // Get function line info. if (!Lines.empty()) { // Get section line info. - unsigned ID = SectionMap.insert(Asm->CurrentSection_); + unsigned ID = SectionMap.insert(Asm->getCurrentSection()); if (SectionSourceLines.size() < ID) SectionSourceLines.resize(ID); std::vector &SectionLineInfos = SectionSourceLines[ID-1]; // Append the function info to section info. -- 2.34.1