1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 11:42:57 +01:00

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.

llvm-svn: 68396
This commit is contained in:
Daniel Dunbar 2009-04-03 18:43:17 +00:00
parent bb781a2974
commit 7c98197368

View File

@ -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;
}