@@ -76,10 +76,8 @@ define void @extract_v1i32_v8i32_4(ptr %x, ptr %y) {
7676; CHECK-KNOWNVLEN128-LABEL: extract_v1i32_v8i32_4:
7777; CHECK-KNOWNVLEN128: # %bb.0:
7878; 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
8179; 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)
8381; CHECK-KNOWNVLEN128-NEXT: ret
8482 %a = load <8 x i32 >, ptr %x
8583 %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) {
10199; CHECK-KNOWNVLEN128-LABEL: extract_v1i32_v8i32_5:
102100; CHECK-KNOWNVLEN128: # %bb.0:
103101; 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
106104; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 1, e32, mf2, ta, ma
107105; CHECK-KNOWNVLEN128-NEXT: vse32.v v8, (a1)
108106; CHECK-KNOWNVLEN128-NEXT: ret
@@ -172,10 +170,8 @@ define void @extract_v2i32_v8i32_4(ptr %x, ptr %y) {
172170; CHECK-KNOWNVLEN128-LABEL: extract_v2i32_v8i32_4:
173171; CHECK-KNOWNVLEN128: # %bb.0:
174172; 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
177173; 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)
179175; CHECK-KNOWNVLEN128-NEXT: ret
180176 %a = load <8 x i32 >, ptr %x
181177 %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) {
197193; CHECK-KNOWNVLEN128-LABEL: extract_v2i32_v8i32_6:
198194; CHECK-KNOWNVLEN128: # %bb.0:
199195; 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
202198; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
203199; CHECK-KNOWNVLEN128-NEXT: vse32.v v8, (a1)
204200; CHECK-KNOWNVLEN128-NEXT: ret
@@ -234,39 +230,59 @@ define void @extract_v2i32_nxv16i32_2(<vscale x 16 x i32> %x, ptr %y) {
234230}
235231
236232define 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
244246 %c = call <2 x i32 > @llvm.vector.extract.v2i32.nxv16i32 (<vscale x 16 x i32 > %x , i64 4 )
245247 store <2 x i32 > %c , ptr %y
246248 ret void
247249}
248250
249251define 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
257267 %c = call <2 x i32 > @llvm.vector.extract.v2i32.nxv16i32 (<vscale x 16 x i32 > %x , i64 6 )
258268 store <2 x i32 > %c , ptr %y
259269 ret void
260270}
261271
262272define 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
270286 %c = call <2 x i32 > @llvm.vector.extract.v2i32.nxv16i32 (<vscale x 16 x i32 > %x , i64 8 )
271287 store <2 x i32 > %c , ptr %y
272288 ret void
@@ -333,9 +349,7 @@ define void @extract_v8i32_nxv16i32_8(<vscale x 16 x i32> %x, ptr %y) {
333349;
334350; CHECK-KNOWNVLEN128-LABEL: extract_v8i32_nxv16i32_8:
335351; 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)
339353; CHECK-KNOWNVLEN128-NEXT: ret
340354 %c = call <8 x i32 > @llvm.vector.extract.v8i32.nxv16i32 (<vscale x 16 x i32 > %x , i64 8 )
341355 store <8 x i32 > %c , ptr %y
@@ -611,9 +625,8 @@ define void @extract_v2i1_v64i1_42(ptr %x, ptr %y) {
611625; CHECK-KNOWNVLEN128-NEXT: vlm.v v0, (a0)
612626; CHECK-KNOWNVLEN128-NEXT: vmv.v.i v8, 0
613627; 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
617630; CHECK-KNOWNVLEN128-NEXT: vsetivli zero, 2, e8, mf8, ta, ma
618631; CHECK-KNOWNVLEN128-NEXT: vmsne.vi v0, v8, 0
619632; 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) {
741754}
742755
743756define 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
764797 %c = call <2 x i1 > @llvm.vector.extract.v2i1.nxv64i1 (<vscale x 64 x i1 > %x , i64 42 )
765798 store <2 x i1 > %c , ptr %y
766799 ret void
767800}
768801
769802define 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
789842 %c = call <2 x i1 > @llvm.vector.extract.v2i1.nxv32i1 (<vscale x 32 x i1 > %x , i64 26 )
790843 store <2 x i1 > %c , ptr %y
791844 ret void
0 commit comments