@@ -1073,3 +1073,77 @@ define <16 x i64> @shuffle_zipodd_v16i64(<16 x i64> %v1, <16 x i64> %v2) {
1073
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
1074
ret <16 x i64 > %out
1075
1075
}
1076
+
1077
+ define <16 x i32 > @shuffle_disjoint_lanes (<16 x i32 > %v , <16 x i32 > %w ) {
1078
+ ; CHECK-LABEL: shuffle_disjoint_lanes:
1079
+ ; CHECK: # %bb.0:
1080
+ ; CHECK-NEXT: lui a0, %hi(.LCPI70_0)
1081
+ ; CHECK-NEXT: addi a0, a0, %lo(.LCPI70_0)
1082
+ ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
1083
+ ; CHECK-NEXT: vle16.v v20, (a0)
1084
+ ; CHECK-NEXT: lui a0, %hi(.LCPI70_1)
1085
+ ; CHECK-NEXT: addi a0, a0, %lo(.LCPI70_1)
1086
+ ; CHECK-NEXT: vle16.v v22, (a0)
1087
+ ; CHECK-NEXT: lui a0, 15
1088
+ ; CHECK-NEXT: addi a0, a0, 240
1089
+ ; CHECK-NEXT: vmv.s.x v0, a0
1090
+ ; CHECK-NEXT: vrgatherei16.vv v16, v8, v20
1091
+ ; CHECK-NEXT: vrgatherei16.vv v16, v12, v22, v0.t
1092
+ ; CHECK-NEXT: vmv.v.v v8, v16
1093
+ ; CHECK-NEXT: ret
1094
+ %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 >
1095
+ ret <16 x i32 > %out
1096
+ }
1097
+
1098
+ define <16 x i32 > @shuffle_disjoint_lanes_one_identity (<16 x i32 > %v , <16 x i32 > %w ) {
1099
+ ; CHECK-LABEL: shuffle_disjoint_lanes_one_identity:
1100
+ ; CHECK: # %bb.0:
1101
+ ; CHECK-NEXT: lui a0, %hi(.LCPI71_0)
1102
+ ; CHECK-NEXT: addi a0, a0, %lo(.LCPI71_0)
1103
+ ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
1104
+ ; CHECK-NEXT: vle16.v v16, (a0)
1105
+ ; CHECK-NEXT: li a0, -272
1106
+ ; CHECK-NEXT: vmv.s.x v0, a0
1107
+ ; CHECK-NEXT: vrgatherei16.vv v8, v12, v16, v0.t
1108
+ ; CHECK-NEXT: ret
1109
+ %out = shufflevector <16 x i32 > %v , <16 x i32 > %w , <16 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 26 , i32 30 , i32 22 , i32 20 , i32 8 , i32 31 , i32 29 , i32 28 , i32 27 , i32 23 , i32 25 , i32 22 >
1110
+ ret <16 x i32 > %out
1111
+ }
1112
+
1113
+ define <16 x i32 > @shuffle_disjoint_lanes_one_broadcast (<16 x i32 > %v , <16 x i32 > %w ) {
1114
+ ; CHECK-LABEL: shuffle_disjoint_lanes_one_broadcast:
1115
+ ; CHECK: # %bb.0:
1116
+ ; CHECK-NEXT: lui a0, %hi(.LCPI72_0)
1117
+ ; CHECK-NEXT: addi a0, a0, %lo(.LCPI72_0)
1118
+ ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
1119
+ ; CHECK-NEXT: vle16.v v20, (a0)
1120
+ ; CHECK-NEXT: lui a0, 15
1121
+ ; CHECK-NEXT: addi a0, a0, 240
1122
+ ; CHECK-NEXT: vmv.s.x v0, a0
1123
+ ; CHECK-NEXT: vrgather.vi v16, v8, 7
1124
+ ; CHECK-NEXT: vrgatherei16.vv v16, v12, v20, v0.t
1125
+ ; CHECK-NEXT: vmv.v.v v8, v16
1126
+ ; CHECK-NEXT: ret
1127
+ %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 >
1128
+ ret <16 x i32 > %out
1129
+ }
1130
+
1131
+ define <16 x i32 > @shuffle_disjoint_lanes_one_splat (i32 %v , <16 x i32 > %w ) {
1132
+ ; CHECK-LABEL: shuffle_disjoint_lanes_one_splat:
1133
+ ; CHECK: # %bb.0:
1134
+ ; CHECK-NEXT: lui a1, %hi(.LCPI73_0)
1135
+ ; CHECK-NEXT: addi a1, a1, %lo(.LCPI73_0)
1136
+ ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, mu
1137
+ ; CHECK-NEXT: vle16.v v16, (a1)
1138
+ ; CHECK-NEXT: lui a1, 15
1139
+ ; CHECK-NEXT: addi a1, a1, 240
1140
+ ; CHECK-NEXT: vmv.s.x v0, a1
1141
+ ; CHECK-NEXT: vmv.v.x v12, a0
1142
+ ; CHECK-NEXT: vrgatherei16.vv v12, v8, v16, v0.t
1143
+ ; CHECK-NEXT: vmv.v.v v8, v12
1144
+ ; CHECK-NEXT: ret
1145
+ %head = insertelement <16 x i32 > poison, i32 %v , i32 0
1146
+ %splat = shufflevector <16 x i32 > %head , <16 x i32 > poison, <16 x i32 > zeroinitializer
1147
+ %out = shufflevector <16 x i32 > %splat , <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 >
1148
+ ret <16 x i32 > %out
1149
+ }
0 commit comments