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