From 774d9c90a609ea97015ba65338abe2534adfbd4a Mon Sep 17 00:00:00 2001 From: Adam Glass Date: Sat, 14 Jun 2025 20:53:45 -0700 Subject: [PATCH 1/2] Only reference _fltused for floating point, not vectors of floating point --- llvm/lib/Target/X86/X86AsmPrinter.cpp | 4 ++-- llvm/test/CodeGen/X86/fltused_vec.ll | 32 +++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 llvm/test/CodeGen/X86/fltused_vec.ll diff --git a/llvm/lib/Target/X86/X86AsmPrinter.cpp b/llvm/lib/Target/X86/X86AsmPrinter.cpp index c7238839c26b5..57a1bebb562ed 100644 --- a/llvm/lib/Target/X86/X86AsmPrinter.cpp +++ b/llvm/lib/Target/X86/X86AsmPrinter.cpp @@ -1002,11 +1002,11 @@ static bool usesMSVCFloatingPoint(const Triple &TT, const Module &M) { for (const Function &F : M) { for (const Instruction &I : instructions(F)) { - if (I.getType()->isFPOrFPVectorTy()) + if (I.getType()->isFloatingPointTy()) return true; for (const auto &Op : I.operands()) { - if (Op->getType()->isFPOrFPVectorTy()) + if (Op->getType()->isFloatingPointTy()) return true; } } diff --git a/llvm/test/CodeGen/X86/fltused_vec.ll b/llvm/test/CodeGen/X86/fltused_vec.ll new file mode 100644 index 0000000000000..312f71203dde8 --- /dev/null +++ b/llvm/test/CodeGen/X86/fltused_vec.ll @@ -0,0 +1,32 @@ +; The purpose of this test to verify that the fltused symbol is +; not emitted when purely vector floating point operations are used on Windows. + +; RUN: llc < %s -mtriple i686-pc-win32 | FileCheck %s --check-prefix WIN32 +; RUN: llc < %s -mtriple x86_64-pc-win32 | FileCheck %s --check-prefix WIN64 +; RUN: llc < %s -O0 -mtriple i686-pc-win32 | FileCheck %s --check-prefix WIN32 +; RUN: llc < %s -O0 -mtriple x86_64-pc-win32 | FileCheck %s --check-prefix WIN64 + +@foo = external dso_local global [4 x float], align 16 + +; Function Attrs: noinline nounwind optnone sspstrong uwtable +define dso_local <4 x float> @func() #0 { +entry: + %__p.addr.i = alloca ptr, align 8 + %vector1 = alloca <4 x float>, align 16 + store ptr @foo, ptr %__p.addr.i, align 8 + %0 = load ptr, ptr %__p.addr.i, align 8 + %1 = load <4 x float>, ptr %0, align 16 + store <4 x float> %1, ptr %vector1, align 16 + %2 = load <4 x float>, ptr %vector1, align 16 + ret <4 x float> %2 +} + +define <4 x float> @mul_vectors(<4 x float> %a, <4 x float> %b) { +entry: + %result = fmul <4 x float> %a, %b + ret <4 x float> %result +} + +; _fltused is determined at a module level +; WIN32-NOT: .globl __fltused +; WIN64-NOT: .globl _fltused From d6c67662c5de8aa3013648794386116f374cbafe Mon Sep 17 00:00:00 2001 From: Adam Glass Date: Thu, 3 Jul 2025 13:00:04 -0700 Subject: [PATCH 2/2] address test feedback --- llvm/test/CodeGen/X86/fltused_vec.ll | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/llvm/test/CodeGen/X86/fltused_vec.ll b/llvm/test/CodeGen/X86/fltused_vec.ll index 312f71203dde8..6e63e2e7ff891 100644 --- a/llvm/test/CodeGen/X86/fltused_vec.ll +++ b/llvm/test/CodeGen/X86/fltused_vec.ll @@ -1,10 +1,8 @@ ; The purpose of this test to verify that the fltused symbol is ; not emitted when purely vector floating point operations are used on Windows. -; RUN: llc < %s -mtriple i686-pc-win32 | FileCheck %s --check-prefix WIN32 -; RUN: llc < %s -mtriple x86_64-pc-win32 | FileCheck %s --check-prefix WIN64 -; RUN: llc < %s -O0 -mtriple i686-pc-win32 | FileCheck %s --check-prefix WIN32 -; RUN: llc < %s -O0 -mtriple x86_64-pc-win32 | FileCheck %s --check-prefix WIN64 +; RUN: llc < %s -mtriple i686-pc-win32 | FileCheck %s +; RUN: llc < %s -mtriple x86_64-pc-win32 | FileCheck %s @foo = external dso_local global [4 x float], align 16 @@ -28,5 +26,4 @@ entry: } ; _fltused is determined at a module level -; WIN32-NOT: .globl __fltused -; WIN64-NOT: .globl _fltused +; CHECK-NOT: .globl {{_?}}_fltused