[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