Cleanups.
authorDavid Greene <greened@obbligato.org>
Fri, 20 Nov 2009 21:13:27 +0000 (21:13 +0000)
committerDavid Greene <greened@obbligato.org>
Fri, 20 Nov 2009 21:13:27 +0000 (21:13 +0000)
Make things a little more efficient as suggested by Evan.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89489 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/RegAllocLinearScan.cpp

index 708ecbe84afadccc98339fc618fead38ae7b83ef..4ff512932f8e04c27e303ca115ae3e928516b89b 100644 (file)
@@ -87,6 +87,7 @@ namespace {
       // Initialize the queue to record recently-used registers.
       if (NumRecentlyUsedRegs > 0)
         RecentRegs.resize(NumRecentlyUsedRegs, 0);
+      RecentNext = RecentRegs.begin();
     }
 
     typedef std::pair<LiveInterval*, LiveInterval::iterator> IntervalPtr;
@@ -154,14 +155,16 @@ namespace {
     std::auto_ptr<Spiller> spiller_;
 
     // The queue of recently-used registers.
-    SmallVector<unsigned, 3> RecentRegs;
+    SmallVector<unsigned, 4> RecentRegs;
+    SmallVector<unsigned, 4>::iterator RecentNext;
 
     // Record that we just picked this register.
     void recordRecentlyUsed(unsigned reg) {
       assert(reg != 0 && "Recently used register is NOREG!");
       if (!RecentRegs.empty()) {
-        std::copy(RecentRegs.begin() + 1, RecentRegs.end(), RecentRegs.begin());
-        RecentRegs.back() = reg;
+        *RecentNext++ = reg;
+        if (RecentNext == RecentRegs.end())
+          RecentNext = RecentRegs.begin();
       }
     }