Skip to content

Commit 944fdbe

Browse files
committed
Add implementation
1 parent 33e285c commit 944fdbe

File tree

3 files changed

+24
-4
lines changed

3 files changed

+24
-4
lines changed

llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1692,6 +1692,26 @@ defm SIMD_RELAXED_FMIN :
16921692
defm SIMD_RELAXED_FMAX :
16931693
RelaxedBinary<F64x2, int_wasm_relaxed_max, "relaxed_max", 0x110>;
16941694

1695+
// Transform standard fminimum/fmaximum to relaxed versions
1696+
// AddedComplexity ensures these patterns match before the standard MIN/MAX
1697+
let AddedComplexity = 1 in {
1698+
def : Pat<(v4f32 (fminimum (v4f32 V128:$lhs), (v4f32 V128:$rhs))),
1699+
(SIMD_RELAXED_FMIN_F32x4 V128:$lhs, V128:$rhs)>,
1700+
Requires<[HasRelaxedSIMD]>;
1701+
1702+
def : Pat<(v4f32 (fmaximum (v4f32 V128:$lhs), (v4f32 V128:$rhs))),
1703+
(SIMD_RELAXED_FMAX_F32x4 V128:$lhs, V128:$rhs)>,
1704+
Requires<[HasRelaxedSIMD]>;
1705+
1706+
def : Pat<(v2f64 (fminimum (v2f64 V128:$lhs), (v2f64 V128:$rhs))),
1707+
(SIMD_RELAXED_FMIN_F64x2 V128:$lhs, V128:$rhs)>,
1708+
Requires<[HasRelaxedSIMD]>;
1709+
1710+
def : Pat<(v2f64 (fmaximum (v2f64 V128:$lhs), (v2f64 V128:$rhs))),
1711+
(SIMD_RELAXED_FMAX_F64x2 V128:$lhs, V128:$rhs)>,
1712+
Requires<[HasRelaxedSIMD]>;
1713+
}
1714+
16951715
//===----------------------------------------------------------------------===//
16961716
// Relaxed rounding q15 multiplication
16971717
//===----------------------------------------------------------------------===//

llvm/test/CodeGen/WebAssembly/simd-relaxed-fmax.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ define <4 x float> @test_max_f32x4(<4 x float> %a, <4 x float> %b) {
1212
; CHECK-NEXT: # %bb.0:
1313
; CHECK-NEXT: local.get 0
1414
; CHECK-NEXT: local.get 1
15-
; CHECK-NEXT: f32x4.max
15+
; CHECK-NEXT: f32x4.relaxed_max
1616
; CHECK-NEXT: # fallthrough-return
1717
%result = call <4 x float> @llvm.maximum.v4f32(<4 x float> %a, <4 x float> %b)
1818
ret <4 x float> %result
@@ -25,7 +25,7 @@ define <2 x double> @test_max_f64x2(<2 x double> %a, <2 x double> %b) {
2525
; CHECK-NEXT: # %bb.0:
2626
; CHECK-NEXT: local.get 0
2727
; CHECK-NEXT: local.get 1
28-
; CHECK-NEXT: f64x2.max
28+
; CHECK-NEXT: f64x2.relaxed_max
2929
; CHECK-NEXT: # fallthrough-return
3030
%result = call <2 x double> @llvm.maximum.v2f64(<2 x double> %a, <2 x double> %b)
3131
ret <2 x double> %result

llvm/test/CodeGen/WebAssembly/simd-relaxed-fmin.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ define <4 x float> @test_min_f32x4(<4 x float> %a, <4 x float> %b) {
1111
; CHECK-NEXT: # %bb.0:
1212
; CHECK-NEXT: local.get 0
1313
; CHECK-NEXT: local.get 1
14-
; CHECK-NEXT: f32x4.min
14+
; CHECK-NEXT: f32x4.relaxed_min
1515
; CHECK-NEXT: # fallthrough-return
1616
%result = call <4 x float> @llvm.minimum.v4f32(<4 x float> %a, <4 x float> %b)
1717
ret <4 x float> %result
@@ -24,7 +24,7 @@ define <2 x double> @test_min_f64x2(<2 x double> %a, <2 x double> %b) {
2424
; CHECK-NEXT: # %bb.0:
2525
; CHECK-NEXT: local.get 0
2626
; CHECK-NEXT: local.get 1
27-
; CHECK-NEXT: f64x2.min
27+
; CHECK-NEXT: f64x2.relaxed_min
2828
; CHECK-NEXT: # fallthrough-return
2929
%result = call <2 x double> @llvm.minimum.v2f64(<2 x double> %a, <2 x double> %b)
3030
ret <2 x double> %result

0 commit comments

Comments
 (0)