@@ -969,11 +969,44 @@ define <8 x i64> @shuffle_v8i64_as_i128(<8 x i64> %v) {
969
969
ret <8 x i64 > %shuffle
970
970
}
971
971
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:
974
975
; CHECK: # %bb.0:
975
976
; CHECK-NEXT: lui a0, %hi(.LCPI30_0)
976
977
; 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)
977
1010
; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma
978
1011
; CHECK-NEXT: vle16.v v16, (a0)
979
1012
; CHECK-NEXT: vrgatherei16.vv v12, v8, v16
@@ -982,8 +1015,8 @@ define <8 x i64> @shuffle_v8i64_as_i256(<8 x i64> %v) {
982
1015
;
983
1016
; ZVKB-V-LABEL: shuffle_v8i64_as_i256:
984
1017
; 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 )
987
1020
; ZVKB-V-NEXT: vsetivli zero, 8, e64, m4, ta, ma
988
1021
; ZVKB-V-NEXT: vle16.v v16, (a0)
989
1022
; ZVKB-V-NEXT: vrgatherei16.vv v12, v8, v16
@@ -996,8 +1029,8 @@ define <8 x i64> @shuffle_v8i64_as_i256(<8 x i64> %v) {
996
1029
define <8 x i64 > @shuffle_v8i64_as_i256_zvl256b (<8 x i64 > %v ) vscale_range(4 ,0 ) {
997
1030
; CHECK-LABEL: shuffle_v8i64_as_i256_zvl256b:
998
1031
; 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 )
1001
1034
; CHECK-NEXT: vsetivli zero, 8, e16, mf2, ta, ma
1002
1035
; CHECK-NEXT: vle16.v v12, (a0)
1003
1036
; 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)
1008
1041
;
1009
1042
; ZVKB-V-LABEL: shuffle_v8i64_as_i256_zvl256b:
1010
1043
; 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 )
1013
1046
; ZVKB-V-NEXT: vsetivli zero, 8, e16, mf2, ta, ma
1014
1047
; ZVKB-V-NEXT: vle16.v v12, (a0)
1015
1048
; ZVKB-V-NEXT: vsetvli a0, zero, e64, m1, ta, ma
0 commit comments