[clang] [Clang] [Lexer] Detect SSE4.2 availability at runtime in fastParseASCIIIdentifier (PR #171914)
Corentin Jabot via cfe-commits
cfe-commits at lists.llvm.org
Sun Dec 14 04:05:54 PST 2025
================
@@ -1943,12 +1954,31 @@ fastParseASCIIIdentifier(const char *CurPtr,
continue;
return CurPtr;
}
+
+ return fastParseASCIIIdentifierScalar(CurPtr, BufferEnd);
+}
+
+static bool supportsSSE42() {
+ static bool SupportsSSE42 = __builtin_cpu_supports("sse4.2");
+ return SupportsSSE42;
+}
+
#endif
- unsigned char C = *CurPtr;
- while (isAsciiIdentifierContinue(C))
- C = *++CurPtr;
- return CurPtr;
+static const char *fastParseASCIIIdentifier(const char *CurPtr,
+ const char *BufferEnd) {
+#if !defined(__i386__) && !defined(__x86_64__) || defined(_WIN32)
+ return fastParseASCIIIdentifierScalar(CurPtr, BufferEnd);
+#else
+
+#ifndef __SSE4_2__
+ if (LLVM_UNLIKELY(!supportsSSE42()))
+ return fastParseASCIIIdentifierScalar(CurPtr, BufferEnd);
+#endif
+
+ return fastParseASCIIIdentifierSSE42(CurPtr, BufferEnd);
----------------
cor3ntin wrote:
Maybe something like that? It's borderline too clever, but with a comment it's probably fine
```cpp
#if defined(__has_attribute) && __has_attribute(target)
__attribute__((target("sse4.2")))
static const char *fastParseASCIIIdentifier(const char *CurPtr, const char *BufferEnd) {}
__attribute__((target("default")))
#endif
static const char *fastParseASCIIIdentifier(const char *CurPtr, const char *BufferEnd) {}
https://github.com/llvm/llvm-project/pull/171914
More information about the cfe-commits
mailing list