[clang] [llvm] [AArch64][clang][llvm] Add structured sparsity outer product (TMOP) intrinsics (PR #135145)

via cfe-commits cfe-commits at lists.llvm.org
Thu Apr 10 10:45:26 PDT 2025


================
@@ -907,6 +907,48 @@ let SMETargetGuard = "sme-f16f16" in {
 }
 
 
+////////////////////////////////////////////////////////////////////////////////
+// SME2 - TMOP, SUTMOP, USTMOP
+
+multiclass USTMOP<string za, string t, list<ImmCheck> checks> {
+  def _ : SInst<"svtmopa_lane_" # za # "[_{d}_{3}]",
+                "vi2x[i", t, MergeNone, "aarch64_sme_ustmopa",
+                [IsStreaming, IsInOutZA],
+                checks>;
+}
+
+multiclass SUTMOP<string za, string t, list<ImmCheck> checks> {
+  def _ : SInst<"svtmopa_lane_" # za # "[_{d}_{3}]",
+                "vi2u[i", t, MergeNone, "aarch64_sme_sutmopa",
+                [IsStreaming, IsInOutZA],
+                checks>;
+}
+
+let SMETargetGuard = "sme2,sme-tmop" in {
+  def SVTMOPA_ZA32  : Inst<"svtmopa_lane_za32[_{d}_{d}]", "vi2d[i", "hbf",  MergeNone, "aarch64_sme_tmopa",  [IsStreaming, IsInOutZA], [ImmCheck<0, ImmCheck0_3>, ImmCheck<4, ImmCheck0_3>]>;
+  def SVSTMOPA_ZA32 : Inst<"svtmopa_lane_za32[_{d}_{d}]", "vi2d[i", "cs",   MergeNone, "aarch64_sme_stmopa", [IsStreaming, IsInOutZA], [ImmCheck<0, ImmCheck0_3>, ImmCheck<4, ImmCheck0_3>]>;
+  def SVUTMOPA_ZA32 : Inst<"svtmopa_lane_za32[_{d}_{d}]", "vi2d[i", "UcUs", MergeNone, "aarch64_sme_utmopa", [IsStreaming, IsInOutZA], [ImmCheck<0, ImmCheck0_3>, ImmCheck<4, ImmCheck0_3>]>;
+
+  defm SVSUTMOPA_S : SUTMOP<"za32", "c",  [ImmCheck<0, ImmCheck0_3>, ImmCheck<4, ImmCheck0_3>]>;
+  defm SVUSTMOPA_S : USTMOP<"za32", "Uc", [ImmCheck<0, ImmCheck0_3>, ImmCheck<4, ImmCheck0_3>]>;
+}
+
+let SMETargetGuard = "sme2,sme-tmop,sme-f16f16" in {
+  def SVTMOPA_F16 : Inst<"svtmopa_lane_za16[_{d}_{d}]", "vi2d[i", "hb", MergeNone, "aarch64_sme_tmopa", [IsStreaming, IsInOutZA], [ImmCheck<0, ImmCheck0_3>, ImmCheck<4, ImmCheck0_3>]>;
----------------
CarolineConcatto wrote:

s/[ImmCheck<0, ImmCheck0_3>, ImmCheck<4, ImmCheck0_3>]/
[ImmCheck<0, ImmCheck0_1>, ImmCheck<4, ImmCheck0_3>]

This is true for the BtoH and HtoH instructions
SVTMOPA_F16
SVTMOPA_BF16
SVTMOPA_ZA16_FPM 

https://github.com/llvm/llvm-project/pull/135145


More information about the cfe-commits mailing list