r205548 - Revert r205436:

Richard Smith richard at metafoo.co.uk
Thu Apr 3 11:35:52 PDT 2014


On Thu, Apr 3, 2014 at 11:04 AM, Roman Divacky <rdivacky at freebsd.org> wrote:

> Author: rdivacky
> Date: Thu Apr  3 13:04:52 2014
> New Revision: 205548
>
> URL: http://llvm.org/viewvc/llvm-project?rev=205548&view=rev
> Log:
> Revert r205436:
>
>         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
>
> Modified:
>     cfe/trunk/lib/Lex/Lexer.cpp
>
> Modified: cfe/trunk/lib/Lex/Lexer.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/Lexer.cpp?rev=205548&r1=205547&r2=205548&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Lex/Lexer.cpp (original)
> +++ cfe/trunk/lib/Lex/Lexer.cpp Thu Apr  3 13:04:52 2014
> @@ -2251,8 +2251,6 @@ static bool isEndOfBlockCommentWithEscap
>
>  #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 &Resu
>          // 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
>

Many comments are short; perhaps the speedup came from using vector ops for
short misaligned comments?

       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 &Resu
>            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 = {
>          '/', '/', '/', '/',  '/', '/', '/', '/',
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140403/044716a3/attachment.html>


More information about the cfe-commits mailing list