Simplify the raw_svector_ostream tweak from r212816
authorAlp Toker <alp@nuanti.com>
Fri, 11 Jul 2014 18:23:08 +0000 (18:23 +0000)
committerAlp Toker <alp@nuanti.com>
Fri, 11 Jul 2014 18:23:08 +0000 (18:23 +0000)
The memcpy() and overlap helps didn't help much with timings, so clean up the change.

The difference at this point is that we now leave growth of the storage buffer
up to SmallVector's implementation:

 -   OS.reserve(OS.capacity() * 2);
 +   OS.reserve(OS.size() + 64);

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

lib/Support/raw_ostream.cpp

index b8a1537ae8ad2b9ad2080d0414ac2cf691850acc..d156826144a9d85c5e6f8209410f3b4f1b28a31c 100644 (file)
@@ -729,26 +729,17 @@ void raw_svector_ostream::resync() {
 }
 
 void raw_svector_ostream::write_impl(const char *Ptr, size_t Size) {
-  size_t NewSize = OS.size() + Size;
-  size_t NewReservation = NewSize + 64;
-
-  bool NoOverlap = Ptr + Size < OS.begin() || Ptr > OS.begin() + OS.capacity();
-
-  if (NoOverlap) {
-    assert(!GetNumBytesInBuffer());
-    OS.reserve(NewReservation);
-    memcpy(OS.end(), Ptr, Size);
-    OS.set_size(NewSize);
-  } else if (Ptr == OS.end()) {
+  if (Ptr == OS.end()) {
     // Grow the buffer to include the scratch area without copying.
+    size_t NewSize = OS.size() + Size;
     assert(NewSize <= OS.capacity() && "Invalid write_impl() call!");
     OS.set_size(NewSize);
-    OS.reserve(NewReservation);
   } else {
+    assert(!GetNumBytesInBuffer());
     OS.append(Ptr, Ptr + Size);
-    OS.reserve(NewReservation);
   }
 
+  OS.reserve(OS.size() + 64);
   SetBuffer(OS.end(), OS.capacity() - OS.size());
 }