[llvm-commits] [test-suite] r91224 - /test-suite/trunk/SingleSource/Benchmarks/Misc/lowercase.c

Evan Cheng evan.cheng at apple.com
Sat Dec 12 12:31:31 PST 2009


Author: evancheng
Date: Sat Dec 12 14:31:30 2009
New Revision: 91224

URL: http://llvm.org/viewvc/llvm-project?rev=91224&view=rev
Log:
Add a test llvm is doing very poorly on.

Added:
    test-suite/trunk/SingleSource/Benchmarks/Misc/lowercase.c

Added: test-suite/trunk/SingleSource/Benchmarks/Misc/lowercase.c
URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/SingleSource/Benchmarks/Misc/lowercase.c?rev=91224&view=auto

==============================================================================
--- test-suite/trunk/SingleSource/Benchmarks/Misc/lowercase.c (added)
+++ test-suite/trunk/SingleSource/Benchmarks/Misc/lowercase.c Sat Dec 12 14:31:30 2009
@@ -0,0 +1,53 @@
+#include <stdio.h>
+#include <string.h>
+#include <xmmintrin.h>
+
+typedef unsigned short UChar;
+
+static inline UChar toASCIILower(UChar c) { return c | ((c >= 'A' && c <= 'Z') << 5); }
+
+static size_t lower_StringImp(const UChar* data, size_t m_length, UChar* output) __attribute__((__noinline__));
+static size_t lower_StringImpl(const UChar* __restrict data, size_t length, UChar* __restrict output)
+{
+  // Do a faster loop for the case where all the characters are ASCII.
+  UChar ored = 0;
+  size_t i;
+  for (i = 0; i < length; i++) {
+    UChar c = data[i];
+    ored |= c;
+    output[i] = toASCIILower(c);
+  }
+  if (!(ored & ~0x7F))
+    return 1;
+
+  return 0;
+}
+
+static UChar staticData[]  = {'H', 'E', 'L', 'L', 'O', ' ', 'W', 'O', 'R', 'L', 'D', '!', 'H', 'E', 'L', 'L'};
+static const size_t staticDataLength = sizeof(staticData) / sizeof(staticData[0]);
+
+static void doTest(size_t numberOfIterations)
+{
+  const size_t numberOfCharacters = numberOfIterations;
+  const size_t testDataLength = (numberOfCharacters + staticDataLength) / staticDataLength;
+  UChar* testData = malloc(sizeof(UChar) * testDataLength);
+  size_t i;
+  for (i = 0; i < testDataLength; i += staticDataLength)
+    memcpy(testData + i, staticData, staticDataLength * sizeof(staticData[0]));
+
+  UChar* result = malloc(sizeof(UChar) * testDataLength);
+  printf("iterations (%ld characters)\n", numberOfIterations, numberOfCharacters);
+
+  memset(result, 0, sizeof(UChar) * testDataLength);
+  for (i = 0; i < 10000000; i++)
+    lower_StringImpl(testData, numberOfCharacters, result);
+}
+
+int main(int argc, char **argv)
+{
+  size_t i;
+  for (i = 0; i < 32; i++)
+    doTest(i);
+
+  return 0;
+}





More information about the llvm-commits mailing list