@@ -98,17 +98,14 @@ define void @trunc_sat_u8u16_notopt(ptr %x, ptr %y) {
98
98
ret void
99
99
}
100
100
101
- ; FIXME: This can be a signed vmax followed by vnclipu.
102
101
define void @trunc_sat_u8u16_maxmin (ptr %x , ptr %y ) {
103
102
; CHECK-LABEL: trunc_sat_u8u16_maxmin:
104
103
; CHECK: # %bb.0:
105
104
; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
106
105
; CHECK-NEXT: vle16.v v8, (a0)
107
106
; CHECK-NEXT: vmax.vx v8, v8, zero
108
- ; CHECK-NEXT: li a0, 255
109
- ; CHECK-NEXT: vmin.vx v8, v8, a0
110
107
; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma
111
- ; CHECK-NEXT: vnsrl .wi v8, v8, 0
108
+ ; CHECK-NEXT: vnclipu .wi v8, v8, 0
112
109
; CHECK-NEXT: vse8.v v8, (a1)
113
110
; CHECK-NEXT: ret
114
111
%1 = load <4 x i16 >, ptr %x , align 16
@@ -119,17 +116,14 @@ define void @trunc_sat_u8u16_maxmin(ptr %x, ptr %y) {
119
116
ret void
120
117
}
121
118
122
- ; FIXME: This can be a signed vmax followed by vnclipu.
123
119
define void @trunc_sat_u8u16_minmax (ptr %x , ptr %y ) {
124
120
; CHECK-LABEL: trunc_sat_u8u16_minmax:
125
121
; CHECK: # %bb.0:
126
122
; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
127
123
; CHECK-NEXT: vle16.v v8, (a0)
128
- ; CHECK-NEXT: li a0, 255
129
- ; CHECK-NEXT: vmin.vx v8, v8, a0
130
124
; CHECK-NEXT: vmax.vx v8, v8, zero
131
125
; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma
132
- ; CHECK-NEXT: vnsrl .wi v8, v8, 0
126
+ ; CHECK-NEXT: vnclipu .wi v8, v8, 0
133
127
; CHECK-NEXT: vse8.v v8, (a1)
134
128
; CHECK-NEXT: ret
135
129
%1 = load <4 x i16 >, ptr %x , align 16
@@ -229,19 +223,15 @@ define void @trunc_sat_u16u32_min(ptr %x, ptr %y) {
229
223
ret void
230
224
}
231
225
232
- ; FIXME: This can be a signed vmax followed by vnclipu.
233
226
define void @trunc_sat_u16u32_maxmin (ptr %x , ptr %y ) {
234
227
; CHECK-LABEL: trunc_sat_u16u32_maxmin:
235
228
; CHECK: # %bb.0:
236
229
; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
237
230
; CHECK-NEXT: vle32.v v8, (a0)
238
231
; CHECK-NEXT: li a0, 1
239
232
; CHECK-NEXT: vmax.vx v8, v8, a0
240
- ; CHECK-NEXT: lui a0, 16
241
- ; CHECK-NEXT: addi a0, a0, -1
242
- ; CHECK-NEXT: vmin.vx v8, v8, a0
243
233
; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
244
- ; CHECK-NEXT: vnsrl .wi v8, v8, 0
234
+ ; CHECK-NEXT: vnclipu .wi v8, v8, 0
245
235
; CHECK-NEXT: vse16.v v8, (a1)
246
236
; CHECK-NEXT: ret
247
237
%1 = load <4 x i32 >, ptr %x , align 16
@@ -252,19 +242,15 @@ define void @trunc_sat_u16u32_maxmin(ptr %x, ptr %y) {
252
242
ret void
253
243
}
254
244
255
- ; FIXME: This can be a signed vmax followed by vnclipu.
256
245
define void @trunc_sat_u16u32_minmax (ptr %x , ptr %y ) {
257
246
; CHECK-LABEL: trunc_sat_u16u32_minmax:
258
247
; CHECK: # %bb.0:
259
248
; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
260
249
; CHECK-NEXT: vle32.v v8, (a0)
261
- ; CHECK-NEXT: lui a0, 16
262
- ; CHECK-NEXT: addi a0, a0, -1
263
- ; CHECK-NEXT: vmin.vx v8, v8, a0
264
250
; CHECK-NEXT: li a0, 50
265
251
; CHECK-NEXT: vmax.vx v8, v8, a0
266
252
; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
267
- ; CHECK-NEXT: vnsrl .wi v8, v8, 0
253
+ ; CHECK-NEXT: vnclipu .wi v8, v8, 0
268
254
; CHECK-NEXT: vse16.v v8, (a1)
269
255
; CHECK-NEXT: ret
270
256
%1 = load <4 x i32 >, ptr %x , align 16
@@ -367,18 +353,14 @@ define void @trunc_sat_u32u64_min(ptr %x, ptr %y) {
367
353
}
368
354
369
355
370
- ; FIXME: This can be a signed vmax followed by vnclipu.
371
356
define void @trunc_sat_u32u64_maxmin (ptr %x , ptr %y ) {
372
357
; CHECK-LABEL: trunc_sat_u32u64_maxmin:
373
358
; CHECK: # %bb.0:
374
359
; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
375
360
; CHECK-NEXT: vle64.v v8, (a0)
376
361
; CHECK-NEXT: vmax.vx v8, v8, zero
377
- ; CHECK-NEXT: li a0, -1
378
- ; CHECK-NEXT: srli a0, a0, 32
379
- ; CHECK-NEXT: vmin.vx v8, v8, a0
380
362
; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma
381
- ; CHECK-NEXT: vnsrl .wi v10, v8, 0
363
+ ; CHECK-NEXT: vnclipu .wi v10, v8, 0
382
364
; CHECK-NEXT: vse32.v v10, (a1)
383
365
; CHECK-NEXT: ret
384
366
%1 = load <4 x i64 >, ptr %x , align 16
@@ -389,18 +371,14 @@ define void @trunc_sat_u32u64_maxmin(ptr %x, ptr %y) {
389
371
ret void
390
372
}
391
373
392
- ; FIXME: This can be a signed vmax followed by vnclipu.
393
374
define void @trunc_sat_u32u64_minmax (ptr %x , ptr %y ) {
394
375
; CHECK-LABEL: trunc_sat_u32u64_minmax:
395
376
; CHECK: # %bb.0:
396
377
; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
397
378
; CHECK-NEXT: vle64.v v8, (a0)
398
- ; CHECK-NEXT: li a0, -1
399
- ; CHECK-NEXT: srli a0, a0, 32
400
- ; CHECK-NEXT: vmin.vx v8, v8, a0
401
379
; CHECK-NEXT: vmax.vx v8, v8, zero
402
380
; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma
403
- ; CHECK-NEXT: vnsrl .wi v10, v8, 0
381
+ ; CHECK-NEXT: vnclipu .wi v10, v8, 0
404
382
; CHECK-NEXT: vse32.v v10, (a1)
405
383
; CHECK-NEXT: ret
406
384
%1 = load <4 x i64 >, ptr %x , align 16
@@ -477,7 +455,6 @@ define void @trunc_sat_u8u32_min(ptr %x, ptr %y) {
477
455
ret void
478
456
}
479
457
480
- ; FIXME: This can be a signed vmax followed by vnclipu.
481
458
define void @trunc_sat_u8u32_maxmin (ptr %x , ptr %y ) {
482
459
; CHECK-LABEL: trunc_sat_u8u32_maxmin:
483
460
; CHECK: # %bb.0:
@@ -500,7 +477,6 @@ define void @trunc_sat_u8u32_maxmin(ptr %x, ptr %y) {
500
477
ret void
501
478
}
502
479
503
- ; FIXME: This can be a signed vmax followed by vnclipu.
504
480
define void @trunc_sat_u8u32_minmax (ptr %x , ptr %y ) {
505
481
; CHECK-LABEL: trunc_sat_u8u32_minmax:
506
482
; CHECK: # %bb.0:
@@ -595,7 +571,6 @@ define void @trunc_sat_u8u64_min(ptr %x, ptr %y) {
595
571
ret void
596
572
}
597
573
598
- ; FIXME: This can be a signed vmax followed by vnclipu.
599
574
define void @trunc_sat_u8u64_maxmin (ptr %x , ptr %y ) {
600
575
; CHECK-LABEL: trunc_sat_u8u64_maxmin:
601
576
; CHECK: # %bb.0:
@@ -620,7 +595,6 @@ define void @trunc_sat_u8u64_maxmin(ptr %x, ptr %y) {
620
595
ret void
621
596
}
622
597
623
- ; FIXME: This can be a signed vmax followed by vnclipu.
624
598
define void @trunc_sat_u8u64_minmax (ptr %x , ptr %y ) {
625
599
; CHECK-LABEL: trunc_sat_u8u64_minmax:
626
600
; CHECK: # %bb.0:
@@ -735,7 +709,6 @@ define void @trunc_sat_u16u64_min(ptr %x, ptr %y) {
735
709
ret void
736
710
}
737
711
738
- ; FIXME: This can be a signed vmax followed by vnclipu.
739
712
define void @trunc_sat_u16u64_maxmin (ptr %x , ptr %y ) {
740
713
; CHECK-LABEL: trunc_sat_u16u64_maxmin:
741
714
; CHECK: # %bb.0:
@@ -760,7 +733,6 @@ define void @trunc_sat_u16u64_maxmin(ptr %x, ptr %y) {
760
733
ret void
761
734
}
762
735
763
- ; FIXME: This can be a signed vmax followed by vnclipu.
764
736
define void @trunc_sat_u16u64_minmax (ptr %x , ptr %y ) {
765
737
; CHECK-LABEL: trunc_sat_u16u64_minmax:
766
738
; CHECK: # %bb.0:
0 commit comments