@@ -1021,3 +1021,55 @@ define <8 x i32> @shuffle_repeat4_singlesrc_e32(<8 x i32> %v) {
10211021 %out = shufflevector <8 x i32 > %v , <8 x i32 > poison, <8 x i32 > <i32 0 , i32 0 , i32 0 , i32 0 , i32 1 , i32 1 , i32 1 , i32 1 >
10221022 ret <8 x i32 > %out
10231023}
1024+
1025+ define <8 x i32 > @shuffle_zipeven_v8i32 (<8 x i32 > %v1 , <8 x i32 > %v2 ) {
1026+ ; CHECK-LABEL: shuffle_zipeven_v8i32:
1027+ ; CHECK: # %bb.0:
1028+ ; CHECK-NEXT: li a0, 170
1029+ ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
1030+ ; CHECK-NEXT: vmv.s.x v0, a0
1031+ ; CHECK-NEXT: vslideup.vi v8, v10, 1, v0.t
1032+ ; CHECK-NEXT: ret
1033+ %out = shufflevector <8 x i32 > %v1 , <8 x i32 > %v2 , <8 x i32 > <i32 0 , i32 8 , i32 2 , i32 10 , i32 4 , i32 12 , i32 6 , i32 14 >
1034+ ret <8 x i32 > %out
1035+ }
1036+
1037+ define <8 x i32 > @shuffle_zipodd_v8i32 (<8 x i32 > %v1 , <8 x i32 > %v2 ) {
1038+ ; CHECK-LABEL: shuffle_zipodd_v8i32:
1039+ ; CHECK: # %bb.0:
1040+ ; CHECK-NEXT: li a0, 85
1041+ ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu
1042+ ; CHECK-NEXT: vmv.s.x v0, a0
1043+ ; CHECK-NEXT: vslidedown.vi v10, v8, 1, v0.t
1044+ ; CHECK-NEXT: vmv.v.v v8, v10
1045+ ; CHECK-NEXT: ret
1046+ %out = shufflevector <8 x i32 > %v1 , <8 x i32 > %v2 , <8 x i32 > <i32 1 , i32 9 , i32 3 , i32 11 , i32 5 , i32 13 , i32 7 , i32 15 >
1047+ ret <8 x i32 > %out
1048+ }
1049+
1050+ define <16 x i64 > @shuffle_zipeven_v16i64 (<16 x i64 > %v1 , <16 x i64 > %v2 ) {
1051+ ; CHECK-LABEL: shuffle_zipeven_v16i64:
1052+ ; CHECK: # %bb.0:
1053+ ; CHECK-NEXT: lui a0, 11
1054+ ; CHECK-NEXT: addi a0, a0, -1366
1055+ ; CHECK-NEXT: vsetivli zero, 16, e64, m8, ta, mu
1056+ ; CHECK-NEXT: vmv.s.x v0, a0
1057+ ; CHECK-NEXT: vslideup.vi v8, v16, 1, v0.t
1058+ ; CHECK-NEXT: ret
1059+ %out = shufflevector <16 x i64 > %v1 , <16 x i64 > %v2 , <16 x i32 > <i32 0 , i32 16 , i32 2 , i32 18 , i32 4 , i32 20 , i32 6 , i32 22 , i32 8 , i32 24 , i32 10 , i32 26 , i32 12 , i32 28 , i32 14 , i32 30 >
1060+ ret <16 x i64 > %out
1061+ }
1062+
1063+ define <16 x i64 > @shuffle_zipodd_v16i64 (<16 x i64 > %v1 , <16 x i64 > %v2 ) {
1064+ ; CHECK-LABEL: shuffle_zipodd_v16i64:
1065+ ; CHECK: # %bb.0:
1066+ ; CHECK-NEXT: lui a0, 5
1067+ ; CHECK-NEXT: addi a0, a0, 1365
1068+ ; CHECK-NEXT: vsetivli zero, 16, e64, m8, ta, mu
1069+ ; CHECK-NEXT: vmv.s.x v0, a0
1070+ ; CHECK-NEXT: vslidedown.vi v16, v8, 1, v0.t
1071+ ; CHECK-NEXT: vmv.v.v v8, v16
1072+ ; CHECK-NEXT: ret
1073+ %out = shufflevector <16 x i64 > %v1 , <16 x i64 > %v2 , <16 x i32 > <i32 1 , i32 17 , i32 3 , i32 19 , i32 5 , i32 21 , i32 7 , i32 23 , i32 9 , i32 25 , i32 11 , i32 27 , i32 13 , i32 29 , i32 15 , i32 31 >
1074+ ret <16 x i64 > %out
1075+ }
0 commit comments