@@ -45,6 +45,23 @@ define <vscale x 1 x i8> @vrem_vi_nxv1i8_0(<vscale x 1 x i8> %va) {
45
45
ret <vscale x 1 x i8 > %vc
46
46
}
47
47
48
+ define <vscale x 1 x i8 > @vrem_vv_nxv1i8_sext_twice (<vscale x 1 x i8 > %va , <vscale x 1 x i8 > %vb ) {
49
+ ; CHECK-LABEL: vrem_vv_nxv1i8_sext_twice:
50
+ ; CHECK: # %bb.0:
51
+ ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
52
+ ; CHECK-NEXT: vsext.vf2 v10, v8
53
+ ; CHECK-NEXT: vsext.vf2 v8, v9
54
+ ; CHECK-NEXT: vrem.vv v8, v10, v8
55
+ ; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma
56
+ ; CHECK-NEXT: vnsrl.wi v8, v8, 0
57
+ ; CHECK-NEXT: ret
58
+ %sext_va = sext <vscale x 1 x i8 > %va to <vscale x 1 x i16 >
59
+ %sext_vb = sext <vscale x 1 x i8 > %vb to <vscale x 1 x i16 >
60
+ %vc_ext = srem <vscale x 1 x i16 > %sext_va , %sext_vb
61
+ %vc = trunc <vscale x 1 x i16 > %vc_ext to <vscale x 1 x i8 >
62
+ ret <vscale x 1 x i8 > %vc
63
+ }
64
+
48
65
define <vscale x 2 x i8 > @vrem_vv_nxv2i8 (<vscale x 2 x i8 > %va , <vscale x 2 x i8 > %vb ) {
49
66
; CHECK-LABEL: vrem_vv_nxv2i8:
50
67
; CHECK: # %bb.0:
@@ -86,6 +103,23 @@ define <vscale x 2 x i8> @vrem_vi_nxv2i8_0(<vscale x 2 x i8> %va) {
86
103
ret <vscale x 2 x i8 > %vc
87
104
}
88
105
106
+ define <vscale x 2 x i8 > @vrem_vv_nxv2i8_sext_twice (<vscale x 2 x i8 > %va , <vscale x 2 x i8 > %vb ) {
107
+ ; CHECK-LABEL: vrem_vv_nxv2i8_sext_twice:
108
+ ; CHECK: # %bb.0:
109
+ ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
110
+ ; CHECK-NEXT: vsext.vf2 v10, v8
111
+ ; CHECK-NEXT: vsext.vf2 v8, v9
112
+ ; CHECK-NEXT: vrem.vv v8, v10, v8
113
+ ; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma
114
+ ; CHECK-NEXT: vnsrl.wi v8, v8, 0
115
+ ; CHECK-NEXT: ret
116
+ %sext_va = sext <vscale x 2 x i8 > %va to <vscale x 2 x i16 >
117
+ %sext_vb = sext <vscale x 2 x i8 > %vb to <vscale x 2 x i16 >
118
+ %vc_ext = srem <vscale x 2 x i16 > %sext_va , %sext_vb
119
+ %vc = trunc <vscale x 2 x i16 > %vc_ext to <vscale x 2 x i8 >
120
+ ret <vscale x 2 x i8 > %vc
121
+ }
122
+
89
123
define <vscale x 4 x i8 > @vrem_vv_nxv4i8 (<vscale x 4 x i8 > %va , <vscale x 4 x i8 > %vb ) {
90
124
; CHECK-LABEL: vrem_vv_nxv4i8:
91
125
; CHECK: # %bb.0:
@@ -127,6 +161,23 @@ define <vscale x 4 x i8> @vrem_vi_nxv4i8_0(<vscale x 4 x i8> %va) {
127
161
ret <vscale x 4 x i8 > %vc
128
162
}
129
163
164
+ define <vscale x 4 x i8 > @vrem_vv_nxv4i8_sext_twice (<vscale x 4 x i8 > %va , <vscale x 4 x i8 > %vb ) {
165
+ ; CHECK-LABEL: vrem_vv_nxv4i8_sext_twice:
166
+ ; CHECK: # %bb.0:
167
+ ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
168
+ ; CHECK-NEXT: vsext.vf2 v10, v8
169
+ ; CHECK-NEXT: vsext.vf2 v8, v9
170
+ ; CHECK-NEXT: vrem.vv v8, v10, v8
171
+ ; CHECK-NEXT: vsetvli zero, zero, e8, mf2, ta, ma
172
+ ; CHECK-NEXT: vnsrl.wi v8, v8, 0
173
+ ; CHECK-NEXT: ret
174
+ %sext_va = sext <vscale x 4 x i8 > %va to <vscale x 4 x i16 >
175
+ %sext_vb = sext <vscale x 4 x i8 > %vb to <vscale x 4 x i16 >
176
+ %vc_ext = srem <vscale x 4 x i16 > %sext_va , %sext_vb
177
+ %vc = trunc <vscale x 4 x i16 > %vc_ext to <vscale x 4 x i8 >
178
+ ret <vscale x 4 x i8 > %vc
179
+ }
180
+
130
181
define <vscale x 8 x i8 > @vrem_vv_nxv8i8 (<vscale x 8 x i8 > %va , <vscale x 8 x i8 > %vb ) {
131
182
; CHECK-LABEL: vrem_vv_nxv8i8:
132
183
; CHECK: # %bb.0:
@@ -168,6 +219,23 @@ define <vscale x 8 x i8> @vrem_vi_nxv8i8_0(<vscale x 8 x i8> %va) {
168
219
ret <vscale x 8 x i8 > %vc
169
220
}
170
221
222
+ define <vscale x 8 x i8 > @vrem_vv_nxv8i8_sext_twice (<vscale x 8 x i8 > %va , <vscale x 8 x i8 > %vb ) {
223
+ ; CHECK-LABEL: vrem_vv_nxv8i8_sext_twice:
224
+ ; CHECK: # %bb.0:
225
+ ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
226
+ ; CHECK-NEXT: vsext.vf2 v10, v8
227
+ ; CHECK-NEXT: vsext.vf2 v12, v9
228
+ ; CHECK-NEXT: vrem.vv v10, v10, v12
229
+ ; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, ma
230
+ ; CHECK-NEXT: vnsrl.wi v8, v10, 0
231
+ ; CHECK-NEXT: ret
232
+ %sext_va = sext <vscale x 8 x i8 > %va to <vscale x 8 x i16 >
233
+ %sext_vb = sext <vscale x 8 x i8 > %vb to <vscale x 8 x i16 >
234
+ %vc_ext = srem <vscale x 8 x i16 > %sext_va , %sext_vb
235
+ %vc = trunc <vscale x 8 x i16 > %vc_ext to <vscale x 8 x i8 >
236
+ ret <vscale x 8 x i8 > %vc
237
+ }
238
+
171
239
define <vscale x 16 x i8 > @vrem_vv_nxv16i8 (<vscale x 16 x i8 > %va , <vscale x 16 x i8 > %vb ) {
172
240
; CHECK-LABEL: vrem_vv_nxv16i8:
173
241
; CHECK: # %bb.0:
@@ -209,6 +277,23 @@ define <vscale x 16 x i8> @vrem_vi_nxv16i8_0(<vscale x 16 x i8> %va) {
209
277
ret <vscale x 16 x i8 > %vc
210
278
}
211
279
280
+ define <vscale x 16 x i8 > @vrem_vv_nxv16i8_sext_twice (<vscale x 16 x i8 > %va , <vscale x 16 x i8 > %vb ) {
281
+ ; CHECK-LABEL: vrem_vv_nxv16i8_sext_twice:
282
+ ; CHECK: # %bb.0:
283
+ ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
284
+ ; CHECK-NEXT: vsext.vf2 v12, v8
285
+ ; CHECK-NEXT: vsext.vf2 v16, v10
286
+ ; CHECK-NEXT: vrem.vv v12, v12, v16
287
+ ; CHECK-NEXT: vsetvli zero, zero, e8, m2, ta, ma
288
+ ; CHECK-NEXT: vnsrl.wi v8, v12, 0
289
+ ; CHECK-NEXT: ret
290
+ %sext_va = sext <vscale x 16 x i8 > %va to <vscale x 16 x i16 >
291
+ %sext_vb = sext <vscale x 16 x i8 > %vb to <vscale x 16 x i16 >
292
+ %vc_ext = srem <vscale x 16 x i16 > %sext_va , %sext_vb
293
+ %vc = trunc <vscale x 16 x i16 > %vc_ext to <vscale x 16 x i8 >
294
+ ret <vscale x 16 x i8 > %vc
295
+ }
296
+
212
297
define <vscale x 32 x i8 > @vrem_vv_nxv32i8 (<vscale x 32 x i8 > %va , <vscale x 32 x i8 > %vb ) {
213
298
; CHECK-LABEL: vrem_vv_nxv32i8:
214
299
; CHECK: # %bb.0:
@@ -250,6 +335,23 @@ define <vscale x 32 x i8> @vrem_vi_nxv32i8_0(<vscale x 32 x i8> %va) {
250
335
ret <vscale x 32 x i8 > %vc
251
336
}
252
337
338
+ define <vscale x 32 x i8 > @vrem_vv_nxv32i8_sext_twice (<vscale x 32 x i8 > %va , <vscale x 32 x i8 > %vb ) {
339
+ ; CHECK-LABEL: vrem_vv_nxv32i8_sext_twice:
340
+ ; CHECK: # %bb.0:
341
+ ; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma
342
+ ; CHECK-NEXT: vsext.vf2 v16, v8
343
+ ; CHECK-NEXT: vsext.vf2 v24, v12
344
+ ; CHECK-NEXT: vrem.vv v16, v16, v24
345
+ ; CHECK-NEXT: vsetvli zero, zero, e8, m4, ta, ma
346
+ ; CHECK-NEXT: vnsrl.wi v8, v16, 0
347
+ ; CHECK-NEXT: ret
348
+ %sext_va = sext <vscale x 32 x i8 > %va to <vscale x 32 x i16 >
349
+ %sext_vb = sext <vscale x 32 x i8 > %vb to <vscale x 32 x i16 >
350
+ %vc_ext = srem <vscale x 32 x i16 > %sext_va , %sext_vb
351
+ %vc = trunc <vscale x 32 x i16 > %vc_ext to <vscale x 32 x i8 >
352
+ ret <vscale x 32 x i8 > %vc
353
+ }
354
+
253
355
define <vscale x 64 x i8 > @vrem_vv_nxv64i8 (<vscale x 64 x i8 > %va , <vscale x 64 x i8 > %vb ) {
254
356
; CHECK-LABEL: vrem_vv_nxv64i8:
255
357
; CHECK: # %bb.0:
@@ -345,6 +447,23 @@ define <vscale x 1 x i16> @vrem_vi_nxv1i16_0(<vscale x 1 x i16> %va) {
345
447
ret <vscale x 1 x i16 > %vc
346
448
}
347
449
450
+ define <vscale x 1 x i16 > @vrem_vv_nxv1i16_sext_twice (<vscale x 1 x i16 > %va , <vscale x 1 x i16 > %vb ) {
451
+ ; CHECK-LABEL: vrem_vv_nxv1i16_sext_twice:
452
+ ; CHECK: # %bb.0:
453
+ ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
454
+ ; CHECK-NEXT: vsext.vf2 v10, v8
455
+ ; CHECK-NEXT: vsext.vf2 v8, v9
456
+ ; CHECK-NEXT: vrem.vv v8, v10, v8
457
+ ; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma
458
+ ; CHECK-NEXT: vnsrl.wi v8, v8, 0
459
+ ; CHECK-NEXT: ret
460
+ %sext_va = sext <vscale x 1 x i16 > %va to <vscale x 1 x i32 >
461
+ %sext_vb = sext <vscale x 1 x i16 > %vb to <vscale x 1 x i32 >
462
+ %vc_ext = srem <vscale x 1 x i32 > %sext_va , %sext_vb
463
+ %vc = trunc <vscale x 1 x i32 > %vc_ext to <vscale x 1 x i16 >
464
+ ret <vscale x 1 x i16 > %vc
465
+ }
466
+
348
467
define <vscale x 2 x i16 > @vrem_vv_nxv2i16 (<vscale x 2 x i16 > %va , <vscale x 2 x i16 > %vb ) {
349
468
; CHECK-LABEL: vrem_vv_nxv2i16:
350
469
; CHECK: # %bb.0:
@@ -399,6 +518,23 @@ define <vscale x 2 x i16> @vrem_vi_nxv2i16_0(<vscale x 2 x i16> %va) {
399
518
ret <vscale x 2 x i16 > %vc
400
519
}
401
520
521
+ define <vscale x 2 x i16 > @vrem_vv_nxv2i16_sext_twice (<vscale x 2 x i16 > %va , <vscale x 2 x i16 > %vb ) {
522
+ ; CHECK-LABEL: vrem_vv_nxv2i16_sext_twice:
523
+ ; CHECK: # %bb.0:
524
+ ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
525
+ ; CHECK-NEXT: vsext.vf2 v10, v8
526
+ ; CHECK-NEXT: vsext.vf2 v8, v9
527
+ ; CHECK-NEXT: vrem.vv v8, v10, v8
528
+ ; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
529
+ ; CHECK-NEXT: vnsrl.wi v8, v8, 0
530
+ ; CHECK-NEXT: ret
531
+ %sext_va = sext <vscale x 2 x i16 > %va to <vscale x 2 x i32 >
532
+ %sext_vb = sext <vscale x 2 x i16 > %vb to <vscale x 2 x i32 >
533
+ %vc_ext = srem <vscale x 2 x i32 > %sext_va , %sext_vb
534
+ %vc = trunc <vscale x 2 x i32 > %vc_ext to <vscale x 2 x i16 >
535
+ ret <vscale x 2 x i16 > %vc
536
+ }
537
+
402
538
define <vscale x 4 x i16 > @vrem_vv_nxv4i16 (<vscale x 4 x i16 > %va , <vscale x 4 x i16 > %vb ) {
403
539
; CHECK-LABEL: vrem_vv_nxv4i16:
404
540
; CHECK: # %bb.0:
@@ -453,6 +589,23 @@ define <vscale x 4 x i16> @vrem_vi_nxv4i16_0(<vscale x 4 x i16> %va) {
453
589
ret <vscale x 4 x i16 > %vc
454
590
}
455
591
592
+ define <vscale x 4 x i16 > @vrem_vv_nxv4i16_sext_twice (<vscale x 4 x i16 > %va , <vscale x 4 x i16 > %vb ) {
593
+ ; CHECK-LABEL: vrem_vv_nxv4i16_sext_twice:
594
+ ; CHECK: # %bb.0:
595
+ ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
596
+ ; CHECK-NEXT: vsext.vf2 v10, v8
597
+ ; CHECK-NEXT: vsext.vf2 v12, v9
598
+ ; CHECK-NEXT: vrem.vv v10, v10, v12
599
+ ; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma
600
+ ; CHECK-NEXT: vnsrl.wi v8, v10, 0
601
+ ; CHECK-NEXT: ret
602
+ %sext_va = sext <vscale x 4 x i16 > %va to <vscale x 4 x i32 >
603
+ %sext_vb = sext <vscale x 4 x i16 > %vb to <vscale x 4 x i32 >
604
+ %vc_ext = srem <vscale x 4 x i32 > %sext_va , %sext_vb
605
+ %vc = trunc <vscale x 4 x i32 > %vc_ext to <vscale x 4 x i16 >
606
+ ret <vscale x 4 x i16 > %vc
607
+ }
608
+
456
609
define <vscale x 8 x i16 > @vrem_vv_nxv8i16 (<vscale x 8 x i16 > %va , <vscale x 8 x i16 > %vb ) {
457
610
; CHECK-LABEL: vrem_vv_nxv8i16:
458
611
; CHECK: # %bb.0:
@@ -507,6 +660,23 @@ define <vscale x 8 x i16> @vrem_vi_nxv8i16_0(<vscale x 8 x i16> %va) {
507
660
ret <vscale x 8 x i16 > %vc
508
661
}
509
662
663
+ define <vscale x 8 x i16 > @vrem_vv_nxv8i16_sext_twice (<vscale x 8 x i16 > %va , <vscale x 8 x i16 > %vb ) {
664
+ ; CHECK-LABEL: vrem_vv_nxv8i16_sext_twice:
665
+ ; CHECK: # %bb.0:
666
+ ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
667
+ ; CHECK-NEXT: vsext.vf2 v12, v8
668
+ ; CHECK-NEXT: vsext.vf2 v16, v10
669
+ ; CHECK-NEXT: vrem.vv v12, v12, v16
670
+ ; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma
671
+ ; CHECK-NEXT: vnsrl.wi v8, v12, 0
672
+ ; CHECK-NEXT: ret
673
+ %sext_va = sext <vscale x 8 x i16 > %va to <vscale x 8 x i32 >
674
+ %sext_vb = sext <vscale x 8 x i16 > %vb to <vscale x 8 x i32 >
675
+ %vc_ext = srem <vscale x 8 x i32 > %sext_va , %sext_vb
676
+ %vc = trunc <vscale x 8 x i32 > %vc_ext to <vscale x 8 x i16 >
677
+ ret <vscale x 8 x i16 > %vc
678
+ }
679
+
510
680
define <vscale x 16 x i16 > @vrem_vv_nxv16i16 (<vscale x 16 x i16 > %va , <vscale x 16 x i16 > %vb ) {
511
681
; CHECK-LABEL: vrem_vv_nxv16i16:
512
682
; CHECK: # %bb.0:
@@ -561,6 +731,23 @@ define <vscale x 16 x i16> @vrem_vi_nxv16i16_0(<vscale x 16 x i16> %va) {
561
731
ret <vscale x 16 x i16 > %vc
562
732
}
563
733
734
+ define <vscale x 16 x i16 > @vrem_vv_nxv16i16_sext_twice (<vscale x 16 x i16 > %va , <vscale x 16 x i16 > %vb ) {
735
+ ; CHECK-LABEL: vrem_vv_nxv16i16_sext_twice:
736
+ ; CHECK: # %bb.0:
737
+ ; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma
738
+ ; CHECK-NEXT: vsext.vf2 v16, v8
739
+ ; CHECK-NEXT: vsext.vf2 v24, v12
740
+ ; CHECK-NEXT: vrem.vv v16, v16, v24
741
+ ; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma
742
+ ; CHECK-NEXT: vnsrl.wi v8, v16, 0
743
+ ; CHECK-NEXT: ret
744
+ %sext_va = sext <vscale x 16 x i16 > %va to <vscale x 16 x i32 >
745
+ %sext_vb = sext <vscale x 16 x i16 > %vb to <vscale x 16 x i32 >
746
+ %vc_ext = srem <vscale x 16 x i32 > %sext_va , %sext_vb
747
+ %vc = trunc <vscale x 16 x i32 > %vc_ext to <vscale x 16 x i16 >
748
+ ret <vscale x 16 x i16 > %vc
749
+ }
750
+
564
751
define <vscale x 32 x i16 > @vrem_vv_nxv32i16 (<vscale x 32 x i16 > %va , <vscale x 32 x i16 > %vb ) {
565
752
; CHECK-LABEL: vrem_vv_nxv32i16:
566
753
; CHECK: # %bb.0:
@@ -963,8 +1150,8 @@ define <vscale x 1 x i64> @vrem_vi_nxv1i64_0(<vscale x 1 x i64> %va) {
963
1150
;
964
1151
; RV64-V-LABEL: vrem_vi_nxv1i64_0:
965
1152
; RV64-V: # %bb.0:
966
- ; RV64-V-NEXT: lui a0, %hi(.LCPI56_0 )
967
- ; RV64-V-NEXT: ld a0, %lo(.LCPI56_0 )(a0)
1153
+ ; RV64-V-NEXT: lui a0, %hi(.LCPI67_0 )
1154
+ ; RV64-V-NEXT: ld a0, %lo(.LCPI67_0 )(a0)
968
1155
; RV64-V-NEXT: vsetvli a1, zero, e64, m1, ta, ma
969
1156
; RV64-V-NEXT: vmulh.vx v9, v8, a0
970
1157
; RV64-V-NEXT: li a0, 63
@@ -1048,8 +1235,8 @@ define <vscale x 2 x i64> @vrem_vi_nxv2i64_0(<vscale x 2 x i64> %va) {
1048
1235
;
1049
1236
; RV64-V-LABEL: vrem_vi_nxv2i64_0:
1050
1237
; RV64-V: # %bb.0:
1051
- ; RV64-V-NEXT: lui a0, %hi(.LCPI59_0 )
1052
- ; RV64-V-NEXT: ld a0, %lo(.LCPI59_0 )(a0)
1238
+ ; RV64-V-NEXT: lui a0, %hi(.LCPI70_0 )
1239
+ ; RV64-V-NEXT: ld a0, %lo(.LCPI70_0 )(a0)
1053
1240
; RV64-V-NEXT: vsetvli a1, zero, e64, m2, ta, ma
1054
1241
; RV64-V-NEXT: vmulh.vx v10, v8, a0
1055
1242
; RV64-V-NEXT: li a0, 63
@@ -1133,8 +1320,8 @@ define <vscale x 4 x i64> @vrem_vi_nxv4i64_0(<vscale x 4 x i64> %va) {
1133
1320
;
1134
1321
; RV64-V-LABEL: vrem_vi_nxv4i64_0:
1135
1322
; RV64-V: # %bb.0:
1136
- ; RV64-V-NEXT: lui a0, %hi(.LCPI62_0 )
1137
- ; RV64-V-NEXT: ld a0, %lo(.LCPI62_0 )(a0)
1323
+ ; RV64-V-NEXT: lui a0, %hi(.LCPI73_0 )
1324
+ ; RV64-V-NEXT: ld a0, %lo(.LCPI73_0 )(a0)
1138
1325
; RV64-V-NEXT: vsetvli a1, zero, e64, m4, ta, ma
1139
1326
; RV64-V-NEXT: vmulh.vx v12, v8, a0
1140
1327
; RV64-V-NEXT: li a0, 63
@@ -1218,8 +1405,8 @@ define <vscale x 8 x i64> @vrem_vi_nxv8i64_0(<vscale x 8 x i64> %va) {
1218
1405
;
1219
1406
; RV64-V-LABEL: vrem_vi_nxv8i64_0:
1220
1407
; RV64-V: # %bb.0:
1221
- ; RV64-V-NEXT: lui a0, %hi(.LCPI65_0 )
1222
- ; RV64-V-NEXT: ld a0, %lo(.LCPI65_0 )(a0)
1408
+ ; RV64-V-NEXT: lui a0, %hi(.LCPI76_0 )
1409
+ ; RV64-V-NEXT: ld a0, %lo(.LCPI76_0 )(a0)
1223
1410
; RV64-V-NEXT: vsetvli a1, zero, e64, m8, ta, ma
1224
1411
; RV64-V-NEXT: vmulh.vx v16, v8, a0
1225
1412
; RV64-V-NEXT: li a0, 63
0 commit comments