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 <[email protected]> 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" _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
