[llvm] [WebAssembly] Use the same lowerings for f16x8 as other float vectors. (PR #127897)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 19 13:19:23 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-webassembly
Author: Brendan Dahl (brendandahl)
<details>
<summary>Changes</summary>
This fixes failures to select the various compare operations that weren't being expanded for f16x8.
---
Full diff: https://github.com/llvm/llvm-project/pull/127897.diff
2 Files Affected:
- (modified) llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp (+4-6)
- (modified) llvm/test/CodeGen/WebAssembly/half-precision.ll (+10)
``````````diff
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp
index fedad25c775e2..dc3efc702ac23 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp
@@ -121,7 +121,10 @@ WebAssemblyTargetLowering::WebAssemblyTargetLowering(
setOperationAction(ISD::VACOPY, MVT::Other, Expand);
setOperationAction(ISD::VAEND, MVT::Other, Expand);
- for (auto T : {MVT::f32, MVT::f64, MVT::v4f32, MVT::v2f64}) {
+ for (auto T : {MVT::f32, MVT::f64, MVT::v4f32, MVT::v2f64, MVT::v8f16}) {
+ if (!Subtarget->hasFP16() && T == MVT::v8f16) {
+ continue;
+ }
// Don't expand the floating-point types to constant pools.
setOperationAction(ISD::ConstantFP, T, Legal);
// Expand floating-point comparisons.
@@ -147,11 +150,6 @@ WebAssemblyTargetLowering::WebAssemblyTargetLowering(
setTruncStoreAction(T, MVT::f16, Expand);
}
- if (Subtarget->hasFP16()) {
- setOperationAction(ISD::FMINIMUM, MVT::v8f16, Legal);
- setOperationAction(ISD::FMAXIMUM, MVT::v8f16, Legal);
- }
-
// Expand unavailable integer operations.
for (auto Op :
{ISD::BSWAP, ISD::SMUL_LOHI, ISD::UMUL_LOHI, ISD::MULHS, ISD::MULHU,
diff --git a/llvm/test/CodeGen/WebAssembly/half-precision.ll b/llvm/test/CodeGen/WebAssembly/half-precision.ll
index 5f0ba4aa9c3c4..59becd0e7e5c3 100644
--- a/llvm/test/CodeGen/WebAssembly/half-precision.ll
+++ b/llvm/test/CodeGen/WebAssembly/half-precision.ll
@@ -172,6 +172,16 @@ define <8 x i1> @compare_oge_v8f16 (<8 x half> %x, <8 x half> %y) {
ret <8 x i1> %res
}
+; CHECK-LABEL: compare_ule_v8f16:
+; CHECK-NEXT: .functype compare_ule_v8f16 (v128, v128) -> (v128){{$}}
+; CHECK-NEXT: f16x8.gt $push[[T0:[0-9]+]]=, $0, $1{{$}}
+; CHECK-NEXT: v128.not $push[[R:[0-9]+]]=, $pop[[T0]]{{$}}
+; CHECK-NEXT: return $pop[[R]]{{$}}
+define <8 x i1> @compare_ule_v8f16 (<8 x half> %x, <8 x half> %y) {
+ %res = fcmp ule <8 x half> %x, %y
+ ret <8 x i1> %res
+}
+
; CHECK-LABEL: abs_v8f16:
; CHECK-NEXT: .functype abs_v8f16 (v128) -> (v128)
; CHECK-NEXT: f16x8.abs $push0=, $0
``````````
</details>
https://github.com/llvm/llvm-project/pull/127897
More information about the llvm-commits
mailing list