diff --git a/llvm/lib/MC/MCAssembler.cpp b/llvm/lib/MC/MCAssembler.cpp
index 38994e7..57214af 100644
--- a/llvm/lib/MC/MCAssembler.cpp
+++ b/llvm/lib/MC/MCAssembler.cpp
@@ -87,19 +87,11 @@
   return F->EffectiveSize;
 }
 
-void MCAsmLayout::setFragmentEffectiveSize(MCFragment *F, uint64_t Value) {
-  F->EffectiveSize = Value;
-}
-
 uint64_t MCAsmLayout::getFragmentOffset(const MCFragment *F) const {
   assert(F->Offset != ~UINT64_C(0) && "Address not set!");
   return F->Offset;
 }
 
-void MCAsmLayout::setFragmentOffset(MCFragment *F, uint64_t Value) {
-  F->Offset = Value;
-}
-
 uint64_t MCAsmLayout::getSymbolAddress(const MCSymbolData *SD) const {
   assert(SD->getFragment() && "Invalid getAddress() on undefined symbol!");
   return getFragmentAddress(SD->getFragment()) + SD->getOffset();
@@ -110,12 +102,8 @@
   return SD->Address;
 }
 
-void MCAsmLayout::setSectionAddress(MCSectionData *SD, uint64_t Value) {
-  SD->Address = Value;
-}
-
 uint64_t MCAsmLayout::getSectionAddressSize(const MCSectionData *SD) const {
-  // Otherwise, the size is the last fragment's end offset.
+  // The size is the last fragment's end offset.
   const MCFragment &F = SD->getFragmentList().back();
   return getFragmentOffset(&F) + getFragmentEffectiveSize(&F);
 }
@@ -426,8 +414,14 @@
 }
 
 void MCAsmLayout::LayoutFile() {
-  for (unsigned i = 0, e = getSectionOrder().size(); i != e; ++i)
-    LayoutSection(getSectionOrder()[i]);
+  for (unsigned i = 0, e = getSectionOrder().size(); i != e; ++i) {
+    MCSectionData *SD = getSectionOrder()[i];
+
+    LayoutSection(SD);
+    for (MCSectionData::iterator it = SD->begin(),
+           ie = SD->end(); it != ie; ++it)
+      LayoutFragment(it);
+  }
 }
 
 void MCAsmLayout::LayoutFragment(MCFragment *F) {
@@ -443,12 +437,9 @@
   ++stats::FragmentLayouts;
 
   // Compute fragment offset and size.
-  uint64_t Offset = Address - StartAddress;
-  uint64_t EffectiveSize =
-    getAssembler().ComputeFragmentSize(*this, *F, StartAddress, Offset);
-
-  setFragmentOffset(F, Offset);
-  setFragmentEffectiveSize(F, EffectiveSize);
+  F->Offset = Address - StartAddress;
+  F->EffectiveSize = getAssembler().ComputeFragmentSize(*this, *F, StartAddress,
+                                                        F->Offset);
 }
 
 void MCAsmLayout::LayoutSection(MCSectionData *SD) {
@@ -467,10 +458,7 @@
   StartAddress = RoundUpToAlignment(StartAddress, SD->getAlignment());
 
   // Set the section address.
-  setSectionAddress(SD, StartAddress);
-
-  for (MCSectionData::iterator it = SD->begin(), ie = SD->end(); it != ie; ++it)
-    LayoutFragment(it);
+  SD->Address = StartAddress;
 }
 
 /// WriteFragmentData - Write the \arg F data to the output file.
