Skip to content

Commit a531eba

Browse files
committed
Added pmin pmax based patterns
1 parent a107ba5 commit a531eba

File tree

3 files changed

+47
-28
lines changed

3 files changed

+47
-28
lines changed

llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1706,6 +1706,25 @@ let Predicates = [HasRelaxedSIMD] in {
17061706
(relaxed_max V128:$lhs, V128:$rhs)>;
17071707
def : Pat<(vec.vt (fmaximumnum (vec.vt V128:$lhs), (vec.vt V128:$rhs))),
17081708
(relaxed_max V128:$lhs, V128:$rhs)>;
1709+
1710+
// Transform pmin/max-supposed patterns to relaxed min max
1711+
let AddedComplexity = 1 in {
1712+
def : Pat<(vec.vt (pmin (vec.vt V128:$lhs), (vec.vt V128:$rhs))),
1713+
(relaxed_min $lhs, $rhs)>;
1714+
def : Pat<(vec.vt (pmax (vec.vt V128:$lhs), (vec.vt V128:$rhs))),
1715+
(relaxed_max $lhs, $rhs)>;
1716+
1717+
def : Pat<(vec.int_vt (vselect
1718+
(setolt (vec.vt (bitconvert V128:$rhs)),
1719+
(vec.vt (bitconvert V128:$lhs))),
1720+
V128:$rhs, V128:$lhs)),
1721+
(relaxed_min $lhs, $rhs)>;
1722+
def : Pat<(vec.int_vt (vselect
1723+
(setolt (vec.vt (bitconvert V128:$lhs)),
1724+
(vec.vt (bitconvert V128:$rhs))),
1725+
V128:$rhs, V128:$lhs)),
1726+
(relaxed_max $lhs, $rhs)>;
1727+
}
17091728
}
17101729
}
17111730

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

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ define <4 x float> @test_pmax_v4f32_olt(<4 x float> %x, <4 x float> %y) {
6060
; CHECK-NEXT: # %bb.0:
6161
; CHECK-NEXT: local.get 0
6262
; CHECK-NEXT: local.get 1
63-
; CHECK-NEXT: f32x4.pmax
63+
; CHECK-NEXT: f32x4.relaxed_max
6464
; CHECK-NEXT: # fallthrough-return
6565
%c = fcmp olt <4 x float> %x, %y
6666
%a = select <4 x i1> %c, <4 x float> %y, <4 x float> %x
@@ -73,7 +73,7 @@ define <4 x float> @test_pmax_v4f32_ole(<4 x float> %x, <4 x float> %y) {
7373
; CHECK-NEXT: # %bb.0:
7474
; CHECK-NEXT: local.get 0
7575
; CHECK-NEXT: local.get 1
76-
; CHECK-NEXT: f32x4.pmax
76+
; CHECK-NEXT: f32x4.relaxed_max
7777
; CHECK-NEXT: # fallthrough-return
7878
%c = fcmp ole <4 x float> %x, %y
7979
%a = select <4 x i1> %c, <4 x float> %y, <4 x float> %x
@@ -86,7 +86,7 @@ define <4 x float> @test_pmax_v4f32_ogt(<4 x float> %x, <4 x float> %y) {
8686
; CHECK-NEXT: # %bb.0:
8787
; CHECK-NEXT: local.get 0
8888
; CHECK-NEXT: local.get 1
89-
; CHECK-NEXT: f32x4.pmax
89+
; CHECK-NEXT: f32x4.relaxed_max
9090
; CHECK-NEXT: # fallthrough-return
9191
%c = fcmp ogt <4 x float> %y, %x
9292
%a = select <4 x i1> %c, <4 x float> %y, <4 x float> %x
@@ -99,7 +99,7 @@ define <4 x float> @test_pmax_v4f32_oge(<4 x float> %x, <4 x float> %y) {
9999
; CHECK-NEXT: # %bb.0:
100100
; CHECK-NEXT: local.get 0
101101
; CHECK-NEXT: local.get 1
102-
; CHECK-NEXT: f32x4.pmax
102+
; CHECK-NEXT: f32x4.relaxed_max
103103
; CHECK-NEXT: # fallthrough-return
104104
%c = fcmp oge <4 x float> %y, %x
105105
%a = select <4 x i1> %c, <4 x float> %y, <4 x float> %x
@@ -127,7 +127,7 @@ define <4 x float> @test_pmax_v4f32_fast_ole(<4 x float> %x, <4 x float> %y) {
127127
; CHECK-NEXT: # %bb.0:
128128
; CHECK-NEXT: local.get 0
129129
; CHECK-NEXT: local.get 1
130-
; CHECK-NEXT: f32x4.pmax
130+
; CHECK-NEXT: f32x4.relaxed_max
131131
; CHECK-NEXT: # fallthrough-return
132132
%c = fcmp fast ole <4 x float> %x, %y
133133
%a = select <4 x i1> %c, <4 x float> %y, <4 x float> %x
@@ -155,7 +155,7 @@ define <4 x float> @test_pmax_v4f32_fast_oge(<4 x float> %x, <4 x float> %y) {
155155
; CHECK-NEXT: # %bb.0:
156156
; CHECK-NEXT: local.get 0
157157
; CHECK-NEXT: local.get 1
158-
; CHECK-NEXT: f32x4.pmax
158+
; CHECK-NEXT: f32x4.relaxed_max
159159
; CHECK-NEXT: # fallthrough-return
160160
%c = fcmp fast oge <4 x float> %x, %y
161161
%a = select <4 x i1> %c, <4 x float> %x, <4 x float> %y
@@ -168,7 +168,7 @@ define <4 x i32> @test_pmax_int_v4f32(<4 x i32> %x, <4 x i32> %y) {
168168
; CHECK-NEXT: # %bb.0:
169169
; CHECK-NEXT: local.get 1
170170
; CHECK-NEXT: local.get 0
171-
; CHECK-NEXT: f32x4.pmax
171+
; CHECK-NEXT: f32x4.relaxed_max
172172
; CHECK-NEXT: # fallthrough-return
173173
%fx = bitcast <4 x i32> %x to <4 x float>
174174
%fy = bitcast <4 x i32> %y to <4 x float>
@@ -183,7 +183,7 @@ define <2 x double> @test_pmax_v2f64_olt(<2 x double> %x, <2 x double> %y) {
183183
; CHECK-NEXT: # %bb.0:
184184
; CHECK-NEXT: local.get 0
185185
; CHECK-NEXT: local.get 1
186-
; CHECK-NEXT: f64x2.pmax
186+
; CHECK-NEXT: f64x2.relaxed_max
187187
; CHECK-NEXT: # fallthrough-return
188188
%c = fcmp olt <2 x double> %x, %y
189189
%a = select <2 x i1> %c, <2 x double> %y, <2 x double> %x
@@ -196,7 +196,7 @@ define <2 x double> @test_pmax_v2f64_ole(<2 x double> %x, <2 x double> %y) {
196196
; CHECK-NEXT: # %bb.0:
197197
; CHECK-NEXT: local.get 0
198198
; CHECK-NEXT: local.get 1
199-
; CHECK-NEXT: f64x2.pmax
199+
; CHECK-NEXT: f64x2.relaxed_max
200200
; CHECK-NEXT: # fallthrough-return
201201
%c = fcmp ole <2 x double> %x, %y
202202
%a = select <2 x i1> %c, <2 x double> %y, <2 x double> %x
@@ -209,7 +209,7 @@ define <2 x double> @test_pmax_v2f64_ogt(<2 x double> %x, <2 x double> %y) {
209209
; CHECK-NEXT: # %bb.0:
210210
; CHECK-NEXT: local.get 1
211211
; CHECK-NEXT: local.get 0
212-
; CHECK-NEXT: f64x2.pmax
212+
; CHECK-NEXT: f64x2.relaxed_max
213213
; CHECK-NEXT: # fallthrough-return
214214
%c = fcmp ogt <2 x double> %x, %y
215215
%a = select <2 x i1> %c, <2 x double> %x, <2 x double> %y
@@ -221,7 +221,7 @@ define <2 x double> @test_pmax_v2f64_oge(<2 x double> %x, <2 x double> %y) {
221221
; CHECK-NEXT: # %bb.0:
222222
; CHECK-NEXT: local.get 1
223223
; CHECK-NEXT: local.get 0
224-
; CHECK-NEXT: f64x2.pmax
224+
; CHECK-NEXT: f64x2.relaxed_max
225225
; CHECK-NEXT: # fallthrough-return
226226
%c = fcmp oge <2 x double> %x, %y
227227
%a = select <2 x i1> %c, <2 x double> %x, <2 x double> %y
@@ -249,7 +249,7 @@ define <2 x double> @test_pmax_v2f64_fast_ole(<2 x double> %x, <2 x double> %y)
249249
; CHECK-NEXT: # %bb.0:
250250
; CHECK-NEXT: local.get 0
251251
; CHECK-NEXT: local.get 1
252-
; CHECK-NEXT: f64x2.pmax
252+
; CHECK-NEXT: f64x2.relaxed_max
253253
; CHECK-NEXT: # fallthrough-return
254254
%c = fcmp fast ole <2 x double> %x, %y
255255
%a = select <2 x i1> %c, <2 x double> %y, <2 x double> %x
@@ -276,7 +276,7 @@ define <2 x double> @test_pmax_v2f64_fast_oge(<2 x double> %x, <2 x double> %y)
276276
; CHECK-NEXT: # %bb.0:
277277
; CHECK-NEXT: local.get 0
278278
; CHECK-NEXT: local.get 1
279-
; CHECK-NEXT: f64x2.pmax
279+
; CHECK-NEXT: f64x2.relaxed_max
280280
; CHECK-NEXT: # fallthrough-return
281281
%c = fcmp fast oge <2 x double> %x, %y
282282
%a = select <2 x i1> %c, <2 x double> %x, <2 x double> %y
@@ -289,7 +289,7 @@ define <2 x i64> @test_pmax_int_v2f64(<2 x i64> %x, <2 x i64> %y) {
289289
; CHECK-NEXT: # %bb.0:
290290
; CHECK-NEXT: local.get 1
291291
; CHECK-NEXT: local.get 0
292-
; CHECK-NEXT: f64x2.pmax
292+
; CHECK-NEXT: f64x2.relaxed_max
293293
; CHECK-NEXT: # fallthrough-return
294294
%fx = bitcast <2 x i64> %x to <2 x double>
295295
%fy = bitcast <2 x i64> %y to <2 x double>

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

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ define <4 x float> @test_pmin_v4f32_olt(<4 x float> %x, <4 x float> %y) {
5959
; CHECK-NEXT: # %bb.0:
6060
; CHECK-NEXT: local.get 0
6161
; CHECK-NEXT: local.get 1
62-
; CHECK-NEXT: f32x4.pmin
62+
; CHECK-NEXT: f32x4.relaxed_min
6363
; CHECK-NEXT: # fallthrough-return
6464
%c = fcmp olt <4 x float> %y, %x
6565
%a = select <4 x i1> %c, <4 x float> %y, <4 x float> %x
@@ -72,7 +72,7 @@ define <4 x float> @test_pmin_v4f32_ole(<4 x float> %x, <4 x float> %y) {
7272
; CHECK-NEXT: # %bb.0:
7373
; CHECK-NEXT: local.get 0
7474
; CHECK-NEXT: local.get 1
75-
; CHECK-NEXT: f32x4.pmin
75+
; CHECK-NEXT: f32x4.relaxed_min
7676
; CHECK-NEXT: # fallthrough-return
7777
%c = fcmp ole <4 x float> %y, %x
7878
%a = select <4 x i1> %c, <4 x float> %y, <4 x float> %x
@@ -85,7 +85,7 @@ define <4 x float> @test_pmin_v4f32_ogt(<4 x float> %x, <4 x float> %y) {
8585
; CHECK-NEXT: # %bb.0:
8686
; CHECK-NEXT: local.get 0
8787
; CHECK-NEXT: local.get 1
88-
; CHECK-NEXT: f32x4.pmin
88+
; CHECK-NEXT: f32x4.relaxed_min
8989
; CHECK-NEXT: # fallthrough-return
9090
%c = fcmp ogt <4 x float> %x, %y
9191
%a = select <4 x i1> %c, <4 x float> %y, <4 x float> %x
@@ -98,7 +98,7 @@ define <4 x float> @test_pmin_v4f32_oge(<4 x float> %x, <4 x float> %y) {
9898
; CHECK-NEXT: # %bb.0:
9999
; CHECK-NEXT: local.get 0
100100
; CHECK-NEXT: local.get 1
101-
; CHECK-NEXT: f32x4.pmin
101+
; CHECK-NEXT: f32x4.relaxed_min
102102
; CHECK-NEXT: # fallthrough-return
103103
%c = fcmp oge <4 x float> %x, %y
104104
%a = select <4 x i1> %c, <4 x float> %y, <4 x float> %x
@@ -126,7 +126,7 @@ define <4 x float> @test_pmin_v4f32_fast_ole(<4 x float> %x, <4 x float> %y) {
126126
; CHECK-NEXT: # %bb.0:
127127
; CHECK-NEXT: local.get 1
128128
; CHECK-NEXT: local.get 0
129-
; CHECK-NEXT: f32x4.pmin
129+
; CHECK-NEXT: f32x4.relaxed_min
130130
; CHECK-NEXT: # fallthrough-return
131131
%c = fcmp fast ole <4 x float> %y, %x
132132
%a = select <4 x i1> %c, <4 x float> %y, <4 x float> %x
@@ -154,7 +154,7 @@ define <4 x float> @test_pmin_v4f32_fast_oge(<4 x float> %x, <4 x float> %y) {
154154
; CHECK-NEXT: # %bb.0:
155155
; CHECK-NEXT: local.get 0
156156
; CHECK-NEXT: local.get 1
157-
; CHECK-NEXT: f32x4.pmin
157+
; CHECK-NEXT: f32x4.relaxed_min
158158
; CHECK-NEXT: # fallthrough-return
159159
%c = fcmp fast oge <4 x float> %x, %y
160160
%a = select <4 x i1> %c, <4 x float> %y, <4 x float> %x
@@ -167,7 +167,7 @@ define <4 x i32> @test_pmin_int_v4f32(<4 x i32> %x, <4 x i32> %y) {
167167
; CHECK-NEXT: # %bb.0:
168168
; CHECK-NEXT: local.get 0
169169
; CHECK-NEXT: local.get 1
170-
; CHECK-NEXT: f32x4.pmin
170+
; CHECK-NEXT: f32x4.relaxed_min
171171
; CHECK-NEXT: # fallthrough-return
172172
%fx = bitcast <4 x i32> %x to <4 x float>
173173
%fy = bitcast <4 x i32> %y to <4 x float>
@@ -182,7 +182,7 @@ define <2 x double> @test_pmin_v2f64_olt(<2 x double> %x, <2 x double> %y) {
182182
; CHECK-NEXT: # %bb.0:
183183
; CHECK-NEXT: local.get 0
184184
; CHECK-NEXT: local.get 1
185-
; CHECK-NEXT: f64x2.pmin
185+
; CHECK-NEXT: f64x2.relaxed_min
186186
; CHECK-NEXT: # fallthrough-return
187187
%c = fcmp olt <2 x double> %y, %x
188188
%a = select <2 x i1> %c, <2 x double> %y, <2 x double> %x
@@ -195,7 +195,7 @@ define <2 x double> @test_pmin_v2f64_ole(<2 x double> %x, <2 x double> %y) {
195195
; CHECK-NEXT: # %bb.0:
196196
; CHECK-NEXT: local.get 0
197197
; CHECK-NEXT: local.get 1
198-
; CHECK-NEXT: f64x2.pmin
198+
; CHECK-NEXT: f64x2.relaxed_min
199199
; CHECK-NEXT: # fallthrough-return
200200
%c = fcmp ole <2 x double> %y, %x
201201
%a = select <2 x i1> %c, <2 x double> %y, <2 x double> %x
@@ -208,7 +208,7 @@ define <2 x double> @test_pmin_v2f64_ogt(<2 x double> %x, <2 x double> %y) {
208208
; CHECK-NEXT: # %bb.0:
209209
; CHECK-NEXT: local.get 0
210210
; CHECK-NEXT: local.get 1
211-
; CHECK-NEXT: f64x2.pmin
211+
; CHECK-NEXT: f64x2.relaxed_min
212212
; CHECK-NEXT: # fallthrough-return
213213
%c = fcmp ogt <2 x double> %x, %y
214214
%a = select <2 x i1> %c, <2 x double> %y, <2 x double> %x
@@ -221,7 +221,7 @@ define <2 x double> @test_pmin_v2f64_oge(<2 x double> %x, <2 x double> %y) {
221221
; CHECK-NEXT: # %bb.0:
222222
; CHECK-NEXT: local.get 0
223223
; CHECK-NEXT: local.get 1
224-
; CHECK-NEXT: f64x2.pmin
224+
; CHECK-NEXT: f64x2.relaxed_min
225225
; CHECK-NEXT: # fallthrough-return
226226
%c = fcmp oge <2 x double> %x, %y
227227
%a = select <2 x i1> %c, <2 x double> %y, <2 x double> %x
@@ -249,7 +249,7 @@ define <2 x double> @test_pmin_v2f64_fast_ole(<2 x double> %x, <2 x double> %y)
249249
; CHECK-NEXT: # %bb.0:
250250
; CHECK-NEXT: local.get 1
251251
; CHECK-NEXT: local.get 0
252-
; CHECK-NEXT: f64x2.pmin
252+
; CHECK-NEXT: f64x2.relaxed_min
253253
; CHECK-NEXT: # fallthrough-return
254254
%c = fcmp fast ole <2 x double> %y, %x
255255
%a = select <2 x i1> %c, <2 x double> %y, <2 x double> %x
@@ -277,7 +277,7 @@ define <2 x double> @test_pmin_v2f64_fast_oge(<2 x double> %x, <2 x double> %y)
277277
; CHECK-NEXT: # %bb.0:
278278
; CHECK-NEXT: local.get 0
279279
; CHECK-NEXT: local.get 1
280-
; CHECK-NEXT: f64x2.pmin
280+
; CHECK-NEXT: f64x2.relaxed_min
281281
; CHECK-NEXT: # fallthrough-return
282282
%c = fcmp fast oge <2 x double> %x, %y
283283
%a = select <2 x i1> %c, <2 x double> %y, <2 x double> %x
@@ -290,7 +290,7 @@ define <2 x i64> @test_pmin_int_v2f64(<2 x i64> %x, <2 x i64> %y) {
290290
; CHECK-NEXT: # %bb.0:
291291
; CHECK-NEXT: local.get 0
292292
; CHECK-NEXT: local.get 1
293-
; CHECK-NEXT: f64x2.pmin
293+
; CHECK-NEXT: f64x2.relaxed_min
294294
; CHECK-NEXT: # fallthrough-return
295295
%fx = bitcast <2 x i64> %x to <2 x double>
296296
%fy = bitcast <2 x i64> %y to <2 x double>

0 commit comments

Comments
 (0)