]> granicus.if.org Git - clang/commitdiff
Revert r205436:
authorRoman Divacky <rdivacky@freebsd.org>
Thu, 3 Apr 2014 18:04:52 +0000 (18:04 +0000)
committerRoman Divacky <rdivacky@freebsd.org>
Thu, 3 Apr 2014 18:04:52 +0000 (18:04 +0000)
        Extend the SSE2 comment lexing to AVX2. Only 16byte align when not on AVX2.

        This provides some 3% speedup when preprocessing gcc.c as a single file.

The patch is wrong, it always uses SSE2, and when I fix that there's no speedup
at all. I am not sure where the 3% came from previously.

--Thi lie, and those below, will be ignored--

M    Lex/Lexer.cpp

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@205548 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Lex/Lexer.cpp

index 86d01d6cc86245a9142afdc1e2576003e109eb9c..0955cc5b3355f239ff3926fae8bf5b6c428946af 100644 (file)
@@ -2251,8 +2251,6 @@ static bool isEndOfBlockCommentWithEscapedNewLine(const char *CurPtr,
 
 #ifdef __SSE2__
 #include <emmintrin.h>
-#elif __AVX2__
-#include <avx2intrin.h>
 #elif __ALTIVEC__
 #include <altivec.h>
 #undef bool
@@ -2308,33 +2306,17 @@ bool Lexer::SkipBlockComment(Token &Result, const char *CurPtr,
         // If there is a code-completion point avoid the fast scan because it
         // doesn't check for '\0'.
         !(PP && PP->getCodeCompletionFileLoc() == FileLoc)) {
-#ifndef __AVX2__
       // While not aligned to a 16-byte boundary.
       while (C != '/' && ((intptr_t)CurPtr & 0x0F) != 0)
         C = *CurPtr++;
-#endif
 
       if (C == '/') goto FoundSlash;
 
 #ifdef __SSE2__
-#define VECTOR_TYPE             __m128i
-#define SET1_EPI8(v)            _mm_set1_epi8(v)
-#define CMPEQ_EPI8(v1,v2)       _mm_cmpeq_epi8(v1,v2)
-#define MOVEMASK_EPI8(v)        _mm_movemask_epi8(v)
-#define STEP                    16
-#elif __AVX2__
-#define VECTOR_TYPE             __m256i
-#define SET1_EPI8(v)            _mm256_set1_epi8(v)
-#define CMPEQ_EPI8(v1,v2)       _mm256_cmpeq_epi8(v1,v2)
-#define MOVEMASK_EPI8(v)        _mm256_movemask_epi8(v)
-#define STEP                    32
-#endif
-
-#if defined(__SSE2__) || defined(__AVX2__)
-      VECTOR_TYPE Slashes = SET1_EPI8('/');
-      while (CurPtr+STEP <= BufferEnd) {
-        int cmp = MOVEMASK_EPI8(CMPEQ_EPI8(*(const VECTOR_TYPE*)CurPtr,
-                                Slashes));
+      __m128i Slashes = _mm_set1_epi8('/');
+      while (CurPtr+16 <= BufferEnd) {
+        int cmp = _mm_movemask_epi8(_mm_cmpeq_epi8(*(const __m128i*)CurPtr,
+                                    Slashes));
         if (cmp != 0) {
           // Adjust the pointer to point directly after the first slash. It's
           // not necessary to set C here, it will be overwritten at the end of
@@ -2342,13 +2324,8 @@ bool Lexer::SkipBlockComment(Token &Result, const char *CurPtr,
           CurPtr += llvm::countTrailingZeros<unsigned>(cmp) + 1;
           goto FoundSlash;
         }
-        CurPtr += STEP;
+        CurPtr += 16;
       }
-#undef VECTOR_TYPE
-#undef SET1_EPI8
-#undef CMPEQ_EPI8
-#undef MOVEMASK_EPI8
-#undef STEP
 #elif __ALTIVEC__
       __vector unsigned char Slashes = {
         '/', '/', '/', '/',  '/', '/', '/', '/',