diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2010-12-04 22:47:22 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2010-12-04 22:47:22 +0000 |
commit | b4172fa72915bd031383e81c83cd313c8c4b2e74 (patch) | |
tree | ab29ecee0fa84bece18a320dcbaed5825db5d9fe /lib/MC/MCAssembler.cpp | |
parent | db74aeadcd1b9a597ad0f80c0036e67e63ba20ed (diff) |
Once the layout is done we don't need to keep updating which fragments are
valid. Addresses will not change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120921 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCAssembler.cpp')
-rw-r--r-- | lib/MC/MCAssembler.cpp | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/lib/MC/MCAssembler.cpp b/lib/MC/MCAssembler.cpp index 451ad1f4e8..1e701ecf2b 100644 --- a/lib/MC/MCAssembler.cpp +++ b/lib/MC/MCAssembler.cpp @@ -122,10 +122,6 @@ void MCAsmLayout::ReplaceFragment(MCFragment *Src, MCFragment *Dst) { // Set the data fragment's layout data. Dst->setParent(Src->getParent()); Dst->setAtom(Src->getAtom()); - Dst->setLayoutOrder(Src->getLayoutOrder()); - - if (LastValidFragment == Src) - LastValidFragment = Dst; Dst->Offset = Src->Offset; Dst->EffectiveSize = Src->EffectiveSize; @@ -136,15 +132,7 @@ void MCAsmLayout::ReplaceFragment(MCFragment *Src, MCFragment *Dst) { void MCAsmLayout::CoalesceFragments(MCFragment *Src, MCFragment *Dst) { assert(Src->getPrevNode() == Dst); - - if (isFragmentUpToDate(Src)) { - if (LastValidFragment == Src) - LastValidFragment = Dst; - Dst->EffectiveSize += Src->EffectiveSize; - } else { - // We don't know the effective size of Src, so we have to invalidate Dst. - Invalidate(Dst); - } + Dst->EffectiveSize += Src->EffectiveSize; // Remove Src, but don't delete it yet. Src->getParent()->getFragmentList().remove(Src); } @@ -907,6 +895,10 @@ void MCAssembler::FinishLayout(MCAsmLayout &Layout) { // cheap (we will mostly end up eliminating fragments and appending on to data // fragments), so the extra complexity downstream isn't worth it. Evaluate // this assumption. + + // The layout is done. Mark every fragment as valid. + Layout.getFragmentOffset(&*Layout.getSectionOrder().back()->rbegin()); + unsigned FragmentIndex = 0; for (unsigned i = 0, e = Layout.getSectionOrder().size(); i != e; ++i) { MCSectionData &SD = *Layout.getSectionOrder()[i]; |