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:
parent
bb781a2974
commit
7c98197368
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user