summaryrefslogtreecommitdiff
path: root/lib/MC/MCAssembler.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2010-12-04 22:47:22 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2010-12-04 22:47:22 +0000
commitb4172fa72915bd031383e81c83cd313c8c4b2e74 (patch)
treeab29ecee0fa84bece18a320dcbaed5825db5d9fe /lib/MC/MCAssembler.cpp
parentdb74aeadcd1b9a597ad0f80c0036e67e63ba20ed (diff)
downloadllvm-b4172fa72915bd031383e81c83cd313c8c4b2e74.tar.gz
llvm-b4172fa72915bd031383e81c83cd313c8c4b2e74.tar.bz2
llvm-b4172fa72915bd031383e81c83cd313c8c4b2e74.tar.xz
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.cpp18
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];