Move getSubsectionInsertionPoint to MCSection.
authorRafael Espindola <rafael.espindola@gmail.com>
Wed, 27 May 2015 13:37:28 +0000 (13:37 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Wed, 27 May 2015 13:37:28 +0000 (13:37 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238320 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/MC/MCSection.h
lib/MC/MCAssembler.cpp
lib/MC/MCObjectStreamer.cpp
lib/MC/MCSection.cpp

index 2e155bbc325cf0c9972282e9f79de72d5a3b8117..7f9d976b95917376f03ace022c2ee00e54766d9e 100644 (file)
@@ -33,6 +33,7 @@ class raw_ostream;
 
 class MCSectionData {
   friend class MCAsmLayout;
+  friend class MCSection;
 
   MCSectionData(const MCSectionData &) = delete;
   void operator=(const MCSectionData &) = delete;
@@ -96,8 +97,6 @@ public:
 
   bool empty() const;
 
-  iterator getSubsectionInsertionPoint(unsigned Subsection);
-
   void dump();
 
   /// @}
@@ -220,6 +219,8 @@ public:
     return const_cast<MCSection *>(this)->rend();
   }
 
+  MCSectionData::iterator getSubsectionInsertionPoint(unsigned Subsection);
+
   virtual void PrintSwitchToSection(const MCAsmInfo &MAI, raw_ostream &OS,
                                     const MCExpr *Subsection) const = 0;
 
index 187fd1fd5476b11a2a8bc986193ce1c45d9c86d0..ec2518c77ddbbfa4d6ae7412d16599a83eac00a6 100644 (file)
@@ -290,37 +290,6 @@ MCEncodedFragmentWithFixups::~MCEncodedFragmentWithFixups() {
 
 MCSectionData::MCSectionData(MCSection &Section) : Section(&Section) {}
 
-MCSectionData::iterator
-MCSectionData::getSubsectionInsertionPoint(unsigned Subsection) {
-  if (Subsection == 0 && SubsectionFragmentMap.empty())
-    return end();
-
-  SmallVectorImpl<std::pair<unsigned, MCFragment *> >::iterator MI =
-    std::lower_bound(SubsectionFragmentMap.begin(), SubsectionFragmentMap.end(),
-                     std::make_pair(Subsection, (MCFragment *)nullptr));
-  bool ExactMatch = false;
-  if (MI != SubsectionFragmentMap.end()) {
-    ExactMatch = MI->first == Subsection;
-    if (ExactMatch)
-      ++MI;
-  }
-  iterator IP;
-  if (MI == SubsectionFragmentMap.end())
-    IP = end();
-  else
-    IP = MI->second;
-  if (!ExactMatch && Subsection != 0) {
-    // The GNU as documentation claims that subsections have an alignment of 4,
-    // although this appears not to be the case.
-    MCFragment *F = new MCDataFragment();
-    SubsectionFragmentMap.insert(MI, std::make_pair(Subsection, F));
-    getFragmentList().insert(IP, F);
-    F->setParent(&getSection());
-  }
-
-  return IP;
-}
-
 /* *** */
 
 MCAssembler::MCAssembler(MCContext &Context_, MCAsmBackend &Backend_,
index c1b20717db3a96ae0a2b5e26b03fbe375777e1c3..18d2b66b2ae3018be3d3fc8f3324dfe35893de12 100644 (file)
@@ -221,8 +221,7 @@ bool MCObjectStreamer::changeSectionImpl(MCSection *Section,
   if (IntSubsection < 0 || IntSubsection > 8192)
     report_fatal_error("Subsection number out of range");
   CurInsertionPoint =
-      CurSectionData->getSectionData().getSubsectionInsertionPoint(
-          unsigned(IntSubsection));
+      CurSectionData->getSubsectionInsertionPoint(unsigned(IntSubsection));
   return Created;
 }
 
index fca747486417016d9d95d80606744466591dac6f..91df312689c1e140c62f687de48c0541fabe172c 100644 (file)
@@ -52,6 +52,38 @@ void MCSection::setBundleLockState(BundleLockStateType NewState) {
   ++BundleLockNestingDepth;
 }
 
+MCSectionData::iterator
+MCSection::getSubsectionInsertionPoint(unsigned Subsection) {
+  if (Subsection == 0 && Data.SubsectionFragmentMap.empty())
+    return end();
+
+  SmallVectorImpl<std::pair<unsigned, MCFragment *>>::iterator MI =
+      std::lower_bound(Data.SubsectionFragmentMap.begin(),
+                       Data.SubsectionFragmentMap.end(),
+                       std::make_pair(Subsection, (MCFragment *)nullptr));
+  bool ExactMatch = false;
+  if (MI != Data.SubsectionFragmentMap.end()) {
+    ExactMatch = MI->first == Subsection;
+    if (ExactMatch)
+      ++MI;
+  }
+  MCSectionData::iterator IP;
+  if (MI == Data.SubsectionFragmentMap.end())
+    IP = end();
+  else
+    IP = MI->second;
+  if (!ExactMatch && Subsection != 0) {
+    // The GNU as documentation claims that subsections have an alignment of 4,
+    // although this appears not to be the case.
+    MCFragment *F = new MCDataFragment();
+    Data.SubsectionFragmentMap.insert(MI, std::make_pair(Subsection, F));
+    getFragmentList().insert(IP, F);
+    F->setParent(this);
+  }
+
+  return IP;
+}
+
 MCSectionData::iterator MCSection::begin() { return Data.begin(); }
 
 MCSectionData::iterator MCSection::end() { return Data.end(); }