r301487 - Replace HashString algorithm with xxHash64

Rui Ueyama via cfe-commits cfe-commits at lists.llvm.org
Wed Apr 26 15:45:05 PDT 2017


Author: ruiu
Date: Wed Apr 26 17:45:04 2017
New Revision: 301487

URL: http://llvm.org/viewvc/llvm-project?rev=301487&view=rev
Log:
Replace HashString algorithm with xxHash64

The previous algorithm processed one character at a time, which is very
painful on a modern CPU. Replace it with xxHash64, which both already
exists in the codebase and is fairly fast.

Patch from Scott Smith!

Differential Revision: https://reviews.llvm.org/D32509

Modified:
    cfe/trunk/test/CodeGen/target-features-error-2.c
    cfe/trunk/test/CodeGen/target-features-error.c
    cfe/trunk/test/SemaCXX/typo-correction-delayed.cpp
    cfe/trunk/unittests/Tooling/CompilationDatabaseTest.cpp

Modified: cfe/trunk/test/CodeGen/target-features-error-2.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/target-features-error-2.c?rev=301487&r1=301486&r2=301487&view=diff
==============================================================================
--- cfe/trunk/test/CodeGen/target-features-error-2.c (original)
+++ cfe/trunk/test/CodeGen/target-features-error-2.c Wed Apr 26 17:45:04 2017
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -S -verify -o - -D NEED_SSE42
+// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -S -verify -o - -D NEED_SSE41
 // RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -S -verify -o - -D NEED_AVX_1
 // RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -S -verify -o - -D NEED_AVX_2
 // RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -S -verify -o - -D NEED_AVX_3
@@ -7,9 +7,12 @@
 #define __MM_MALLOC_H
 #include <x86intrin.h>
 
-#if NEED_SSE42
+// Really, this needs AVX, but because targetting AVX includes all the SSE features too, and
+// features are sorted by hash function, and we just return the first missing feature, then we end
+// up returning the subfeature sse4.1 instead of avx.
+#if NEED_SSE41
 int baz(__m256i a) {
-  return _mm256_extract_epi32(a, 3); // expected-error {{always_inline function '_mm256_extract_epi32' requires target feature 'sse4.2', but would be inlined into function 'baz' that is compiled without support for 'sse4.2'}}
+  return _mm256_extract_epi32(a, 3); // expected-error {{always_inline function '_mm256_extract_epi32' requires target feature 'sse4.1', but would be inlined into function 'baz' that is compiled without support for 'sse4.1'}}
 }
 #endif
 

Modified: cfe/trunk/test/CodeGen/target-features-error.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/target-features-error.c?rev=301487&r1=301486&r2=301487&view=diff
==============================================================================
--- cfe/trunk/test/CodeGen/target-features-error.c (original)
+++ cfe/trunk/test/CodeGen/target-features-error.c Wed Apr 26 17:45:04 2017
@@ -3,6 +3,5 @@ int __attribute__((target("avx"), always
   return a + 4;
 }
 int bar() {
-  return foo(4); // expected-error {{always_inline function 'foo' requires target feature 'sse4.2', but would be inlined into function 'bar' that is compiled without support for 'sse4.2'}}
+  return foo(4); // expected-error {{always_inline function 'foo' requires target feature 'sse4.1', but would be inlined into function 'bar' that is compiled without support for 'sse4.1'}}
 }
-

Modified: cfe/trunk/test/SemaCXX/typo-correction-delayed.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/typo-correction-delayed.cpp?rev=301487&r1=301486&r2=301487&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/typo-correction-delayed.cpp (original)
+++ cfe/trunk/test/SemaCXX/typo-correction-delayed.cpp Wed Apr 26 17:45:04 2017
@@ -52,6 +52,7 @@ void testNoCandidates() {
 }
 
 class string {};
+
 struct Item {
   void Nest();
   string text();
@@ -88,12 +89,16 @@ void f(LinkedNode *node) {
 struct NestedNode {
   NestedNode* Nest();
   NestedNode* next();
-  string text() const;
+  // Note, this test is dependent on the order in which identifiers are passed
+  // to the typo corrector, which is based on the hash function used.  For
+  // consistency, I am making the next keyword the first identifier returned.
+  string eext() const;
 };
 void f(NestedNode *node) {
   // There are two equidistant, usable corrections for Next: next and Nest
   NestedNode *next = node->Next();  // expected-error-re {{no member named 'Next' in 'initializerCorrections::NestedNode'{{$}}}}
 }
+
 }
 
 namespace PR21669 {

Modified: cfe/trunk/unittests/Tooling/CompilationDatabaseTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Tooling/CompilationDatabaseTest.cpp?rev=301487&r1=301486&r2=301487&view=diff
==============================================================================
--- cfe/trunk/unittests/Tooling/CompilationDatabaseTest.cpp (original)
+++ cfe/trunk/unittests/Tooling/CompilationDatabaseTest.cpp Wed Apr 26 17:45:04 2017
@@ -81,10 +81,10 @@ TEST(JSONCompilationDatabase, GetAllFile
 
   std::vector<std::string> expected_files;
   SmallString<16> PathStorage;
-  llvm::sys::path::native("//net/dir/file1", PathStorage);
-  expected_files.push_back(PathStorage.str());
   llvm::sys::path::native("//net/dir/file2", PathStorage);
   expected_files.push_back(PathStorage.str());
+  llvm::sys::path::native("//net/dir/file1", PathStorage);
+  expected_files.push_back(PathStorage.str());
   EXPECT_EQ(expected_files,
             getAllFiles("[{\"directory\":\"//net/dir\","
                         "\"command\":\"command\","




More information about the cfe-commits mailing list