On Thu, Apr 3, 2014 at 11:04 AM, Roman Divacky <[email protected]> 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 > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
