[llvm] [Win][X86]Fix issue where _fltused reference is incorrectly issued for vector floating point operations (PR #146792)
Phoebe Wang via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 3 02:33:41 PDT 2025
================
@@ -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
+
+ at 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
----------------
phoebewang wrote:
How about use `CHECK-NOT: .globl {{.*}}_fltused`. We don't need to distiguish 32/64 then.
https://github.com/llvm/llvm-project/pull/146792
More information about the llvm-commits
mailing list