@@ -1021,3 +1021,42 @@ 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 <16 x i32 > @shuffle_disjoint_lanes (<16 x i32 > %v , <16 x i32 > %w ) {
1026
+ ; CHECK-LABEL: shuffle_disjoint_lanes:
1027
+ ; CHECK: # %bb.0:
1028
+ ; CHECK-NEXT: lui a0, %hi(.LCPI70_0)
1029
+ ; CHECK-NEXT: addi a0, a0, %lo(.LCPI70_0)
1030
+ ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
1031
+ ; CHECK-NEXT: vle16.v v20, (a0)
1032
+ ; CHECK-NEXT: lui a0, %hi(.LCPI70_1)
1033
+ ; CHECK-NEXT: addi a0, a0, %lo(.LCPI70_1)
1034
+ ; CHECK-NEXT: vle16.v v22, (a0)
1035
+ ; CHECK-NEXT: lui a0, 15
1036
+ ; CHECK-NEXT: addi a0, a0, 240
1037
+ ; CHECK-NEXT: vmv.s.x v0, a0
1038
+ ; CHECK-NEXT: vrgatherei16.vv v16, v8, v20
1039
+ ; CHECK-NEXT: vrgatherei16.vv v16, v12, v22, v0.t
1040
+ ; CHECK-NEXT: vmv.v.v v8, v16
1041
+ ; CHECK-NEXT: ret
1042
+ %out = shufflevector <16 x i32 > %v , <16 x i32 > %w , <16 x i32 > <i32 11 , i32 15 , i32 7 , i32 3 , i32 26 , i32 30 , i32 22 , i32 18 , i32 9 , i32 13 , i32 5 , i32 1 , i32 24 , i32 28 , i32 20 , i32 16 >
1043
+ ret <16 x i32 > %out
1044
+ }
1045
+
1046
+ define <16 x i32 > @shuffle_disjoint_lanes_one_splat (<16 x i32 > %v , <16 x i32 > %w ) {
1047
+ ; CHECK-LABEL: shuffle_disjoint_lanes_one_splat:
1048
+ ; CHECK: # %bb.0:
1049
+ ; CHECK-NEXT: lui a0, %hi(.LCPI71_0)
1050
+ ; CHECK-NEXT: addi a0, a0, %lo(.LCPI71_0)
1051
+ ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
1052
+ ; CHECK-NEXT: vle16.v v20, (a0)
1053
+ ; CHECK-NEXT: lui a0, 15
1054
+ ; CHECK-NEXT: addi a0, a0, 240
1055
+ ; CHECK-NEXT: vmv.s.x v0, a0
1056
+ ; CHECK-NEXT: vrgather.vi v16, v8, 7
1057
+ ; CHECK-NEXT: vrgatherei16.vv v16, v12, v20, v0.t
1058
+ ; CHECK-NEXT: vmv.v.v v8, v16
1059
+ ; CHECK-NEXT: ret
1060
+ %out = shufflevector <16 x i32 > %v , <16 x i32 > %w , <16 x i32 > <i32 7 , i32 7 , i32 7 , i32 7 , i32 26 , i32 30 , i32 22 , i32 18 , i32 7 , i32 7 , i32 7 , i32 7 , i32 24 , i32 28 , i32 20 , i32 16 >
1061
+ ret <16 x i32 > %out
1062
+ }
0 commit comments