From 1736df6ae099e5d6a5e8b40c50d42012fd4b36b5 Mon Sep 17 00:00:00 2001 From: Alp Toker Date: Fri, 11 Jul 2014 18:23:08 +0000 Subject: [PATCH] Simplify the raw_svector_ostream tweak from r212816 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 | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/lib/Support/raw_ostream.cpp b/lib/Support/raw_ostream.cpp index b8a1537ae8a..d156826144a 100644 --- a/lib/Support/raw_ostream.cpp +++ b/lib/Support/raw_ostream.cpp @@ -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()); } -- 2.49.0