aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-07-23 06:23:07 +0000
committerChris Lattner <sabre@nondot.org>2007-07-23 06:23:07 +0000
commite225e378c67204ac3bf1483ec1136f461bf0282a (patch)
tree76043ce47981fc9ecffa9ee5e8c78894824f8215
parent2933f41ed59a8bf1866292cb82e16c8b10dc6651 (diff)
In OutputString, avoid calling memcpy for really tiny strings.
This speeds up -E on 447.dealII by 5.8% git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@40423 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--Driver/PrintPreprocessedOutput.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/Driver/PrintPreprocessedOutput.cpp b/Driver/PrintPreprocessedOutput.cpp
index d1f1cef985..e5f449185a 100644
--- a/Driver/PrintPreprocessedOutput.cpp
+++ b/Driver/PrintPreprocessedOutput.cpp
@@ -87,7 +87,20 @@ static void OutputString(const char *Ptr, unsigned Size) {
#else
if (OutBufCur+Size >= OutBufEnd)
FlushBuffer();
- memcpy(OutBufCur, Ptr, Size);
+
+ switch (Size) {
+ default:
+ memcpy(OutBufCur, Ptr, Size);
+ break;
+ case 3:
+ OutBufCur[2] = Ptr[2];
+ case 2:
+ OutBufCur[1] = Ptr[1];
+ case 1:
+ OutBufCur[0] = Ptr[0];
+ case 0:
+ break;
+ }
OutBufCur += Size;
#endif
}