@@ -814,10 +814,10 @@ let arguments = (ins
814814 }];
815815}
816816
817- class OuterProductWideBase <string mnemonic,
818- list<Type> allowedInputVectorTypes,
819- list<Type> allowedResultVectorTypes,
820- int numOuterProducts> :
817+ class OuterProductWideningBase <string mnemonic,
818+ list<Type> allowedInputVectorTypes,
819+ list<Type> allowedResultVectorTypes,
820+ int numOuterProducts> :
821821 ArmSME_Op<mnemonic, [
822822 ArmSMETileOpInterface,
823823 AttrSizedOperandSegments,
@@ -869,14 +869,14 @@ class OuterProductWideBase<string mnemonic,
869869 }];
870870}
871871
872- class OuterProductWide2Way <string mnemonic,
873- list<Type> allowedInputVectorTypes,
874- list<Type> allowedResultVectorTypes>
875- : OuterProductWideBase <mnemonic, allowedInputVectorTypes,
876- allowedResultVectorTypes, /*numOuterProducts=*/2>;
872+ class OuterProduct2Way <string mnemonic,
873+ list<Type> allowedInputVectorTypes,
874+ list<Type> allowedResultVectorTypes>
875+ : OuterProductWideningBase <mnemonic, allowedInputVectorTypes,
876+ allowedResultVectorTypes, /*numOuterProducts=*/2>;
877877
878- def FMopaWide2WayOp
879- : OuterProductWide2Way<"fmopa_wide_2way ",
878+ def FMopa2WayOp
879+ : OuterProduct2Way<"fmopa_2way ",
880880 [ScalableVectorOfRankAndLengthAndType<[1], [8], [F16, BF16]>],
881881 [nxnxv4f32]> {
882882 let summary = "Floating-point sum of 2 outer products and accumulate";
@@ -888,14 +888,14 @@ def FMopaWide2WayOp
888888 For example (fp16 to fp32):
889889
890890 ```mlir
891- %result = arm_sme.fmopa_wide_2way %lhs, %rhs :
891+ %result = arm_sme.fmopa_2way %lhs, %rhs :
892892 vector<[8]xf16>, vector<[8]xf16> into vector<[4]x[4]xf32>
893893 ```
894894
895895 The `lhs` encodes a matrix of shape SVLSx2 and the `rhs` a matrix of
896896 2xSVLS, where SVLS (spec [1], section B2.1) is the number of 32-bit
897897 elements in a vector of SVL bits. To illustrate, below is a breakdown of
898- this operation for SVL=128 (i.e., vscale=1):
898+ this operation for fp16 to fp32, SVL=128 (i.e., vscale=1):
899899
900900 ```
901901 LHS RHS
@@ -960,19 +960,19 @@ def FMopaWide2WayOp
960960 ```mlir
961961 %a_packed = "llvm.intr.experimental.vector.interleave2"(%a0, %a1) : (vector<[4]xf16>, vector<[4]xf16>) -> vector<[8]xf16>
962962 %b_packed = "llvm.intr.experimental.vector.interleave2"(%b0, %b1) : (vector<[4]xf16>, vector<[4]xf16>) -> vector<[8]xf16>
963- %0 = arm_sme.fmopa_wide_2way %a_packed, %b_packed : vector<[8]xf16>, vector<[8]xf16> into vector<[4]x[4]xf32>
963+ %0 = arm_sme.fmopa_2way %a_packed, %b_packed : vector<[8]xf16>, vector<[8]xf16> into vector<[4]x[4]xf32>
964964 ```
965965
966- This is implemented in the `-arm-sme-outer-product-widening ` pass.
966+ This is implemented in the `-arm-sme-outer-product-fusion ` pass.
967967
968968 Example: FP16 to FP32
969969 ```mlir
970- %result = arm_sme.fmopa_wide_2way $lhs, $rhs : vector<[8]xf16>, vector<[8]xf16> into vector<[4]x[4]xf32>
970+ %result = arm_sme.fmopa_2way $lhs, $rhs : vector<[8]xf16>, vector<[8]xf16> into vector<[4]x[4]xf32>
971971 ```
972972
973973 Example: BF16 to FP32
974974 ```mlir
975- %result = arm_sme.fmopa_wide_2way $lhs, $rhs : vector<[8]xbf16>, vector<[8]xbf16> into vector<[4]x[4]xf32>
975+ %result = arm_sme.fmopa_2way $lhs, $rhs : vector<[8]xbf16>, vector<[8]xbf16> into vector<[4]x[4]xf32>
976976 ```
977977
978978 | Spec | Features |
@@ -989,27 +989,27 @@ def FMopaWide2WayOp
989989// - FMOPA 4-way FP16 to FP32
990990// once intrinsic support lands in the backend.
991991
992- def FMopsWide2WayOp
993- : OuterProductWide2Way<"fmops_wide_2way ",
992+ def FMops2WayOp
993+ : OuterProduct2Way<"fmops_2way ",
994994 [ScalableVectorOfRankAndLengthAndType<[1], [8], [F16, BF16]>],
995995 [nxnxv4f32]> {
996996 let summary = "Floating-point sum of 2 outer products and subtract";
997997 let description = [{
998- Equivalent to `fmopa_wide_2way ` but outer products are subtracted from
998+ Equivalent to `fmopa_2way ` but outer products are subtracted from
999999 destination `result`.
10001000
10011001 Example: FP16 to FP32
10021002 ```mlir
1003- %result = arm_sme.fmops_wide_2way $lhs, $rhs : vector<[8]xf16>, vector<[8]xf16> into vector<[4]x[4]xf32>
1003+ %result = arm_sme.fmops_2way $lhs, $rhs : vector<[8]xf16>, vector<[8]xf16> into vector<[4]x[4]xf32>
10041004 ```
10051005
10061006 Example: BF16 to FP32
10071007 ```mlir
1008- %result = arm_sme.fmops_wide_2way $lhs, $rhs : vector<[8]xbf16>, vector<[8]xbf16> into vector<[4]x[4]xf32>
1008+ %result = arm_sme.fmops_2way $lhs, $rhs : vector<[8]xbf16>, vector<[8]xbf16> into vector<[4]x[4]xf32>
10091009
10101010 Refer to
1011- [fmopa_wide_2way ](#arm_smefmopa_wide_2way-arm_smefmopa_wide_2wayop ) for a
1012- detailed description of 2-way outer products.
1011+ [fmopa_2way ](#arm_smefmopa_2way-arm_smefmopa_2wayop ) for a detailed
1012+ description of 2-way outer products.
10131013
10141014 | Spec | Features |
10151015 | ---- | -------- |
@@ -1019,19 +1019,19 @@ def FMopsWide2WayOp
10191019 }];
10201020}
10211021
1022- def SMopaWide2WayOp
1023- : OuterProductWide2Way<"smopa_wide_2way ",
1022+ def SMopa2WayOp
1023+ : OuterProduct2Way<"smopa_2way ",
10241024 [ScalableVectorOfRankAndLengthAndType<[1], [8], [I16]>],
10251025 [nxnxv4i32]> {
10261026 let summary = "Signed integer sum of 2 outer products and accumulate";
10271027 let description = [{
10281028 Example:
10291029 ```mlir
1030- %result = arm_sme.smopa_wide_2way $lhs, $rhs : vector<[8]xi16>, vector<[8]xi16> into vector<[4]x[4]xi32>
1030+ %result = arm_sme.smopa_2way $lhs, $rhs : vector<[8]xi16>, vector<[8]xi16> into vector<[4]x[4]xi32>
10311031
10321032 Refer to
1033- [fmopa_wide_2way ](#arm_smefmopa_wide_2way-arm_smefmopa_wide_2wayop ) for a
1034- detailed description of 2-way outer products.
1033+ [fmopa_2way ](#arm_smefmopa_2way-arm_smefmopa_2wayop ) for a detailed
1034+ description of 2-way outer products.
10351035
10361036 | Spec | Features |
10371037 | ---- | -------- |
@@ -1040,19 +1040,19 @@ def SMopaWide2WayOp
10401040 }];
10411041}
10421042
1043- def SMopsWide2WayOp
1044- : OuterProductWide2Way<"smops_wide_2way ",
1043+ def SMops2WayOp
1044+ : OuterProduct2Way<"smops_2way ",
10451045 [ScalableVectorOfRankAndLengthAndType<[1], [8], [I16]>],
10461046 [nxnxv4i32]> {
10471047 let summary = "Signed integer sum of 2 outer products and subtract";
10481048 let description = [{
10491049 Example:
10501050 ```mlir
1051- %result = arm_sme.smops_wide_2way $lhs, $rhs : vector<[8]xi16>, vector<[8]xi16> into vector<[4]x[4]xi32>
1051+ %result = arm_sme.smops_2way $lhs, $rhs : vector<[8]xi16>, vector<[8]xi16> into vector<[4]x[4]xi32>
10521052
10531053 Refer to
1054- [fmopa_wide_2way ](#arm_smefmopa_wide_2way-arm_smefmopa_wide_2wayop ) for a
1055- detailed description of 2-way outer products.
1054+ [fmopa_2way ](#arm_smefmopa_2way-arm_smefmopa_2wayop ) for a detailed
1055+ description of 2-way outer products.
10561056
10571057 | Spec | Features |
10581058 | ---- | -------- |
@@ -1061,19 +1061,19 @@ def SMopsWide2WayOp
10611061 }];
10621062}
10631063
1064- def UMopaWide2WayOp
1065- : OuterProductWide2Way<"umopa_wide_2way ",
1064+ def UMopa2WayOp
1065+ : OuterProduct2Way<"umopa_2way ",
10661066 [ScalableVectorOfRankAndLengthAndType<[1], [8], [I16]>],
10671067 [nxnxv4i32]> {
10681068 let summary = "Unsiged integer sum of 2 outer products and accumulate";
10691069 let description = [{
10701070 Example:
10711071 ```mlir
1072- %result = arm_sme.umopa_wide_2way $lhs, $rhs : vector<[8]xi16>, vector<[8]xi16> into vector<[4]x[4]xi32>
1072+ %result = arm_sme.umopa_2way $lhs, $rhs : vector<[8]xi16>, vector<[8]xi16> into vector<[4]x[4]xi32>
10731073
10741074 Refer to
1075- [fmopa_wide_2way ](#arm_smefmopa_wide_2way-arm_smefmopa_wide_2wayop ) for a
1076- detailed description of 2-way outer products.
1075+ [fmopa_2way ](#arm_smefmopa_2way-arm_smefmopa_2wayop ) for a detailed
1076+ description of 2-way outer products.
10771077
10781078 | Spec | Features |
10791079 | ---- | -------- |
@@ -1082,19 +1082,19 @@ def UMopaWide2WayOp
10821082 }];
10831083}
10841084
1085- def UMopsWide2WayOp
1086- : OuterProductWide2Way<"umops_wide_2way ",
1085+ def UMops2WayOp
1086+ : OuterProduct2Way<"umops_2way ",
10871087 [ScalableVectorOfRankAndLengthAndType<[1], [8], [I16]>],
10881088 [nxnxv4i32]> {
10891089 let summary = "Unsiged integer sum of 2 outer products and subtract";
10901090 let description = [{
10911091 Example:
10921092 ```mlir
1093- %result = arm_sme.umops_wide_2way $lhs, $rhs : vector<[8]xi16>, vector<[8]xi16> into vector<[4]x[4]xi32>
1093+ %result = arm_sme.umops_2way $lhs, $rhs : vector<[8]xi16>, vector<[8]xi16> into vector<[4]x[4]xi32>
10941094
10951095 Refer to
1096- [fmopa_wide_2way ](#arm_smefmopa_wide_2way-arm_smefmopa_wide_2wayop ) for a
1097- detailed description of 2-way outer products.
1096+ [fmopa_2way ](#arm_smefmopa_2way-arm_smefmopa_2wayop ) for a detailed
1097+ description of 2-way outer products.
10981098
10991099 | Spec | Features |
11001100 | ---- | -------- |
0 commit comments