@@ -1021,3 +1021,55 @@ define <8 x i32> @shuffle_repeat4_singlesrc_e32(<8 x i32> %v) {
1021
1021
%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 >
1022
1022
ret <8 x i32 > %out
1023
1023
}
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