@@ -1245,9 +1245,9 @@ func.func @extract_element_with_value_2d(%arg0: vector<1x16xf32>, %arg1: index)
1245
1245
1246
1246
// -----
1247
1247
1248
- // CHECK-LABEL: @insert_element_0d
1248
+ // CHECK-LABEL: @insertelement_0d
1249
1249
// CHECK-SAME: %[[A:.*]]: f32,
1250
- func.func @insert_element_0d (%a: f32 , %b: vector <f32 >) -> vector <f32 > {
1250
+ func.func @insertelement_0d (%a: f32 , %b: vector <f32 >) -> vector <f32 > {
1251
1251
// CHECK: %[[B:.*]] = builtin.unrealized_conversion_cast %{{.*}} :
1252
1252
// CHECK: vector<f32> to vector<1xf32>
1253
1253
// CHECK: %[[C0:.*]] = llvm.mlir.constant(0 : index) : i64
@@ -1258,18 +1258,30 @@ func.func @insert_element_0d(%a: f32, %b: vector<f32>) -> vector<f32> {
1258
1258
1259
1259
// -----
1260
1260
1261
- func.func @insert_element (%arg0: f32 , %arg1: vector <4 xf32 >) -> vector <4 xf32 > {
1261
+ func.func @insertelement (%arg0: f32 , %arg1: vector <4 xf32 >) -> vector <4 xf32 > {
1262
1262
%0 = arith.constant 3 : i32
1263
1263
%1 = vector.insertelement %arg0 , %arg1 [%0 : i32 ] : vector <4 xf32 >
1264
1264
return %1 : vector <4 xf32 >
1265
1265
}
1266
- // CHECK-LABEL: @insert_element (
1266
+ // CHECK-LABEL: @insertelement (
1267
1267
// CHECK-SAME: %[[A:.*]]: f32,
1268
1268
// CHECK-SAME: %[[B:.*]]: vector<4xf32>)
1269
1269
// CHECK: %[[c:.*]] = arith.constant 3 : i32
1270
1270
// CHECK: %[[x:.*]] = llvm.insertelement %[[A]], %[[B]][%[[c]] : i32] : vector<4xf32>
1271
1271
// CHECK: return %[[x]] : vector<4xf32>
1272
1272
1273
+ func.func @insertelement_scalable (%arg0: f32 , %arg1: vector <[4 ]xf32 >) -> vector <[4 ]xf32 > {
1274
+ %0 = arith.constant 3 : i32
1275
+ %1 = vector.insertelement %arg0 , %arg1 [%0 : i32 ] : vector <[4 ]xf32 >
1276
+ return %1 : vector <[4 ]xf32 >
1277
+ }
1278
+ // CHECK-LABEL: @insertelement_scalable(
1279
+ // CHECK-SAME: %[[A:.*]]: f32,
1280
+ // CHECK-SAME: %[[B:.*]]: vector<[4]xf32>)
1281
+ // CHECK: %[[c:.*]] = arith.constant 3 : i32
1282
+ // CHECK: %[[x:.*]] = llvm.insertelement %[[A]], %[[B]][%[[c]] : i32] : vector<[4]xf32>
1283
+ // CHECK: return %[[x]] : vector<[4]xf32>
1284
+
1273
1285
// -----
1274
1286
1275
1287
func.func @insert_element_index (%arg0: f32 , %arg1: vector <4 xf32 >) -> vector <4 xf32 > {
@@ -1285,6 +1297,19 @@ func.func @insert_element_index(%arg0: f32, %arg1: vector<4xf32>) -> vector<4xf3
1285
1297
// CHECK: %[[x:.*]] = llvm.insertelement %[[A]], %[[B]][%[[i]] : i64] : vector<4xf32>
1286
1298
// CHECK: return %[[x]] : vector<4xf32>
1287
1299
1300
+ func.func @insertelement_index_scalable (%arg0: f32 , %arg1: vector <[4 ]xf32 >) -> vector <[4 ]xf32 > {
1301
+ %0 = arith.constant 3 : index
1302
+ %1 = vector.insertelement %arg0 , %arg1 [%0 : index ] : vector <[4 ]xf32 >
1303
+ return %1 : vector <[4 ]xf32 >
1304
+ }
1305
+ // CHECK-LABEL: @insertelement_index_scalable(
1306
+ // CHECK-SAME: %[[A:.*]]: f32,
1307
+ // CHECK-SAME: %[[B:.*]]: vector<[4]xf32>)
1308
+ // CHECK: %[[c:.*]] = arith.constant 3 : index
1309
+ // CHECK: %[[i:.*]] = builtin.unrealized_conversion_cast %[[c]] : index to i64
1310
+ // CHECK: %[[x:.*]] = llvm.insertelement %[[A]], %[[B]][%[[i]] : i64] : vector<[4]xf32>
1311
+ // CHECK: return %[[x]] : vector<[4]xf32>
1312
+
1288
1313
// -----
1289
1314
1290
1315
func.func @insert_element_into_vec_1d (%arg0: f32 , %arg1: vector <4 xf32 >) -> vector <4 xf32 > {
@@ -1296,6 +1321,15 @@ func.func @insert_element_into_vec_1d(%arg0: f32, %arg1: vector<4xf32>) -> vecto
1296
1321
// CHECK: llvm.insertelement {{.*}}, {{.*}}[{{.*}} : i64] : vector<4xf32>
1297
1322
// CHECK: return {{.*}} : vector<4xf32>
1298
1323
1324
+ func.func @insert_element_into_vec_1d_scalable (%arg0: f32 , %arg1: vector <[4 ]xf32 >) -> vector <[4 ]xf32 > {
1325
+ %0 = vector.insert %arg0 , %arg1 [3 ] : f32 into vector <[4 ]xf32 >
1326
+ return %0 : vector <[4 ]xf32 >
1327
+ }
1328
+ // CHECK-LABEL: @insert_element_into_vec_1d_scalable
1329
+ // CHECK: llvm.mlir.constant(3 : i64) : i64
1330
+ // CHECK: llvm.insertelement {{.*}}, {{.*}}[{{.*}} : i64] : vector<[4]xf32>
1331
+ // CHECK: return {{.*}} : vector<[4]xf32>
1332
+
1299
1333
// -----
1300
1334
1301
1335
func.func @insert_index_element_into_vec_1d (%arg0: index , %arg1: vector <4 xindex >) -> vector <4 xindex > {
@@ -1312,6 +1346,21 @@ func.func @insert_index_element_into_vec_1d(%arg0: index, %arg1: vector<4xindex>
1312
1346
// CHECK: %[[T5:.*]] = builtin.unrealized_conversion_cast %[[T4]] : vector<4xi64> to vector<4xindex>
1313
1347
// CHECK: return %[[T5]] : vector<4xindex>
1314
1348
1349
+
1350
+ func.func @insert_index_element_into_vec_1d_scalable (%arg0: index , %arg1: vector <[4 ]xindex >) -> vector <[4 ]xindex > {
1351
+ %0 = vector.insert %arg0 , %arg1 [3 ] : index into vector <[4 ]xindex >
1352
+ return %0 : vector <[4 ]xindex >
1353
+ }
1354
+ // CHECK-LABEL: @insert_index_element_into_vec_1d_scalable(
1355
+ // CHECK-SAME: %[[A:.*]]: index,
1356
+ // CHECK-SAME: %[[B:.*]]: vector<[4]xindex>)
1357
+ // CHECK-DAG: %[[T0:.*]] = builtin.unrealized_conversion_cast %[[A]] : index to i64
1358
+ // CHECK-DAG: %[[T1:.*]] = builtin.unrealized_conversion_cast %[[B]] : vector<[4]xindex> to vector<[4]xi64>
1359
+ // CHECK: %[[T3:.*]] = llvm.mlir.constant(3 : i64) : i64
1360
+ // CHECK: %[[T4:.*]] = llvm.insertelement %[[T0]], %[[T1]][%[[T3]] : i64] : vector<[4]xi64>
1361
+ // CHECK: %[[T5:.*]] = builtin.unrealized_conversion_cast %[[T4]] : vector<[4]xi64> to vector<[4]xindex>
1362
+ // CHECK: return %[[T5]] : vector<[4]xindex>
1363
+
1315
1364
// -----
1316
1365
1317
1366
func.func @insert_vec_2d_into_vec_3d (%arg0: vector <8 x16 xf32 >, %arg1: vector <4 x8 x16 xf32 >) -> vector <4 x8 x16 xf32 > {
@@ -1322,6 +1371,14 @@ func.func @insert_vec_2d_into_vec_3d(%arg0: vector<8x16xf32>, %arg1: vector<4x8x
1322
1371
// CHECK: llvm.insertvalue {{.*}}, {{.*}}[3] : !llvm.array<4 x array<8 x vector<16xf32>>>
1323
1372
// CHECK: return {{.*}} : vector<4x8x16xf32>
1324
1373
1374
+ func.func @insert_vec_2d_into_vec_3d_scalable (%arg0: vector <8 x[16 ]xf32 >, %arg1: vector <4 x8 x[16 ]xf32 >) -> vector <4 x8 x[16 ]xf32 > {
1375
+ %0 = vector.insert %arg0 , %arg1 [3 ] : vector <8 x[16 ]xf32 > into vector <4 x8 x[16 ]xf32 >
1376
+ return %0 : vector <4 x8 x[16 ]xf32 >
1377
+ }
1378
+ // CHECK-LABEL: @insert_vec_2d_into_vec_3d_scalable
1379
+ // CHECK: llvm.insertvalue {{.*}}, {{.*}}[3] : !llvm.array<4 x array<8 x vector<[16]xf32>>>
1380
+ // CHECK: return {{.*}} : vector<4x8x[16]xf32>
1381
+
1325
1382
// -----
1326
1383
1327
1384
func.func @insert_vec_1d_into_vec_3d (%arg0: vector <16 xf32 >, %arg1: vector <4 x8 x16 xf32 >) -> vector <4 x8 x16 xf32 > {
@@ -1332,6 +1389,14 @@ func.func @insert_vec_1d_into_vec_3d(%arg0: vector<16xf32>, %arg1: vector<4x8x16
1332
1389
// CHECK: llvm.insertvalue {{.*}}, {{.*}}[3, 7] : !llvm.array<4 x array<8 x vector<16xf32>>>
1333
1390
// CHECK: return {{.*}} : vector<4x8x16xf32>
1334
1391
1392
+ func.func @insert_vec_1d_into_vec_3d_scalable (%arg0: vector <[16 ]xf32 >, %arg1: vector <4 x8 x[16 ]xf32 >) -> vector <4 x8 x[16 ]xf32 > {
1393
+ %0 = vector.insert %arg0 , %arg1 [3 , 7 ] : vector <[16 ]xf32 > into vector <4 x8 x[16 ]xf32 >
1394
+ return %0 : vector <4 x8 x[16 ]xf32 >
1395
+ }
1396
+ // CHECK-LABEL: @insert_vec_1d_into_vec_3d_scalable
1397
+ // CHECK: llvm.insertvalue {{.*}}, {{.*}}[3, 7] : !llvm.array<4 x array<8 x vector<[16]xf32>>>
1398
+ // CHECK: return {{.*}} : vector<4x8x[16]xf32>
1399
+
1335
1400
// -----
1336
1401
1337
1402
func.func @insert_element_into_vec_3d (%arg0: f32 , %arg1: vector <4 x8 x16 xf32 >) -> vector <4 x8 x16 xf32 > {
@@ -1345,6 +1410,17 @@ func.func @insert_element_into_vec_3d(%arg0: f32, %arg1: vector<4x8x16xf32>) ->
1345
1410
// CHECK: llvm.insertvalue {{.*}}, {{.*}}[3, 7] : !llvm.array<4 x array<8 x vector<16xf32>>>
1346
1411
// CHECK: return {{.*}} : vector<4x8x16xf32>
1347
1412
1413
+ func.func @insert_element_into_vec_3d_scalable (%arg0: f32 , %arg1: vector <4 x8 x[16 ]xf32 >) -> vector <4 x8 x[16 ]xf32 > {
1414
+ %0 = vector.insert %arg0 , %arg1 [3 , 7 , 15 ] : f32 into vector <4 x8 x[16 ]xf32 >
1415
+ return %0 : vector <4 x8 x[16 ]xf32 >
1416
+ }
1417
+ // CHECK-LABEL: @insert_element_into_vec_3d_scalable
1418
+ // CHECK: llvm.extractvalue {{.*}}[3, 7] : !llvm.array<4 x array<8 x vector<[16]xf32>>>
1419
+ // CHECK: llvm.mlir.constant(15 : i64) : i64
1420
+ // CHECK: llvm.insertelement {{.*}}, {{.*}}[{{.*}} : i64] : vector<[16]xf32>
1421
+ // CHECK: llvm.insertvalue {{.*}}, {{.*}}[3, 7] : !llvm.array<4 x array<8 x vector<[16]xf32>>>
1422
+ // CHECK: return {{.*}} : vector<4x8x[16]xf32>
1423
+
1348
1424
// -----
1349
1425
1350
1426
func.func @insert_element_with_value_1d (%arg0: vector <16 xf32 >, %arg1: f32 , %arg2: index )
@@ -1358,6 +1434,17 @@ func.func @insert_element_with_value_1d(%arg0: vector<16xf32>, %arg1: f32, %arg2
1358
1434
// CHECK: %[[UC:.+]] = builtin.unrealized_conversion_cast %[[INDEX]] : index to i64
1359
1435
// CHECK: llvm.insertelement %[[SRC]], %[[DST]][%[[UC]] : i64] : vector<16xf32>
1360
1436
1437
+ func.func @insert_element_with_value_1d_scalable (%arg0: vector <[16 ]xf32 >, %arg1: f32 , %arg2: index )
1438
+ -> vector <[16 ]xf32 > {
1439
+ %0 = vector.insert %arg1 , %arg0 [%arg2 ]: f32 into vector <[16 ]xf32 >
1440
+ return %0 : vector <[16 ]xf32 >
1441
+ }
1442
+
1443
+ // CHECK-LABEL: @insert_element_with_value_1d_scalable
1444
+ // CHECK-SAME: %[[DST:.+]]: vector<16xf32>, %[[SRC:.+]]: f32, %[[INDEX:.+]]: index
1445
+ // CHECK: %[[UC:.+]] = builtin.unrealized_conversion_cast %[[INDEX]] : index to i64
1446
+ // CHECK: llvm.insertelement %[[SRC]], %[[DST]][%[[UC]] : i64] : vector<16xf32>
1447
+
1361
1448
// -----
1362
1449
1363
1450
func.func @insert_element_with_value_2d (%base: vector <1 x16 xf32 >, %value: f32 , %idx: index )
0 commit comments