[llvm-commits] [llvm] r126099 - in /llvm/trunk: include/llvm/MC/MCStreamer.h lib/MC/MCStreamer.cpp

Joerg Sonnenberger joerg at bec.de
Sun Feb 20 17:07:42 PST 2011


Author: joerg
Date: Sun Feb 20 19:07:42 2011
New Revision: 126099

URL: http://llvm.org/viewvc/llvm-project?rev=126099&view=rev
Log:
Use a vector of pairs to implement the section stack, not two
independent vectors.

Modified:
    llvm/trunk/include/llvm/MC/MCStreamer.h
    llvm/trunk/lib/MC/MCStreamer.cpp

Modified: llvm/trunk/include/llvm/MC/MCStreamer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCStreamer.h?rev=126099&r1=126098&r2=126099&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCStreamer.h (original)
+++ llvm/trunk/include/llvm/MC/MCStreamer.h Sun Feb 20 19:07:42 2011
@@ -57,13 +57,10 @@
     MCDwarfFrameInfo *getCurrentFrameInfo();
     void EnsureValidFrame();
 
-    /// CurSectionStack - This is stack of CurSection values saved by
-    /// PushSection.
-    SmallVector<const MCSection *, 4> CurSectionStack;
-
-    /// PrevSectionStack - This is stack of PrevSection values saved by
-    /// PushSection.
-    SmallVector<const MCSection *, 4> PrevSectionStack;
+    /// SectionStack - This is stack of current and previous section
+    /// values saved by PushSection.
+    SmallVector<std::pair<const MCSection *,
+                const MCSection *>, 4> SectionStack;
 
   protected:
     MCStreamer(MCContext &Ctx);
@@ -117,16 +114,16 @@
     /// getCurrentSection - Return the current section that the streamer is
     /// emitting code to.
     const MCSection *getCurrentSection() const {
-      if (!CurSectionStack.empty())
-        return CurSectionStack.back();
+      if (!SectionStack.empty())
+        return SectionStack.back().first;
       return NULL;
     }
 
     /// getPreviousSection - Return the previous section that the streamer is
     /// emitting code to.
     const MCSection *getPreviousSection() const {
-      if (!PrevSectionStack.empty())
-        return PrevSectionStack.back();
+      if (!SectionStack.empty())
+        return SectionStack.back().second;
       return NULL;
     }
 
@@ -139,8 +136,8 @@
     /// pushSection - Save the current and previous section on the
     /// section stack.
     void PushSection() {
-      PrevSectionStack.push_back(getPreviousSection());
-      CurSectionStack.push_back(getCurrentSection());
+      SectionStack.push_back(std::make_pair(getCurrentSection(),
+                                            getPreviousSection()));
     }
 
     /// popSection - Restore the current and previous section from
@@ -148,12 +145,10 @@
     ///
     /// Returns false if the stack was empty.
     bool PopSection() {
-      if (PrevSectionStack.size() <= 1)
+      if (SectionStack.size() <= 1)
         return false;
-      assert(CurSectionStack.size() > 1);
-      PrevSectionStack.pop_back();
-      const MCSection *oldSection = CurSectionStack.pop_back_val();
-      const MCSection *curSection = CurSectionStack.back();
+      const MCSection *oldSection = SectionStack.pop_back_val().first;
+      const MCSection *curSection = SectionStack.back().first;
 
       if (oldSection != curSection)
         ChangeSection(curSection);
@@ -166,10 +161,10 @@
     /// This corresponds to assembler directives like .section, .text, etc.
     void SwitchSection(const MCSection *Section) {
       assert(Section && "Cannot switch to a null section!");
-      const MCSection *curSection = CurSectionStack.back();
-      PrevSectionStack.back() = curSection;
+      const MCSection *curSection = SectionStack.back().first;
+      SectionStack.back().second = curSection;
       if (Section != curSection) {
-        CurSectionStack.back() = Section;
+        SectionStack.back().first = Section;
         ChangeSection(Section);
       }
     }

Modified: llvm/trunk/lib/MC/MCStreamer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCStreamer.cpp?rev=126099&r1=126098&r2=126099&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCStreamer.cpp (original)
+++ llvm/trunk/lib/MC/MCStreamer.cpp Sun Feb 20 19:07:42 2011
@@ -20,8 +20,8 @@
 using namespace llvm;
 
 MCStreamer::MCStreamer(MCContext &Ctx) : Context(Ctx) {
-  PrevSectionStack.push_back(NULL);
-  CurSectionStack.push_back(NULL);
+  const MCSection *section = NULL;
+  SectionStack.push_back(std::make_pair(section, section));
 }
 
 MCStreamer::~MCStreamer() {





More information about the llvm-commits mailing list