Skip to content

Commit 96eecb9

Browse files
committed
Rebase and fix op descriptions
1 parent 4ebcc9d commit 96eecb9

File tree

2 files changed

+39
-51
lines changed

2 files changed

+39
-51
lines changed

mlir/include/mlir/Dialect/ArmSME/IR/ArmSMEOps.td

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1235,12 +1235,11 @@ def SMopa4WayOp
12351235
Example: I16 to I64
12361236
```mlir
12371237
%result = arm_sme.smopa_4way $lhs, $rhs : vector<[8]xi16>, vector<[8]xi16> into vector<[2]x[2]xi64>
1238+
```
12381239

12391240
| Spec | Features |
12401241
| ---- | -------- |
12411242
| [SMOPA (4-way)](https://developer.arm.com/documentation/ddi0602/2023-09/SME-Instructions/SMOPA--4-way---Signed-integer-sum-of-outer-products-and-accumulate-) | +sme (32-bit), +sme-i16i64 (64-bit)|
1242-
1243-
```
12441243
}];
12451244
}
12461245

@@ -1262,15 +1261,14 @@ def SMops4WayOp
12621261
Example: I16 to I64
12631262
```mlir
12641263
%result = arm_sme.smops_4way $lhs, $rhs : vector<[8]xi16>, vector<[8]xi16> into vector<[2]x[2]xi64>
1264+
```
12651265

12661266
Refer to [smopa_4way](#arm_smesmopa_4way-arm_smesmopa_4wayop) for a
12671267
detailed description of 4-way outer products.
12681268

12691269
| Spec | Features |
12701270
| ---- | -------- |
12711271
| [SMOPS (4-way)](https://developer.arm.com/documentation/ddi0602/2023-09/SME-Instructions/SMOPS--4-way---Signed-integer-sum-of-outer-products-and-subtract-) | +sme (32-bit), +sme-i16i64 (64-bit)|
1272-
1273-
```
12741272
}];
12751273
}
12761274

@@ -1289,15 +1287,14 @@ def UMopa4WayOp
12891287
Example: I16 to I64
12901288
```mlir
12911289
%result = arm_sme.umopa_4way $lhs, $rhs : vector<[8]xi16>, vector<[8]xi16> into vector<[2]x[2]xi64>
1290+
```
12921291

12931292
Refer to [smopa_4way](#arm_smesmopa_4way-arm_smesmopa_4wayop) for a
12941293
detailed description of 4-way outer products.
12951294

12961295
| Spec | Features |
12971296
| ---- | -------- |
12981297
| [UMOPA (4-way)](https://developer.arm.com/documentation/ddi0602/2023-09/SME-Instructions/UMOPA--4-way---Unsigned-integer-sum-of-outer-products-and-accumulate-) | +sme (32-bit), +sme-i16i64 (64-bit)|
1299-
1300-
```
13011298
}];
13021299
}
13031300

@@ -1316,15 +1313,14 @@ def UMops4WayOp
13161313
Example: I16 to I64
13171314
```mlir
13181315
%result = arm_sme.umops_4way $lhs, $rhs : vector<[8]xi16>, vector<[8]xi16> into vector<[2]x[2]xi64>
1316+
```
13191317

13201318
Refer to [smopa_4way](#arm_smesmopa_4way-arm_smesmopa_4wayop) for a
13211319
detailed description of 4-way outer products.
13221320

13231321
| Spec | Features |
13241322
| ---- | -------- |
13251323
| [UMOPS (4-way)](https://developer.arm.com/documentation/ddi0602/2023-09/SME-Instructions/UMOPS--4-way---Unsigned-integer-sum-of-outer-products-and-subtract-) | +sme (32-bit), +sme-i16i64 (64-bit)|
1326-
1327-
```
13281324
}];
13291325
}
13301326

@@ -1343,15 +1339,14 @@ def SuMopa4WayOp
13431339
Example: I16 to I64
13441340
```mlir
13451341
%result = arm_sme.sumopa_4way $lhs, $rhs : vector<[8]xi16>, vector<[8]xi16> into vector<[2]x[2]xi64>
1342+
```
13461343

