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);

llvm-svn: 212837
This commit is contained in:
Alp Toker 2014-07-11 18:23:08 +00:00
parent 547864d26a
commit 48bbd061bc
1 changed files with 4 additions and 13 deletions

View 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());
}