[clang] Fix/172104 clang cl simd intrinsics (PR #172116)

Priyanshu Singh via cfe-commits cfe-commits at lists.llvm.org
Sun Dec 14 11:23:44 PST 2025


https://github.com/dev-priyanshu15 updated https://github.com/llvm/llvm-project/pull/172116

>From c688d6408e159149abd067ed3fcf963c95f3d387 Mon Sep 17 00:00:00 2001
From: spriyanshucoder <s.priyanshu.coder at gmail.com>
Date: Mon, 15 Dec 2025 00:51:57 +0530
Subject: [PATCH] [clang] Enable SSE4.1 intrinsics for Windows MSVC targets -
 Issue #172104

---
 clang/lib/Basic/Targets/X86.cpp             |  8 ++++++++
 clang/test/CodeGen/x86-sse41-windows-msvc.c | 18 ++++++++++++++++++
 2 files changed, 26 insertions(+)
 create mode 100644 clang/test/CodeGen/x86-sse41-windows-msvc.c

diff --git a/clang/lib/Basic/Targets/X86.cpp b/clang/lib/Basic/Targets/X86.cpp
index f00d435937b92..157ddd8aca8ad 100644
--- a/clang/lib/Basic/Targets/X86.cpp
+++ b/clang/lib/Basic/Targets/X86.cpp
@@ -157,6 +157,14 @@ bool X86TargetInfo::initFeatureMap(
   if (getTriple().getArch() == llvm::Triple::x86_64)
     setFeatureEnabled(Features, "sse2", true);
 
+  // Enable SSE4.1 for Windows MSVC targets to support SIMD intrinsics like
+  // _mm_mullo_epi32 without requiring explicit /arch: flags.
+  if ((getTriple().getArch() == llvm::Triple::x86_64 ||
+       getTriple().getArch() == llvm::Triple::x86) &&
+      getTriple().isWindowsMSVCEnvironment()) {
+    setFeatureEnabled(Features, "sse4.1", true);
+  }
+
   using namespace llvm::X86;
 
   SmallVector<StringRef, 16> CPUFeatures;
diff --git a/clang/test/CodeGen/x86-sse41-windows-msvc.c b/clang/test/CodeGen/x86-sse41-windows-msvc.c
new file mode 100644
index 0000000000000..e9821c2f7eea9
--- /dev/null
+++ b/clang/test/CodeGen/x86-sse41-windows-msvc.c
@@ -0,0 +1,18 @@
+// RUN: %clang_cc1 -triple x86_64-pc-windows-msvc -emit-llvm %s -o - | FileCheck %s
+// RUN: %clang_cc1 -triple i386-pc-windows-msvc -emit-llvm %s -o - | FileCheck %s
+// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=LINUX
+// RUN: %clang_cc1 -triple i386-unknown-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=LINUX
+
+// This test verifies that SSE4.1 is enabled by default for Windows MSVC targets
+// to support SIMD intrinsics like _mm_mullo_epi32
+
+#include <immintrin.h>
+
+__m128i test_sse41(void) {
+  __m128i a = _mm_set1_epi32(5);
+  __m128i b = _mm_set1_epi32(3);
+  return _mm_mullo_epi32(a, b);
+}
+
+// CHECK: "target-features"="+sse4.1"
+// LINUX-NOT: "target-features"="+sse4.1"



More information about the cfe-commits mailing list