-
Notifications
You must be signed in to change notification settings - Fork 14.3k
Reland "[X86][BF16] Add libcall for F80 -> BF16 (#109116)" #109143
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This reverts commit ababfee78714313a0cad87591b819f0944b90d09.
@llvm/pr-subscribers-llvm-ir @llvm/pr-subscribers-backend-x86 Author: Phoebe Wang (phoebewang) ChangesThis reverts commit ababfee78714313a0cad87591b819f0944b90d09. Add X86 FP80 check. Full diff: https://github.com/llvm/llvm-project/pull/109143.diff 5 Files Affected:
diff --git a/compiler-rt/lib/builtins/CMakeLists.txt b/compiler-rt/lib/builtins/CMakeLists.txt
index 2c3b0fa84a4782..9a0a50ee7003f1 100644
--- a/compiler-rt/lib/builtins/CMakeLists.txt
+++ b/compiler-rt/lib/builtins/CMakeLists.txt
@@ -192,6 +192,7 @@ set(GENERIC_SOURCES
set(BF16_SOURCES
extendbfsf2.c
truncdfbf2.c
+ truncxfbf2.c
truncsfbf2.c
)
diff --git a/compiler-rt/lib/builtins/truncxfbf2.c b/compiler-rt/lib/builtins/truncxfbf2.c
new file mode 100644
index 00000000000000..aa4108c334eebc
--- /dev/null
+++ b/compiler-rt/lib/builtins/truncxfbf2.c
@@ -0,0 +1,16 @@
+//===-- lib/truncxfbf2.c - long double -> bfloat conversion -------*- C -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#if defined(CRT_HAS_TF_MODE) && __LDBL_MANT_DIG__ == 64 && defined(__x86_64__)
+#define SRC_80
+#define DST_BFLOAT
+#include "fp_trunc_impl.inc"
+
+COMPILER_RT_ABI dst_t __truncxfbf2(long double a) { return __truncXfYf2__(a); }
+
+#endif
diff --git a/llvm/include/llvm/IR/RuntimeLibcalls.def b/llvm/include/llvm/IR/RuntimeLibcalls.def
index c3d5ef9f4e4f82..69cf43140ad4bd 100644
--- a/llvm/include/llvm/IR/RuntimeLibcalls.def
+++ b/llvm/include/llvm/IR/RuntimeLibcalls.def
@@ -367,6 +367,7 @@ HANDLE_LIBCALL(FPROUND_F128_F16, "__trunctfhf2")
HANDLE_LIBCALL(FPROUND_PPCF128_F16, "__trunctfhf2")
HANDLE_LIBCALL(FPROUND_F32_BF16, "__truncsfbf2")
HANDLE_LIBCALL(FPROUND_F64_BF16, "__truncdfbf2")
+HANDLE_LIBCALL(FPROUND_F80_BF16, "__truncxfbf2")
HANDLE_LIBCALL(FPROUND_F64_F32, "__truncdfsf2")
HANDLE_LIBCALL(FPROUND_F80_F32, "__truncxfsf2")
HANDLE_LIBCALL(FPROUND_F128_F32, "__trunctfsf2")
diff --git a/llvm/lib/CodeGen/TargetLoweringBase.cpp b/llvm/lib/CodeGen/TargetLoweringBase.cpp
index eb3190c7cd247a..9fdde454559171 100644
--- a/llvm/lib/CodeGen/TargetLoweringBase.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringBase.cpp
@@ -169,6 +169,8 @@ RTLIB::Libcall RTLIB::getFPROUND(EVT OpVT, EVT RetVT) {
return FPROUND_F32_BF16;
if (OpVT == MVT::f64)
return FPROUND_F64_BF16;
+ if (OpVT == MVT::f80)
+ return FPROUND_F80_BF16;
} else if (RetVT == MVT::f32) {
if (OpVT == MVT::f64)
return FPROUND_F64_F32;
diff --git a/llvm/test/CodeGen/X86/bfloat.ll b/llvm/test/CodeGen/X86/bfloat.ll
index 3759909a2ccc8e..3144fd56d9ccf3 100644
--- a/llvm/test/CodeGen/X86/bfloat.ll
+++ b/llvm/test/CodeGen/X86/bfloat.ll
@@ -1953,3 +1953,25 @@ define void @PR92471(ptr %0, ptr %1) nounwind {
store <7 x float> %4, ptr %1, align 4
ret void
}
+
+define bfloat @PR108936(x86_fp80 %0) nounwind {
+; X86-LABEL: PR108936:
+; X86: # %bb.0:
+; X86-NEXT: subl $12, %esp
+; X86-NEXT: fldt {{[0-9]+}}(%esp)
+; X86-NEXT: fstpt (%esp)
+; X86-NEXT: calll __truncxfbf2
+; X86-NEXT: addl $12, %esp
+; X86-NEXT: retl
+;
+; CHECK-LABEL: PR108936:
+; CHECK: # %bb.0:
+; CHECK-NEXT: subq $24, %rsp
+; CHECK-NEXT: fldt {{[0-9]+}}(%rsp)
+; CHECK-NEXT: fstpt (%rsp)
+; CHECK-NEXT: callq __truncxfbf2@PLT
+; CHECK-NEXT: addq $24, %rsp
+; CHECK-NEXT: retq
+ %2 = fptrunc x86_fp80 %0 to bfloat
+ ret bfloat %2
+}
|
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#if defined(CRT_HAS_TF_MODE) && __LDBL_MANT_DIG__ == 64 && defined(__x86_64__) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I assume this would solve the buildbot failures on other targets, but I'm surprised it was also failed on llvm-clang-x86_64-gcc-ubuntu
. I'll check it locally tomorrow.
I've fixed a warning from this PR with b55d4a3. |
…109143) This reverts commit ababfee78714313a0cad87591b819f0944b90d09. Add X86 FP80 check.
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/146/builds/1194 Here is the relevant piece of the build log for the reference
|
This reverts commit ababfee78714313a0cad87591b819f0944b90d09.
Add X86 FP80 check.