@@ -76,10 +76,8 @@ define void @extract_v1i32_v8i32_4(ptr %x, ptr %y) {
76
76
; CHECK-KNOWNVLEN128-LABEL: extract_v1i32_v8i32_4:
77
77
; CHECK-KNOWNVLEN128: # %bb.0:
78
78
; CHECK-KNOWNVLEN128-NEXT: vl2re32.v v8, (a0)
79
- ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 1, e32, m2, ta, ma
80
- ; CHECK-KNOWNVLEN128-NEXT: vslidedown.vi v8, v8, 4
81
79
; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
82
- ; CHECK-KNOWNVLEN128-NEXT: vse32.v v8 , (a1)
80
+ ; CHECK-KNOWNVLEN128-NEXT: vse32.v v9 , (a1)
83
81
; CHECK-KNOWNVLEN128-NEXT: ret
84
82
%a = load <8 x i32 >, ptr %x
85
83
%c = call <1 x i32 > @llvm.vector.extract.v1i32.v8i32 (<8 x i32 > %a , i64 4 )
@@ -101,8 +99,8 @@ define void @extract_v1i32_v8i32_5(ptr %x, ptr %y) {
101
99
; CHECK-KNOWNVLEN128-LABEL: extract_v1i32_v8i32_5:
102
100
; CHECK-KNOWNVLEN128: # %bb.0:
103
101
; CHECK-KNOWNVLEN128-NEXT: vl2re32.v v8, (a0)
104
- ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 1, e32, m2 , ta, ma
105
- ; CHECK-KNOWNVLEN128-NEXT: vslidedown.vi v8, v8, 5
102
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 1, e32, m1 , ta, ma
103
+ ; CHECK-KNOWNVLEN128-NEXT: vslidedown.vi v8, v9, 1
106
104
; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
107
105
; CHECK-KNOWNVLEN128-NEXT: vse32.v v8, (a1)
108
106
; CHECK-KNOWNVLEN128-NEXT: ret
@@ -172,10 +170,8 @@ define void @extract_v2i32_v8i32_4(ptr %x, ptr %y) {
172
170
; CHECK-KNOWNVLEN128-LABEL: extract_v2i32_v8i32_4:
173
171
; CHECK-KNOWNVLEN128: # %bb.0:
174
172
; CHECK-KNOWNVLEN128-NEXT: vl2re32.v v8, (a0)
175
- ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e32, m2, ta, ma
176
- ; CHECK-KNOWNVLEN128-NEXT: vslidedown.vi v8, v8, 4
177
173
; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
178
- ; CHECK-KNOWNVLEN128-NEXT: vse32.v v8 , (a1)
174
+ ; CHECK-KNOWNVLEN128-NEXT: vse32.v v9 , (a1)
179
175
; CHECK-KNOWNVLEN128-NEXT: ret
180
176
%a = load <8 x i32 >, ptr %x
181
177
%c = call <2 x i32 > @llvm.vector.extract.v2i32.v8i32 (<8 x i32 > %a , i64 4 )
@@ -197,8 +193,8 @@ define void @extract_v2i32_v8i32_6(ptr %x, ptr %y) {
197
193
; CHECK-KNOWNVLEN128-LABEL: extract_v2i32_v8i32_6:
198
194
; CHECK-KNOWNVLEN128: # %bb.0:
199
195
; CHECK-KNOWNVLEN128-NEXT: vl2re32.v v8, (a0)
200
- ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e32, m2 , ta, ma
201
- ; CHECK-KNOWNVLEN128-NEXT: vslidedown.vi v8, v8, 6
196
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e32, m1 , ta, ma
197
+ ; CHECK-KNOWNVLEN128-NEXT: vslidedown.vi v8, v9, 2
202
198
; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
203
199
; CHECK-KNOWNVLEN128-NEXT: vse32.v v8, (a1)
204
200
; CHECK-KNOWNVLEN128-NEXT: ret
@@ -234,39 +230,59 @@ define void @extract_v2i32_nxv16i32_2(<vscale x 16 x i32> %x, ptr %y) {
234
230
}
235
231
236
232
define void @extract_v2i32_nxv16i32_4 (<vscale x 16 x i32 > %x , ptr %y ) {
237
- ; CHECK-LABEL: extract_v2i32_nxv16i32_4:
238
- ; CHECK: # %bb.0:
239
- ; CHECK-NEXT: vsetivli zero, 2, e32, m2, ta, ma
240
- ; CHECK-NEXT: vslidedown.vi v8, v8, 4
241
- ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
242
- ; CHECK-NEXT: vse32.v v8, (a0)
243
- ; CHECK-NEXT: ret
233
+ ; CHECK-V-LABEL: extract_v2i32_nxv16i32_4:
234
+ ; CHECK-V: # %bb.0:
235
+ ; CHECK-V-NEXT: vsetivli zero, 2, e32, m2, ta, ma
236
+ ; CHECK-V-NEXT: vslidedown.vi v8, v8, 4
237
+ ; CHECK-V-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
238
+ ; CHECK-V-NEXT: vse32.v v8, (a0)
239
+ ; CHECK-V-NEXT: ret
240
+ ;
241
+ ; CHECK-KNOWNVLEN128-LABEL: extract_v2i32_nxv16i32_4:
242
+ ; CHECK-KNOWNVLEN128: # %bb.0:
243
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
244
+ ; CHECK-KNOWNVLEN128-NEXT: vse32.v v9, (a0)
245
+ ; CHECK-KNOWNVLEN128-NEXT: ret
244
246
%c = call <2 x i32 > @llvm.vector.extract.v2i32.nxv16i32 (<vscale x 16 x i32 > %x , i64 4 )
245
247
store <2 x i32 > %c , ptr %y
246
248
ret void
247
249
}
248
250
249
251
define void @extract_v2i32_nxv16i32_6 (<vscale x 16 x i32 > %x , ptr %y ) {
250
- ; CHECK-LABEL: extract_v2i32_nxv16i32_6:
251
- ; CHECK: # %bb.0:
252
- ; CHECK-NEXT: vsetivli zero, 2, e32, m2, ta, ma
253
- ; CHECK-NEXT: vslidedown.vi v8, v8, 6
254
- ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
255
- ; CHECK-NEXT: vse32.v v8, (a0)
256
- ; CHECK-NEXT: ret
252
+ ; CHECK-V-LABEL: extract_v2i32_nxv16i32_6:
253
+ ; CHECK-V: # %bb.0:
254
+ ; CHECK-V-NEXT: vsetivli zero, 2, e32, m2, ta, ma
255
+ ; CHECK-V-NEXT: vslidedown.vi v8, v8, 6
256
+ ; CHECK-V-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
257
+ ; CHECK-V-NEXT: vse32.v v8, (a0)
258
+ ; CHECK-V-NEXT: ret
259
+ ;
260
+ ; CHECK-KNOWNVLEN128-LABEL: extract_v2i32_nxv16i32_6:
261
+ ; CHECK-KNOWNVLEN128: # %bb.0:
262
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e32, m1, ta, ma
263
+ ; CHECK-KNOWNVLEN128-NEXT: vslidedown.vi v8, v9, 2
264
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
265
+ ; CHECK-KNOWNVLEN128-NEXT: vse32.v v8, (a0)
266
+ ; CHECK-KNOWNVLEN128-NEXT: ret
257
267
%c = call <2 x i32 > @llvm.vector.extract.v2i32.nxv16i32 (<vscale x 16 x i32 > %x , i64 6 )
258
268
store <2 x i32 > %c , ptr %y
259
269
ret void
260
270
}
261
271
262
272
define void @extract_v2i32_nxv16i32_8 (<vscale x 16 x i32 > %x , ptr %y ) {
263
- ; CHECK-LABEL: extract_v2i32_nxv16i32_8:
264
- ; CHECK: # %bb.0:
265
- ; CHECK-NEXT: vsetivli zero, 2, e32, m4, ta, ma
266
- ; CHECK-NEXT: vslidedown.vi v8, v8, 8
267
- ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
268
- ; CHECK-NEXT: vse32.v v8, (a0)
269
- ; CHECK-NEXT: ret
273
+ ; CHECK-V-LABEL: extract_v2i32_nxv16i32_8:
274
+ ; CHECK-V: # %bb.0:
275
+ ; CHECK-V-NEXT: vsetivli zero, 2, e32, m4, ta, ma
276
+ ; CHECK-V-NEXT: vslidedown.vi v8, v8, 8
277
+ ; CHECK-V-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
278
+ ; CHECK-V-NEXT: vse32.v v8, (a0)
279
+ ; CHECK-V-NEXT: ret
280
+ ;
281
+ ; CHECK-KNOWNVLEN128-LABEL: extract_v2i32_nxv16i32_8:
282
+ ; CHECK-KNOWNVLEN128: # %bb.0:
283
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
284
+ ; CHECK-KNOWNVLEN128-NEXT: vse32.v v10, (a0)
285
+ ; CHECK-KNOWNVLEN128-NEXT: ret
270
286
%c = call <2 x i32 > @llvm.vector.extract.v2i32.nxv16i32 (<vscale x 16 x i32 > %x , i64 8 )
271
287
store <2 x i32 > %c , ptr %y
272
288
ret void
@@ -333,9 +349,7 @@ define void @extract_v8i32_nxv16i32_8(<vscale x 16 x i32> %x, ptr %y) {
333
349
;
334
350
; CHECK-KNOWNVLEN128-LABEL: extract_v8i32_nxv16i32_8:
335
351
; CHECK-KNOWNVLEN128: # %bb.0:
336
- ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 8, e32, m4, ta, ma
337
- ; CHECK-KNOWNVLEN128-NEXT: vslidedown.vi v8, v8, 8
338
- ; CHECK-KNOWNVLEN128-NEXT: vs2r.v v8, (a0)
352
+ ; CHECK-KNOWNVLEN128-NEXT: vs2r.v v10, (a0)
339
353
; CHECK-KNOWNVLEN128-NEXT: ret
340
354
%c = call <8 x i32 > @llvm.vector.extract.v8i32.nxv16i32 (<vscale x 16 x i32 > %x , i64 8 )
341
355
store <8 x i32 > %c , ptr %y
@@ -611,9 +625,8 @@ define void @extract_v2i1_v64i1_42(ptr %x, ptr %y) {
611
625
; CHECK-KNOWNVLEN128-NEXT: vlm.v v0, (a0)
612
626
; CHECK-KNOWNVLEN128-NEXT: vmv.v.i v8, 0
613
627
; CHECK-KNOWNVLEN128-NEXT: vmerge.vim v8, v8, 1, v0
614
- ; CHECK-KNOWNVLEN128-NEXT: li a0, 42
615
- ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e8, m4, ta, ma
616
- ; CHECK-KNOWNVLEN128-NEXT: vslidedown.vx v8, v8, a0
628
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e8, m1, ta, ma
629
+ ; CHECK-KNOWNVLEN128-NEXT: vslidedown.vi v8, v10, 10
617
630
; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e8, mf8, ta, ma
618
631
; CHECK-KNOWNVLEN128-NEXT: vmsne.vi v0, v8, 0
619
632
; CHECK-KNOWNVLEN128-NEXT: vmv.v.i v8, 0
@@ -741,51 +754,91 @@ define void @extract_v2i1_nxv64i1_2(<vscale x 64 x i1> %x, ptr %y) {
741
754
}
742
755
743
756
define void @extract_v2i1_nxv64i1_42 (<vscale x 64 x i1 > %x , ptr %y ) {
744
- ; CHECK-LABEL: extract_v2i1_nxv64i1_42:
745
- ; CHECK: # %bb.0:
746
- ; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, ma
747
- ; CHECK-NEXT: vmv.v.i v8, 0
748
- ; CHECK-NEXT: vmerge.vim v8, v8, 1, v0
749
- ; CHECK-NEXT: li a1, 42
750
- ; CHECK-NEXT: vsetivli zero, 2, e8, m4, ta, ma
751
- ; CHECK-NEXT: vslidedown.vx v8, v8, a1
752
- ; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma
753
- ; CHECK-NEXT: vmsne.vi v0, v8, 0
754
- ; CHECK-NEXT: vmv.v.i v8, 0
755
- ; CHECK-NEXT: vmerge.vim v8, v8, 1, v0
756
- ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
757
- ; CHECK-NEXT: vmv.v.i v9, 0
758
- ; CHECK-NEXT: vsetivli zero, 2, e8, mf2, tu, ma
759
- ; CHECK-NEXT: vmv.v.v v9, v8
760
- ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
761
- ; CHECK-NEXT: vmsne.vi v8, v9, 0
762
- ; CHECK-NEXT: vsm.v v8, (a0)
763
- ; CHECK-NEXT: ret
757
+ ; CHECK-V-LABEL: extract_v2i1_nxv64i1_42:
758
+ ; CHECK-V: # %bb.0:
759
+ ; CHECK-V-NEXT: vsetvli a1, zero, e8, m8, ta, ma
760
+ ; CHECK-V-NEXT: vmv.v.i v8, 0
761
+ ; CHECK-V-NEXT: vmerge.vim v8, v8, 1, v0
762
+ ; CHECK-V-NEXT: li a1, 42
763
+ ; CHECK-V-NEXT: vsetivli zero, 2, e8, m4, ta, ma
764
+ ; CHECK-V-NEXT: vslidedown.vx v8, v8, a1
765
+ ; CHECK-V-NEXT: vsetivli zero, 2, e8, mf8, ta, ma
766
+ ; CHECK-V-NEXT: vmsne.vi v0, v8, 0
767
+ ; CHECK-V-NEXT: vmv.v.i v8, 0
768
+ ; CHECK-V-NEXT: vmerge.vim v8, v8, 1, v0
769
+ ; CHECK-V-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
770
+ ; CHECK-V-NEXT: vmv.v.i v9, 0
771
+ ; CHECK-V-NEXT: vsetivli zero, 2, e8, mf2, tu, ma
772
+ ; CHECK-V-NEXT: vmv.v.v v9, v8
773
+ ; CHECK-V-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
774
+ ; CHECK-V-NEXT: vmsne.vi v8, v9, 0
775
+ ; CHECK-V-NEXT: vsm.v v8, (a0)
776
+ ; CHECK-V-NEXT: ret
777
+ ;
778
+ ; CHECK-KNOWNVLEN128-LABEL: extract_v2i1_nxv64i1_42:
779
+ ; CHECK-KNOWNVLEN128: # %bb.0:
780
+ ; CHECK-KNOWNVLEN128-NEXT: vsetvli a1, zero, e8, m8, ta, ma
781
+ ; CHECK-KNOWNVLEN128-NEXT: vmv.v.i v8, 0
782
+ ; CHECK-KNOWNVLEN128-NEXT: vmerge.vim v8, v8, 1, v0
783
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e8, m1, ta, ma
784
+ ; CHECK-KNOWNVLEN128-NEXT: vslidedown.vi v8, v10, 10
785
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e8, mf8, ta, ma
786
+ ; CHECK-KNOWNVLEN128-NEXT: vmsne.vi v0, v8, 0
787
+ ; CHECK-KNOWNVLEN128-NEXT: vmv.v.i v8, 0
788
+ ; CHECK-KNOWNVLEN128-NEXT: vmerge.vim v8, v8, 1, v0
789
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
790
+ ; CHECK-KNOWNVLEN128-NEXT: vmv.v.i v9, 0
791
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e8, mf2, tu, ma
792
+ ; CHECK-KNOWNVLEN128-NEXT: vmv.v.v v9, v8
793
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
794
+ ; CHECK-KNOWNVLEN128-NEXT: vmsne.vi v8, v9, 0
795
+ ; CHECK-KNOWNVLEN128-NEXT: vsm.v v8, (a0)
796
+ ; CHECK-KNOWNVLEN128-NEXT: ret
764
797
%c = call <2 x i1 > @llvm.vector.extract.v2i1.nxv64i1 (<vscale x 64 x i1 > %x , i64 42 )
765
798
store <2 x i1 > %c , ptr %y
766
799
ret void
767
800
}
768
801
769
802
define void @extract_v2i1_nxv32i1_26 (<vscale x 32 x i1 > %x , ptr %y ) {
770
- ; CHECK-LABEL: extract_v2i1_nxv32i1_26:
771
- ; CHECK: # %bb.0:
772
- ; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, ma
773
- ; CHECK-NEXT: vmv.v.i v8, 0
774
- ; CHECK-NEXT: vmerge.vim v8, v8, 1, v0
775
- ; CHECK-NEXT: vsetivli zero, 2, e8, m2, ta, ma
776
- ; CHECK-NEXT: vslidedown.vi v8, v8, 26
777
- ; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma
778
- ; CHECK-NEXT: vmsne.vi v0, v8, 0
779
- ; CHECK-NEXT: vmv.v.i v8, 0
780
- ; CHECK-NEXT: vmerge.vim v8, v8, 1, v0
781
- ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
782
- ; CHECK-NEXT: vmv.v.i v9, 0
783
- ; CHECK-NEXT: vsetivli zero, 2, e8, mf2, tu, ma
784
- ; CHECK-NEXT: vmv.v.v v9, v8
785
- ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
786
- ; CHECK-NEXT: vmsne.vi v8, v9, 0
787
- ; CHECK-NEXT: vsm.v v8, (a0)
788
- ; CHECK-NEXT: ret
803
+ ; CHECK-V-LABEL: extract_v2i1_nxv32i1_26:
804
+ ; CHECK-V: # %bb.0:
805
+ ; CHECK-V-NEXT: vsetvli a1, zero, e8, m4, ta, ma
806
+ ; CHECK-V-NEXT: vmv.v.i v8, 0
807
+ ; CHECK-V-NEXT: vmerge.vim v8, v8, 1, v0
808
+ ; CHECK-V-NEXT: vsetivli zero, 2, e8, m2, ta, ma
809
+ ; CHECK-V-NEXT: vslidedown.vi v8, v8, 26
810
+ ; CHECK-V-NEXT: vsetivli zero, 2, e8, mf8, ta, ma
811
+ ; CHECK-V-NEXT: vmsne.vi v0, v8, 0
812
+ ; CHECK-V-NEXT: vmv.v.i v8, 0
813
+ ; CHECK-V-NEXT: vmerge.vim v8, v8, 1, v0
814
+ ; CHECK-V-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
815
+ ; CHECK-V-NEXT: vmv.v.i v9, 0
816
+ ; CHECK-V-NEXT: vsetivli zero, 2, e8, mf2, tu, ma
817
+ ; CHECK-V-NEXT: vmv.v.v v9, v8
818
+ ; CHECK-V-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
819
+ ; CHECK-V-NEXT: vmsne.vi v8, v9, 0
820
+ ; CHECK-V-NEXT: vsm.v v8, (a0)
821
+ ; CHECK-V-NEXT: ret
822
+ ;
823
+ ; CHECK-KNOWNVLEN128-LABEL: extract_v2i1_nxv32i1_26:
824
+ ; CHECK-KNOWNVLEN128: # %bb.0:
825
+ ; CHECK-KNOWNVLEN128-NEXT: vsetvli a1, zero, e8, m4, ta, ma
826
+ ; CHECK-KNOWNVLEN128-NEXT: vmv.v.i v8, 0
827
+ ; CHECK-KNOWNVLEN128-NEXT: vmerge.vim v8, v8, 1, v0
828
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e8, m1, ta, ma
829
+ ; CHECK-KNOWNVLEN128-NEXT: vslidedown.vi v8, v9, 10
830
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e8, mf8, ta, ma
831
+ ; CHECK-KNOWNVLEN128-NEXT: vmsne.vi v0, v8, 0
832
+ ; CHECK-KNOWNVLEN128-NEXT: vmv.v.i v8, 0
833
+ ; CHECK-KNOWNVLEN128-NEXT: vmerge.vim v8, v8, 1, v0
834
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
835
+ ; CHECK-KNOWNVLEN128-NEXT: vmv.v.i v9, 0
836
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e8, mf2, tu, ma
837
+ ; CHECK-KNOWNVLEN128-NEXT: vmv.v.v v9, v8
838
+ ; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
839
+ ; CHECK-KNOWNVLEN128-NEXT: vmsne.vi v8, v9, 0
840
+ ; CHECK-KNOWNVLEN128-NEXT: vsm.v v8, (a0)
841
+ ; CHECK-KNOWNVLEN128-NEXT: ret
789
842
%c = call <2 x i1 > @llvm.vector.extract.v2i1.nxv32i1 (<vscale x 32 x i1 > %x , i64 26 )
790
843
store <2 x i1 > %c , ptr %y
791
844
ret void
0 commit comments