@@ -969,11 +969,44 @@ define <8 x i64> @shuffle_v8i64_as_i128(<8 x i64> %v) {
969969 ret <8 x i64 > %shuffle
970970}
971971
972- define <8 x i64 > @shuffle_v8i64_as_i256 (<8 x i64 > %v ) {
973- ; CHECK-LABEL: shuffle_v8i64_as_i256:
972+ ; Test case where first span has undefs
973+ define <8 x i64 > @shuffle_v8i64_as_i128_2 (<8 x i64 > %v ) {
974+ ; CHECK-LABEL: shuffle_v8i64_as_i128_2:
974975; CHECK: # %bb.0:
975976; CHECK-NEXT: lui a0, %hi(.LCPI30_0)
976977; CHECK-NEXT: addi a0, a0, %lo(.LCPI30_0)
978+ ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
979+ ; CHECK-NEXT: vle16.v v16, (a0)
980+ ; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma
981+ ; CHECK-NEXT: vrgatherei16.vv v13, v9, v16
982+ ; CHECK-NEXT: vrgatherei16.vv v12, v8, v16
983+ ; CHECK-NEXT: vrgatherei16.vv v14, v10, v16
984+ ; CHECK-NEXT: vrgatherei16.vv v15, v11, v16
985+ ; CHECK-NEXT: vmv4r.v v8, v12
986+ ; CHECK-NEXT: ret
987+ ;
988+ ; ZVKB-V-LABEL: shuffle_v8i64_as_i128_2:
989+ ; ZVKB-V: # %bb.0:
990+ ; ZVKB-V-NEXT: lui a0, %hi(.LCPI30_0)
991+ ; ZVKB-V-NEXT: addi a0, a0, %lo(.LCPI30_0)
992+ ; ZVKB-V-NEXT: vsetivli zero, 8, e16, m1, ta, ma
993+ ; ZVKB-V-NEXT: vle16.v v16, (a0)
994+ ; ZVKB-V-NEXT: vsetvli a0, zero, e64, m1, ta, ma
995+ ; ZVKB-V-NEXT: vrgatherei16.vv v13, v9, v16
996+ ; ZVKB-V-NEXT: vrgatherei16.vv v12, v8, v16
997+ ; ZVKB-V-NEXT: vrgatherei16.vv v14, v10, v16
998+ ; ZVKB-V-NEXT: vrgatherei16.vv v15, v11, v16
999+ ; ZVKB-V-NEXT: vmv4r.v v8, v12
1000+ ; ZVKB-V-NEXT: ret
1001+ %shuffle = shufflevector <8 x i64 > %v , <8 x i64 > poison, <8 x i32 > <i32 undef , i32 undef , i32 3 , i32 2 , i32 5 , i32 4 , i32 7 , i32 6 >
1002+ ret <8 x i64 > %shuffle
1003+ }
1004+
1005+ define <8 x i64 > @shuffle_v8i64_as_i256 (<8 x i64 > %v ) {
1006+ ; CHECK-LABEL: shuffle_v8i64_as_i256:
1007+ ; CHECK: # %bb.0:
1008+ ; CHECK-NEXT: lui a0, %hi(.LCPI31_0)
1009+ ; CHECK-NEXT: addi a0, a0, %lo(.LCPI31_0)
9771010; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma
9781011; CHECK-NEXT: vle16.v v16, (a0)
9791012; CHECK-NEXT: vrgatherei16.vv v12, v8, v16
@@ -982,8 +1015,8 @@ define <8 x i64> @shuffle_v8i64_as_i256(<8 x i64> %v) {
9821015;
9831016; ZVKB-V-LABEL: shuffle_v8i64_as_i256:
9841017; ZVKB-V: # %bb.0:
985- ; ZVKB-V-NEXT: lui a0, %hi(.LCPI30_0 )
986- ; ZVKB-V-NEXT: addi a0, a0, %lo(.LCPI30_0 )
1018+ ; ZVKB-V-NEXT: lui a0, %hi(.LCPI31_0 )
1019+ ; ZVKB-V-NEXT: addi a0, a0, %lo(.LCPI31_0 )
9871020; ZVKB-V-NEXT: vsetivli zero, 8, e64, m4, ta, ma
9881021; ZVKB-V-NEXT: vle16.v v16, (a0)
9891022; ZVKB-V-NEXT: vrgatherei16.vv v12, v8, v16
@@ -996,8 +1029,8 @@ define <8 x i64> @shuffle_v8i64_as_i256(<8 x i64> %v) {
9961029define <8 x i64 > @shuffle_v8i64_as_i256_zvl256b (<8 x i64 > %v ) vscale_range(4 ,0 ) {
9971030; CHECK-LABEL: shuffle_v8i64_as_i256_zvl256b:
9981031; CHECK: # %bb.0:
999- ; CHECK-NEXT: lui a0, %hi(.LCPI31_0 )
1000- ; CHECK-NEXT: addi a0, a0, %lo(.LCPI31_0 )
1032+ ; CHECK-NEXT: lui a0, %hi(.LCPI32_0 )
1033+ ; CHECK-NEXT: addi a0, a0, %lo(.LCPI32_0 )
10011034; CHECK-NEXT: vsetivli zero, 8, e16, mf2, ta, ma
10021035; CHECK-NEXT: vle16.v v12, (a0)
10031036; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma
@@ -1008,8 +1041,8 @@ define <8 x i64> @shuffle_v8i64_as_i256_zvl256b(<8 x i64> %v) vscale_range(4,0)
10081041;
10091042; ZVKB-V-LABEL: shuffle_v8i64_as_i256_zvl256b:
10101043; ZVKB-V: # %bb.0:
1011- ; ZVKB-V-NEXT: lui a0, %hi(.LCPI31_0 )
1012- ; ZVKB-V-NEXT: addi a0, a0, %lo(.LCPI31_0 )
1044+ ; ZVKB-V-NEXT: lui a0, %hi(.LCPI32_0 )
1045+ ; ZVKB-V-NEXT: addi a0, a0, %lo(.LCPI32_0 )
10131046; ZVKB-V-NEXT: vsetivli zero, 8, e16, mf2, ta, ma
10141047; ZVKB-V-NEXT: vle16.v v12, (a0)
10151048; ZVKB-V-NEXT: vsetvli a0, zero, e64, m1, ta, ma
0 commit comments