diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-04-07 17:27:50 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-04-07 17:27:50 +0000 |
commit | f34ae32a6bf06f0d80b0bcbbe56d5488781f4f3c (patch) | |
tree | afba95619e0164b6a070a9a559b1ca136864662a /lib/CodeGen/InterferenceCache.cpp | |
parent | 0bd2bd9ecc8abd3c3ed91a51aa8c51aaab401b5d (diff) |
Avoid moving iterators when the previous block was just visited.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129081 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/InterferenceCache.cpp')
-rw-r--r-- | lib/CodeGen/InterferenceCache.cpp | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/lib/CodeGen/InterferenceCache.cpp b/lib/CodeGen/InterferenceCache.cpp index 512b4b3ccc..0aff128c16 100644 --- a/lib/CodeGen/InterferenceCache.cpp +++ b/lib/CodeGen/InterferenceCache.cpp @@ -99,13 +99,15 @@ void InterferenceCache::Entry::update(unsigned MBBNum) { tie(Start, Stop) = Indexes->getMBBRange(MBBNum); // Use advanceTo only when possible. - if (!PrevPos.isValid() || Start < PrevPos) - for (unsigned i = 0, e = Iters.size(); i != e; ++i) - Iters[i].find(Start); - else - for (unsigned i = 0, e = Iters.size(); i != e; ++i) - Iters[i].advanceTo(Start); - PrevPos = Start; + if (PrevPos != Start) { + if (!PrevPos.isValid() || Start < PrevPos) + for (unsigned i = 0, e = Iters.size(); i != e; ++i) + Iters[i].find(Start); + else + for (unsigned i = 0, e = Iters.size(); i != e; ++i) + Iters[i].advanceTo(Start); + PrevPos = Start; + } // Check for first interference. for (unsigned i = 0, e = Iters.size(); i != e; ++i) { @@ -129,11 +131,14 @@ void InterferenceCache::Entry::update(unsigned MBBNum) { if (!I.valid() || I.start() >= Stop) continue; I.advanceTo(Stop); - if (!I.valid() || I.start() >= Stop) + bool Backup = !I.valid() || I.start() >= Stop; + if (Backup) --I; SlotIndex StopI = I.stop(); if (!BI->Last.isValid() || StopI > BI->Last) BI->Last = StopI; + if (Backup) + ++I; } PrevPos = Stop; } |