13471344
Refer to [smopa_4way](#arm_smesmopa_4way-arm_smesmopa_4wayop) for a
13481345
detailed description of 4-way outer products.
13491346

13501347
| Spec | Features |
13511348
| ---- | -------- |
13521349
| [SUMOPA (4-way)](https://developer.arm.com/documentation/ddi0602/2023-09/SME-Instructions/SUMOPA--Signed-by-unsigned-integer-sum-of-outer-products-and-accumulate-) | +sme (32-bit), +sme-i16i64 (64-bit)|
1353-
1354-
```
13551350
}];
13561351
}
13571352

@@ -1370,15 +1365,14 @@ def SuMops4WayOp
13701365
Example: I16 to I64
13711366
```mlir
13721367
%result = arm_sme.sumops_4way $lhs, $rhs : vector<[8]xi16>, vector<[8]xi16> into vector<[2]x[2]xi64>
1368+
```
13731369

13741370
Refer to [smopa_4way](#arm_smesmopa_4way-arm_smesmopa_4wayop) for a
13751371
detailed description of 4-way outer products.
13761372

13771373
| Spec | Features |
13781374
| ---- | -------- |
13791375
| [SUMOPS (4-way)](https://developer.arm.com/documentation/ddi0602/2023-09/SME-Instructions/SUMOPS--Signed-by-unsigned-integer-sum-of-outer-products-and-subtract-) | +sme (32-bit), +sme-i16i64 (64-bit)|
1380-
1381-
```
13821376
}];
13831377
}
13841378

@@ -1397,15 +1391,14 @@ def UsMopa4WayOp
13971391
Example: I16 to I64
13981392
```mlir
13991393
%result = arm_sme.usmopa_4way $lhs, $rhs : vector<[8]xi16>, vector<[8]xi16> into vector<[2]x[2]xi64>
1394+
```
14001395

14011396
Refer to [smopa_4way](#arm_smesmopa_4way-arm_smesmopa_4wayop) for a
14021397
detailed description of 4-way outer products.
14031398

14041399
| Spec | Features |
14051400
| ---- | -------- |
14061401
| [USMOPA (4-way)](https://developer.arm.com/documentation/ddi0602/2023-09/SME-Instructions/USMOPA--Unsigned-by-signed-integer-sum-of-outer-products-and-accumulate-) | +sme (32-bit), +sme-i16i64 (64-bit)|
1407-
1408-
```
14091402
}];
14101403
}
14111404

@@ -1424,15 +1417,14 @@ def UsMops4WayOp
14241417
Example: I16 to I64
14251418
```mlir
14261419
%result = arm_sme.usmops_4way $lhs, $rhs : vector<[8]xi16>, vector<[8]xi16> into vector<[2]x[2]xi64>
1420+
```
14271421

14281422
Refer to [smopa_4way](#arm_smesmopa_4way-arm_smesmopa_4wayop) for a
14291423
detailed description of 4-way outer products.
14301424

14311425
| Spec | Features |
14321426
| ---- | -------- |
14331427
| [USMOPS (4-way)](https://developer.arm.com/documentation/ddi0602/2023-09/SME-Instructions/USMOPS--Unsigned-by-signed-integer-sum-of-outer-products-and-subtract-) | +sme (32-bit), +sme-i16i64 (64-bit)|
1434-
1435-
```
14361428
}];
14371429
}
14381430

mlir/test/Dialect/ArmSME/outer-product-fusion.mlir

