]> granicus.if.org Git - clang/commitdiff
In OutputString, avoid calling memcpy for really tiny strings.
authorChris Lattner <sabre@nondot.org>
Mon, 23 Jul 2007 06:23:07 +0000 (06:23 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 23 Jul 2007 06:23:07 +0000 (06:23 +0000)
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

Driver/PrintPreprocessedOutput.cpp

index d1f1cef9855fdbbc156c967b53f7c38abc04369b..e5f449185afa99decad23062c68cc1e6b00f8620 100644 (file)
@@ -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
 }