From: Daniel Dunbar Date: Fri, 3 Apr 2009 18:43:17 +0000 (+0000) Subject: Add fast path for raw_ostream output of strings. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=38f4dd7b5e333aee8f89cee85d1c79378fee0ffc;p=oota-llvm.git Add fast path for raw_ostream output of strings. - Particularly nice for small constant strings, which get optimized down nicely. On a synthetic benchmark writing out "hello" in a loop, this is about 2x faster with gcc and 3x faster with llvm-gcc. llc on insn-attrtab.bc from 403.gcc is about .5% faster. - I tried for a fancier solution which wouldn't increase code size as much (by trying to match constant arrays), but can't quite make it fly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68396 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Support/raw_ostream.h b/include/llvm/Support/raw_ostream.h index 3de31d66769..96adc465a7b 100644 --- a/include/llvm/Support/raw_ostream.h +++ b/include/llvm/Support/raw_ostream.h @@ -119,7 +119,17 @@ public: } raw_ostream &operator<<(const char *Str) { - write(Str, strlen(Str)); + // Inline fast path, particulary for constant strings where a + // sufficiently smart compiler will simplify strlen. + + unsigned Size = strlen(Str); + + // Make sure we can use the fast path. + if (OutBufCur+Size > OutBufEnd) + return write(Str, Size); + + memcpy(OutBufCur, Str, Size); + OutBufCur += Size; return *this; }