Lines changed: 31 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1180,7 +1180,37 @@ func.func @outerproduct_widening_2way__bad_defining_op(
11801180

11811181
return %1 : vector<[4]x[4]xf32>
11821182
}
1183-
<<<<<<< HEAD
1183+
1184+
// -----
1185+
1186+
// CHECK-LABEL: @outerproduct_widening_4way__bad_defining_op
1187+
// CHECK-NOT: arm_sme.fmopa_4way
1188+
// CHECK: arm_sme.outerproduct
1189+
// CHECK: arm_sme.outerproduct
1190+
// CHECK: arm_sme.outerproduct
1191+
// CHECK: arm_sme.outerproduct
1192+
// CHECK-NOT: arm_sme.fmopa_4way
1193+
func.func @outerproduct_widening_4way__bad_defining_op(
1194+
%a0 : vector<[4]xi8>, %b0 : vector<[4]xi8>,
1195+
%a1 : vector<[4]xi8>, %b1 : vector<[4]xi8>,
1196+
%a2 : vector<[4]xi32>, %b2 : vector<[4]xi32>,
1197+
%a3 : vector<[4]xi8>, %b3 : vector<[4]xi8>) -> vector<[4]x[4]xi32> {
1198+
%a0_ext = arith.extsi %a0 : vector<[4]xi8> to vector<[4]xi32>
1199+
%b0_ext = arith.extsi %b0 : vector<[4]xi8> to vector<[4]xi32>
1200+
1201+
%a1_ext = arith.extsi %a1 : vector<[4]xi8> to vector<[4]xi32>
1202+
%b1_ext = arith.extsi %b1 : vector<[4]xi8> to vector<[4]xi32>
1203+
1204+
%a3_ext = arith.extsi %a3 : vector<[4]xi8> to vector<[4]xi32>
1205+
%b3_ext = arith.extsi %b3 : vector<[4]xi8> to vector<[4]xi32>
1206+
1207+
%0 = arm_sme.outerproduct %a0_ext, %b0_ext : vector<[4]xi32>, vector<[4]xi32>
1208+
%1 = arm_sme.outerproduct %a1_ext, %b1_ext acc(%0) : vector<[4]xi32>, vector<[4]xi32>
1209+
%2 = arm_sme.outerproduct %a2, %b2 acc(%1) : vector<[4]xi32>, vector<[4]xi32>
1210+
%3 = arm_sme.outerproduct %a3_ext, %b3_ext acc(%2) : vector<[4]xi32>, vector<[4]xi32>
1211+
1212+
return %3 : vector<[4]x[4]xi32>
1213+
}
11841214

11851215
/// Negative tests for related patterns.
11861216

@@ -1233,37 +1263,3 @@ func.func @scalable_extract_from_non_arith_ext(%src: vector<[8]xf32>) -> vector<
12331263
%0 = vector.scalable.extract %src[0] : vector<[4]xf32> from vector<[8]xf32>
12341264
return %0 : vector<[4]xf32>
12351265
}
1236-
||||||| constructed merge base
1237-
=======
1238-
1239-
// -----
1240-
1241-
// CHECK-LABEL: @outerproduct_widening_4way__bad_defining_op
1242-
// CHECK-NOT: arm_sme.fmopa_4way
1243-
// CHECK: arm_sme.outerproduct
1244-
// CHECK: arm_sme.outerproduct
1245-
// CHECK: arm_sme.outerproduct
1246-
// CHECK: arm_sme.outerproduct
1247-
// CHECK-NOT: arm_sme.fmopa_4way
1248-
func.func @outerproduct_widening_4way__bad_defining_op(
1249-
%a0 : vector<[4]xi8>, %b0 : vector<[4]xi8>,
1250-
%a1 : vector<[4]xi8>, %b1 : vector<[4]xi8>,
1251-
%a2 : vector<[4]xi32>, %b2 : vector<[4]xi32>,
1252-
%a3 : vector<[4]xi8>, %b3 : vector<[4]xi8>) -> vector<[4]x[4]xi32> {
1253-
%a0_ext = arith.extsi %a0 : vector<[4]xi8> to vector<[4]xi32>
1254-
%b0_ext = arith.extsi %b0 : vector<[4]xi8> to vector<[4]xi32>
1255-
1256-
%a1_ext = arith.extsi %a1 : vector<[4]xi8> to vector<[4]xi32>
1257-
%b1_ext = arith.extsi %b1 : vector<[4]xi8> to vector<[4]xi32>
1258-
1259-
%a3_ext = arith.extsi %a3 : vector<[4]xi8> to vector<[4]xi32>
1260-
%b3_ext = arith.extsi %b3 : vector<[4]xi8> to vector<[4]xi32>
1261-
1262-
%0 = arm_sme.outerproduct %a0_ext, %b0_ext : vector<[4]xi32>, vector<[4]xi32>
1263-
%1 = arm_sme.outerproduct %a1_ext, %b1_ext acc(%0) : vector<[4]xi32>, vector<[4]xi32>
1264-
%2 = arm_sme.outerproduct %a2, %b2 acc(%1) : vector<[4]xi32>, vector<[4]xi32>
1265-
%3 = arm_sme.outerproduct %a3_ext, %b3_ext acc(%2) : vector<[4]xi32>, vector<[4]xi32>
1266-
1267-
return %3 : vector<[4]x[4]xi32>
1268-
}
1269-
>>>>>>> [mlir][ArmSME] Support 4-way widening outer products

0 commit comments

Comments
 (0)