From: Jakob Stoklund Olesen Date: Thu, 7 Apr 2011 17:27:50 +0000 (+0000) Subject: Avoid moving iterators when the previous block was just visited. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=f34ae32a6bf06f0d80b0bcbbe56d5488781f4f3c;p=oota-llvm.git 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 --- diff --git a/lib/CodeGen/InterferenceCache.cpp b/lib/CodeGen/InterferenceCache.cpp index 512b4b3ccc1..0aff128c16d 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; }