@@ -1247,3 +1247,55 @@ define <4 x i8> @load_factor8_one_active(ptr %ptr) vscale_range(8,1024) {
1247
1247
%v0 = shufflevector <32 x i8 > %interleaved.vec , <32 x i8 > poison, <4 x i32 > <i32 0 , i32 8 , i32 16 , i32 24 >
1248
1248
ret <4 x i8 > %v0
1249
1249
}
1250
+
1251
+ define void @load_factor4_one_active_storeback (ptr %ptr ) {
1252
+ ; CHECK-LABEL: load_factor4_one_active_storeback:
1253
+ ; CHECK: # %bb.0:
1254
+ ; CHECK-NEXT: li a1, 16
1255
+ ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
1256
+ ; CHECK-NEXT: vlse32.v v8, (a0), a1
1257
+ ; CHECK-NEXT: vse32.v v8, (a0)
1258
+ ; CHECK-NEXT: ret
1259
+ %interleaved.vec = load <16 x i32 >, ptr %ptr
1260
+ %v0 = shufflevector <16 x i32 > %interleaved.vec , <16 x i32 > poison, <4 x i32 > <i32 0 , i32 4 , i32 8 , i32 12 >
1261
+ store <4 x i32 > %v0 , ptr %ptr
1262
+ ret void
1263
+ }
1264
+
1265
+ ; TODO: This should be a strided load
1266
+ define void @load_factor4_one_active_storeback_full (ptr %ptr ) {
1267
+ ; CHECK-LABEL: load_factor4_one_active_storeback_full:
1268
+ ; CHECK: # %bb.0:
1269
+ ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1270
+ ; CHECK-NEXT: vle32.v v8, (a0)
1271
+ ; CHECK-NEXT: vsetivli zero, 4, e32, m2, ta, ma
1272
+ ; CHECK-NEXT: vslidedown.vi v12, v8, 4
1273
+ ; CHECK-NEXT: vmv1r.v v13, v8
1274
+ ; CHECK-NEXT: vmv1r.v v14, v12
1275
+ ; CHECK-NEXT: vsetivli zero, 4, e32, m4, ta, ma
1276
+ ; CHECK-NEXT: vslidedown.vi v16, v8, 8
1277
+ ; CHECK-NEXT: vmv1r.v v15, v16
1278
+ ; CHECK-NEXT: vslidedown.vi v16, v8, 12
1279
+ ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
1280
+ ; CHECK-NEXT: vsseg4e32.v v13, (a0)
1281
+ ; CHECK-NEXT: ret
1282
+ %interleaved.vec = load <16 x i32 >, ptr %ptr
1283
+ %v0 = shufflevector <16 x i32 > %interleaved.vec , <16 x i32 > poison, <16 x i32 > <i32 0 , i32 4 , i32 8 , i32 12 , i32 undef , i32 undef , i32 undef , i32 undef , i32 undef , i32 undef , i32 undef , i32 undef , i32 undef , i32 undef , i32 undef , i32 undef >
1284
+ store <16 x i32 > %v0 , ptr %ptr
1285
+ ret void
1286
+ }
1287
+
1288
+ ; TODO: This should be a strided store
1289
+ define void @store_factor4_one_active_storeback (ptr %ptr , <4 x i32 > %v ) {
1290
+ ; CHECK-LABEL: store_factor4_one_active_storeback:
1291
+ ; CHECK: # %bb.0:
1292
+ ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
1293
+ ; CHECK-NEXT: vslideup.vi v9, v8, 1
1294
+ ; CHECK-NEXT: vmv.v.v v10, v9
1295
+ ; CHECK-NEXT: vmv.v.v v11, v9
1296
+ ; CHECK-NEXT: vsseg4e32.v v8, (a0)
1297
+ ; CHECK-NEXT: ret
1298
+ %v0 = shufflevector <4 x i32 > %v , <4 x i32 > poison, <16 x i32 > <i32 0 , i32 undef , i32 undef , i32 undef , i32 1 , i32 undef , i32 undef , i32 undef , i32 2 , i32 undef , i32 undef , i32 undef , i32 3 , i32 undef , i32 undef , i32 undef >
1299
+ store <16 x i32 > %v0 , ptr %ptr
1300
+ ret void
1301
+ }
0 commit comments