OSDN Git Service

if we have two elements, insert both, don't use std::sort.
authorChris Lattner <sabre@nondot.org>
Tue, 9 Dec 2008 07:05:45 +0000 (07:05 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 9 Dec 2008 07:05:45 +0000 (07:05 +0000)
This speeds up the new GVN by another 3%

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

lib/Analysis/MemoryDependenceAnalysis.cpp

index 3a4fed6..6a63b7c 100644 (file)
@@ -621,16 +621,29 @@ getNonLocalPointerDepInternal(Value *Pointer, uint64_t PointeeSize,
   }
   
   // If we computed new values, re-sort Cache.
-  if (NumSortedEntries == Cache->size()) {
+  switch (Cache->size()-NumSortedEntries) {
+  case 0:
     // done, no new entries.
-  } else if (NumSortedEntries+1 == Cache->size()) {
+    break;
+  case 2: {
+    // Two new entries, insert the last one into place.
+    NonLocalDepEntry Val = Cache->back();
+    Cache->pop_back();
+    NonLocalDepInfo::iterator Entry =
+    std::upper_bound(Cache->begin(), Cache->end()-1, Val);
+    Cache->insert(Entry, Val);
+    // FALL THROUGH.
+  }
+  case 1: {
     // One new entry, Just insert the new value at the appropriate position.
     NonLocalDepEntry Val = Cache->back();
     Cache->pop_back();
     NonLocalDepInfo::iterator Entry =
       std::upper_bound(Cache->begin(), Cache->end(), Val);
     Cache->insert(Entry, Val);
-  } else {
+    break;
+  }
+  default:
     // Added many values, do a full scale sort.
     std::sort(Cache->begin(), Cache->end());
   }