Skip to content

[PowerPC][NFC] Refactor PPCInstrFutureMMA.td to combine sections #151194

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

lei137
Copy link
Contributor

@lei137 lei137 commented Jul 29, 2025

Combine same predicate sections into one and move some mma instructions into the proper section.

@lei137 lei137 requested a review from maryammo July 29, 2025 17:38
@lei137 lei137 requested a review from amy-kwan July 29, 2025 17:38
@llvmbot
Copy link
Member

llvmbot commented Jul 29, 2025

@llvm/pr-subscribers-backend-powerpc

Author: Lei Huang (lei137)

Changes

Combine same predicate sections into one and move some mma instructions into the proper section.


Full diff: https://github.com/llvm/llvm-project/pull/151194.diff

1 Files Affected:

  • (modified) llvm/lib/Target/PowerPC/PPCInstrFutureMMA.td (+141-132)
diff --git a/llvm/lib/Target/PowerPC/PPCInstrFutureMMA.td b/llvm/lib/Target/PowerPC/PPCInstrFutureMMA.td
index ef8b27f9b8d36..30eeddabd4721 100644
--- a/llvm/lib/Target/PowerPC/PPCInstrFutureMMA.td
+++ b/llvm/lib/Target/PowerPC/PPCInstrFutureMMA.td
@@ -8,6 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 // This file describes the instructions introduced for the Future CPU for MMA.
+// Please reference "PPCInstrVSX.td" for file structure.
 //
 //===----------------------------------------------------------------------===//
 
@@ -390,7 +391,9 @@ class XX2Form_AT3_XB6_ID2_E1_BL2<bits<6> opcode, bits<9> xo, dag OOL, dag IOL,
   let Inst{31} = 0;
 }
 
-let Predicates = [IsISAFuture] in {
+//-------------------------- Instruction definitions -------------------------//
+
+let Predicates = [MMA, IsISAFuture] in {
   def DMXXEXTFDMR512 : XX3Form_AT3_XABp5_P1<60, 226,
                                             (outs vsrprc:$XAp, vsrprc:$XBp),
                                             (ins wacc:$AT),
@@ -437,188 +440,194 @@ let Predicates = [IsISAFuture] in {
   def DMSETDMRZ : XForm_AT3<31, 2, 177, (outs dmr:$AT), (ins),
                             "dmsetdmrz $AT", NoItinerary,
                             [(set v1024i1:$AT, (int_ppc_mma_dmsetdmrz))]>;
-}
 
-// MMA+ accumulating/non-accumulating instructions.
-
-// DMXVI8GERX4, DMXVI8GERX4PP, PMDMXVI8GERX4,  PMDMXVI8GERX4PP
-defm DMXVI8GERX4 : DMR_UM_M448_XOEO<59, 10, (ins vsrprc:$XAp, vsrc:$XB),
-                               "dmxvi8gerx4", "$AT, $XAp, $XB">;
-
-let Predicates = [MMA, IsISAFuture] in {
-  def DMXVI8GERX4SPP :
-    XX3Form_AT3_XAp5B6<59, 98, (outs dmr:$AT), (ins dmr:$ATi, vsrprc:$XAp, vsrc:$XB),
-                     "dmxvi8gerx4spp $AT, $XAp, $XB", IIC_VecGeneral, []>,
-    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
+  // DMXVI8GERX4, DMXVI8GERX4PP, PMDMXVI8GERX4,  PMDMXVI8GERX4PP
+  defm DMXVI8GERX4 : DMR_UM_M448_XOEO<59, 10, (ins vsrprc:$XAp, vsrc:$XB),
+                                      "dmxvi8gerx4", "$AT, $XAp, $XB">;
+
+  // DMXVBF16GERX2, DMXVBF16GERX2PP, DMXVBF16GERX2PN, dMXVBF16GERX2NP,
+  // DMXVBF16GERX2NN PMDMXVBF16GERX2, PMDMXVBF16GERX2PP, PMDMXVBF16GERX2PN,
+  // PMDMXVBF16GERX2NP, PMDMXVBF16GERX2NN
+  defm DMXVBF16GERX2
+      : DMR_NEG_UM_M284_XOXORf939a0<59, 74, (ins vsrprc:$XAp, vsrc:$XB),
+                                    "dmxvbf16gerx2", "$AT, $XAp, $XB">;
+
+  // DMXVF16GERX2, DMXVF16GERX2PP, DMXVF16GERX2PN, dMXVF16GERX2NP,
+  // DMXVF16GERX2NN PMDMXVF16GERX2, PMDMXVF16GERX2PP, PMDMXVF16GERX2PN,
+  // PMDMXVF16GERX2NP, PMDMXVF16GERX2NN
+  defm DMXVF16GERX2
+      : DMR_NEG_UM_M284_XOXORd11188<59, 66, (ins vsrprc:$XAp, vsrc:$XB),
+                                    "dmxvf16gerx2", "$AT, $XAp, $XB">;
+
+  // DMF cryptography [support] Instructions
+  def DMSHA2HASH
+      : XForm_AT3_T1_AB3<
+            31, 14, 177, (outs dmr:$AT), (ins dmr:$ATi, dmr:$AB, u1imm:$T),
+            "dmsha2hash $AT, $AB, $T",
+            [(set v1024i1:$AT, (int_ppc_mma_dmsha2hash v1024i1:$ATi,
+                                   v1024i1:$AB, timm:$T))]>,
+        RegConstraint<"$ATi = $AT">,
+        NoEncode<"$ATi">;
+  def DMSHA3HASH
+      : XForm_ATp2_SR5<31, 15, 177, (outs dmrp:$ATp),
+                       (ins dmrp:$ATpi, u5imm:$SR), "dmsha3hash $ATp, $SR",
+                       [(set v2048i1:$ATp,
+                           (int_ppc_mma_dmsha3hash v2048i1:$ATpi, timm:$SR))]>,
+        RegConstraint<"$ATpi = $ATp">,
+        NoEncode<"$ATpi">;
+  def DMXXSHAPAD
+      : XX2Form_AT3_XB6_ID2_E1_BL2<60, 421, (outs dmr:$AT),
+                                   (ins dmr:$ATi, vsrc:$XB, u2imm:$ID, u1imm:$E,
+                                       u2imm:$BL),
+                                   "dmxxshapad $AT, $XB, $ID, $E, $BL", []>,
+        RegConstraint<"$ATi = $AT">,
+        NoEncode<"$ATi">;
+
+  // MMA+ accumulating/non-accumulating instructions.
+  def DMXVI8GERX4SPP
+      : XX3Form_AT3_XAp5B6<59, 98, (outs dmr:$AT),
+                           (ins dmr:$ATi, vsrprc:$XAp, vsrc:$XB),
+                           "dmxvi8gerx4spp $AT, $XAp, $XB", IIC_VecGeneral, []>,
+        RegConstraint<"$ATi = $AT">,
+        NoEncode<"$ATi">;
 }
 
 let Predicates = [MMA, PrefixInstrs, IsISAFuture] in {
-  def PMDMXVI8GERX4SPP :
-    MMIRR_XX3Form_X8YP4_XAp5B6<59, 98, (outs dmr:$AT),
-                            (ins dmr:$ATi, vsrprc:$XAp,vsrc:$XB, u8imm:$XMSK,
-                             u4imm:$YMSK, u4imm:$PMSK),
-                            "pmdmxvi8gerx4spp $AT, $XAp, $XB, $XMSK, $YMSK, $PMSK",
-                            IIC_VecGeneral, []>,
-    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
+  def PMDMXVI8GERX4SPP
+      : MMIRR_XX3Form_X8YP4_XAp5B6<
+            59, 98, (outs dmr:$AT),
+            (ins dmr:$ATi, vsrprc:$XAp, vsrc:$XB, u8imm:$XMSK, u4imm:$YMSK,
+                u4imm:$PMSK),
+            "pmdmxvi8gerx4spp $AT, $XAp, $XB, $XMSK, $YMSK, $PMSK",
+            IIC_VecGeneral, []>,
+        RegConstraint<"$ATi = $AT">,
+        NoEncode<"$ATi">;
 }
 
-// DMXVBF16GERX2, DMXVBF16GERX2PP, DMXVBF16GERX2PN, dMXVBF16GERX2NP, DMXVBF16GERX2NN
-// PMDMXVBF16GERX2, PMDMXVBF16GERX2PP, PMDMXVBF16GERX2PN, PMDMXVBF16GERX2NP, PMDMXVBF16GERX2NN
-defm DMXVBF16GERX2 : DMR_NEG_UM_M284_XOXORf939a0<59, 74, (ins vsrprc:$XAp, vsrc:$XB),
-                                         "dmxvbf16gerx2", "$AT, $XAp, $XB">;
+//---------------------------- Anonymous Patterns ----------------------------//
+// Predicate combinations available:
+// [IsISAFuture]
+// [MMA, IsISAFuture]
+// [MMA, PrefixInstrs, IsISAFuture]
 
-// DMXVF16GERX2, DMXVF16GERX2PP, DMXVF16GERX2PN, dMXVF16GERX2NP, DMXVF16GERX2NN
-// PMDMXVF16GERX2, PMDMXVF16GERX2PP, PMDMXVF16GERX2PN, PMDMXVF16GERX2NP, PMDMXVF16GERX2NN
-defm DMXVF16GERX2 : DMR_NEG_UM_M284_XOXORd11188<59, 66, (ins vsrprc:$XAp, vsrc:$XB),
-                                         "dmxvf16gerx2", "$AT, $XAp, $XB">;
-
-// DMF cryptography [support] Instructions
 let Predicates = [IsISAFuture] in {
-  def DMSHA2HASH :
-    XForm_AT3_T1_AB3<31, 14, 177, (outs dmr:$AT), (ins dmr:$ATi, dmr:$AB, u1imm:$T),
-                     "dmsha2hash $AT, $AB, $T",
-                     [(set v1024i1:$AT, (int_ppc_mma_dmsha2hash v1024i1:$ATi, v1024i1:$AB, timm:$T))]>,
-                     RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
-
-  def DMSHA3HASH :
-    XForm_ATp2_SR5<31, 15, 177, (outs dmrp:$ATp), (ins dmrp:$ATpi , u5imm:$SR),
-                   "dmsha3hash $ATp, $SR",
-                   [(set v2048i1:$ATp, (int_ppc_mma_dmsha3hash v2048i1:$ATpi, timm:$SR))]>,
-                   RegConstraint<"$ATpi = $ATp">, NoEncode<"$ATpi">;
-
-  def DMXXSHAPAD :
-    XX2Form_AT3_XB6_ID2_E1_BL2<60, 421, (outs dmr:$AT),
-                               (ins dmr:$ATi, vsrc:$XB, u2imm:$ID, u1imm:$E, u2imm:$BL),
-                               "dmxxshapad $AT, $XB, $ID, $E, $BL", []>,
-                               RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
+  // Cryptography Intrinsic
+  def : Pat<(v1024i1(int_ppc_mma_dmxxshapad v1024i1:$ATi, v16i8:$XB, timm:$ID,
+                timm:$E, timm:$BL)),
+            (DMXXSHAPAD $ATi, RCCp.BToVSRC, $ID, $E, $BL)>;
 }
 
-// MMA+ Intrinsics
 let Predicates = [MMA, IsISAFuture] in {
-  def : Pat<(v1024i1 (int_ppc_mma_dmxvi8gerx4 v256i1:$XAp, v16i8:$XB)),
+  // MMA+ Intrinsics
+  def : Pat<(v1024i1(int_ppc_mma_dmxvi8gerx4 v256i1:$XAp, v16i8:$XB)),
             (DMXVI8GERX4 $XAp, RCCp.BToVSRC)>;
-  def : Pat<(v1024i1 (int_ppc_mma_dmxvi8gerx4pp v1024i1:$ATi, v256i1:$XAp, v16i8:$XB)),
+  def : Pat<(v1024i1(int_ppc_mma_dmxvi8gerx4pp v1024i1:$ATi, v256i1:$XAp,
+                v16i8:$XB)),
             (DMXVI8GERX4PP $ATi, $XAp, RCCp.BToVSRC)>;
-
-  def : Pat<(v1024i1 (int_ppc_mma_dmxvi8gerx4spp v1024i1:$ATi, v256i1:$XAp, v16i8:$XB)),
+  def : Pat<(v1024i1(int_ppc_mma_dmxvi8gerx4spp v1024i1:$ATi, v256i1:$XAp,
+                v16i8:$XB)),
             (DMXVI8GERX4SPP $ATi, $XAp, RCCp.BToVSRC)>;
-
-  def : Pat<(v1024i1 (int_ppc_mma_dmxvbf16gerx2 v256i1:$XAp, v16i8:$XB)),
+  def : Pat<(v1024i1(int_ppc_mma_dmxvbf16gerx2 v256i1:$XAp, v16i8:$XB)),
             (DMXVBF16GERX2 $XAp, RCCp.BToVSRC)>;
-
-  def : Pat<(v1024i1 (int_ppc_mma_dmxvbf16gerx2pp v1024i1:$ATi, v256i1:$XAp, v16i8:$XB)),
+  def : Pat<(v1024i1(int_ppc_mma_dmxvbf16gerx2pp v1024i1:$ATi, v256i1:$XAp,
+                v16i8:$XB)),
             (DMXVBF16GERX2PP $ATi, $XAp, RCCp.BToVSRC)>;
-
-  def : Pat<(v1024i1 (int_ppc_mma_dmxvbf16gerx2pn v1024i1:$ATi, v256i1:$XAp, v16i8:$XB)),
+  def : Pat<(v1024i1(int_ppc_mma_dmxvbf16gerx2pn v1024i1:$ATi, v256i1:$XAp,
+                v16i8:$XB)),
             (DMXVBF16GERX2PN $ATi, $XAp, RCCp.BToVSRC)>;
-
-  def : Pat<(v1024i1 (int_ppc_mma_dmxvbf16gerx2np v1024i1:$ATi, v256i1:$XAp, v16i8:$XB)),
+  def : Pat<(v1024i1(int_ppc_mma_dmxvbf16gerx2np v1024i1:$ATi, v256i1:$XAp,
+                v16i8:$XB)),
             (DMXVBF16GERX2NP $ATi, $XAp, RCCp.BToVSRC)>;
-
-  def : Pat<(v1024i1 (int_ppc_mma_dmxvbf16gerx2nn v1024i1:$ATi, v256i1:$XAp, v16i8:$XB)),
+  def : Pat<(v1024i1(int_ppc_mma_dmxvbf16gerx2nn v1024i1:$ATi, v256i1:$XAp,
+                v16i8:$XB)),
             (DMXVBF16GERX2NN $ATi, $XAp, RCCp.BToVSRC)>;
-
-  def : Pat<(v1024i1 (int_ppc_mma_dmxvf16gerx2 v256i1:$XAp, v16i8:$XB)),
+  def : Pat<(v1024i1(int_ppc_mma_dmxvf16gerx2 v256i1:$XAp, v16i8:$XB)),
             (DMXVF16GERX2 $XAp, RCCp.BToVSRC)>;
-
-  def : Pat<(v1024i1 (int_ppc_mma_dmxvf16gerx2pp v1024i1:$ATi, v256i1:$XAp, v16i8:$XB)),
+  def : Pat<(v1024i1(int_ppc_mma_dmxvf16gerx2pp v1024i1:$ATi, v256i1:$XAp,
+                v16i8:$XB)),
             (DMXVF16GERX2PP $ATi, $XAp, RCCp.BToVSRC)>;
-
-  def : Pat<(v1024i1 (int_ppc_mma_dmxvf16gerx2pn v1024i1:$ATi, v256i1:$XAp, v16i8:$XB)),
+  def : Pat<(v1024i1(int_ppc_mma_dmxvf16gerx2pn v1024i1:$ATi, v256i1:$XAp,
+                v16i8:$XB)),
             (DMXVF16GERX2PN $ATi, $XAp, RCCp.BToVSRC)>;
-
-  def : Pat<(v1024i1 (int_ppc_mma_dmxvf16gerx2np v1024i1:$ATi, v256i1:$XAp, v16i8:$XB)),
+  def : Pat<(v1024i1(int_ppc_mma_dmxvf16gerx2np v1024i1:$ATi, v256i1:$XAp,
+                v16i8:$XB)),
             (DMXVF16GERX2NP $ATi, $XAp, RCCp.BToVSRC)>;
-
-  def : Pat<(v1024i1 (int_ppc_mma_dmxvf16gerx2nn v1024i1:$ATi, v256i1:$XAp, v16i8:$XB)),
+  def : Pat<(v1024i1(int_ppc_mma_dmxvf16gerx2nn v1024i1:$ATi, v256i1:$XAp,
+                v16i8:$XB)),
             (DMXVF16GERX2NN $ATi, $XAp, RCCp.BToVSRC)>;
 }
 
 let Predicates = [MMA, PrefixInstrs, IsISAFuture] in {
-  def : Pat<(v1024i1 (int_ppc_mma_pmdmxvi8gerx4 v256i1:$XAp, v16i8:$XB, Msk8Imm:$XMSK,
-                                            Msk4Imm:$YMSK, Msk4Imm:$PMSK)),
-            (PMDMXVI8GERX4 $XAp, RCCp.BToVSRC, Msk8Imm:$XMSK,
-                        Msk4Imm:$YMSK, Msk4Imm:$PMSK)>;
-
-  def : Pat<(v1024i1 (int_ppc_mma_pmdmxvi8gerx4pp v1024i1:$ATi, v256i1:$XAp, v16i8:$XB,
-                                              Msk8Imm:$XMSK, Msk4Imm:$YMSK,
-                                              Msk4Imm:$PMSK)),
+  def : Pat<(v1024i1(int_ppc_mma_pmdmxvi8gerx4 v256i1:$XAp, v16i8:$XB,
+                Msk8Imm:$XMSK, Msk4Imm:$YMSK, Msk4Imm:$PMSK)),
+            (PMDMXVI8GERX4 $XAp, RCCp.BToVSRC, Msk8Imm:$XMSK, Msk4Imm:$YMSK,
+                Msk4Imm:$PMSK)>;
+
+  def : Pat<(v1024i1(int_ppc_mma_pmdmxvi8gerx4pp v1024i1:$ATi, v256i1:$XAp,
+                v16i8:$XB, Msk8Imm:$XMSK, Msk4Imm:$YMSK, Msk4Imm:$PMSK)),
             (PMDMXVI8GERX4PP $ATi, $XAp, RCCp.BToVSRC, Msk8Imm:$XMSK,
-                          Msk4Imm:$YMSK, Msk4Imm:$PMSK)>;
+                Msk4Imm:$YMSK, Msk4Imm:$PMSK)>;
 
-  def : Pat<(v1024i1 (int_ppc_mma_pmdmxvi8gerx4spp v1024i1:$ATi, v256i1:$XAp, v16i8:$XB,
-                                               Msk8Imm:$XMSK, Msk4Imm:$YMSK,
-                                               Msk4Imm:$PMSK)),
+  def : Pat<(v1024i1(int_ppc_mma_pmdmxvi8gerx4spp v1024i1:$ATi, v256i1:$XAp,
+                v16i8:$XB, Msk8Imm:$XMSK, Msk4Imm:$YMSK, Msk4Imm:$PMSK)),
             (PMDMXVI8GERX4SPP $ATi, $XAp, RCCp.BToVSRC, Msk8Imm:$XMSK,
-                           Msk4Imm:$YMSK, Msk4Imm:$PMSK)>;
+                Msk4Imm:$YMSK, Msk4Imm:$PMSK)>;
 
-  def : Pat<(v1024i1 (int_ppc_mma_pmdmxvbf16gerx2 v256i1:$XAp, v16i8:$XB, Msk8Imm:$XMSK,
-                                            Msk4Imm:$YMSK, Msk2Imm:$PMSK)),
-            (PMDMXVBF16GERX2 $XAp, RCCp.BToVSRC, Msk8Imm:$XMSK,
-                        Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
+  def : Pat<(v1024i1(int_ppc_mma_pmdmxvbf16gerx2 v256i1:$XAp, v16i8:$XB,
+                Msk8Imm:$XMSK, Msk4Imm:$YMSK, Msk2Imm:$PMSK)),
+            (PMDMXVBF16GERX2 $XAp, RCCp.BToVSRC, Msk8Imm:$XMSK, Msk4Imm:$YMSK,
+                Msk2Imm:$PMSK)>;
 
-  def : Pat<(v1024i1 (int_ppc_mma_pmdmxvbf16gerx2pp v1024i1:$ATi, v256i1:$XAp, v16i8:$XB,
-                                              Msk8Imm:$XMSK, Msk4Imm:$YMSK,
-                                              Msk2Imm:$PMSK)),
+  def : Pat<(v1024i1(int_ppc_mma_pmdmxvbf16gerx2pp v1024i1:$ATi, v256i1:$XAp,
+                v16i8:$XB, Msk8Imm:$XMSK, Msk4Imm:$YMSK, Msk2Imm:$PMSK)),
             (PMDMXVBF16GERX2PP $ATi, $XAp, RCCp.BToVSRC, Msk8Imm:$XMSK,
-                          Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
+                Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
 
-  def : Pat<(v1024i1 (int_ppc_mma_pmdmxvbf16gerx2pn v1024i1:$ATi, v256i1:$XAp, v16i8:$XB,
-                                               Msk8Imm:$XMSK, Msk4Imm:$YMSK,
-                                               Msk2Imm:$PMSK)),
+  def : Pat<(v1024i1(int_ppc_mma_pmdmxvbf16gerx2pn v1024i1:$ATi, v256i1:$XAp,
+                v16i8:$XB, Msk8Imm:$XMSK, Msk4Imm:$YMSK, Msk2Imm:$PMSK)),
             (PMDMXVBF16GERX2PN $ATi, $XAp, RCCp.BToVSRC, Msk8Imm:$XMSK,
-                           Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
+                Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
 
-  def : Pat<(v1024i1 (int_ppc_mma_pmdmxvbf16gerx2np v1024i1:$ATi, v256i1:$XAp, v16i8:$XB,
-                                              Msk8Imm:$XMSK, Msk4Imm:$YMSK,
-                                              Msk2Imm:$PMSK)),
+  def : Pat<(v1024i1(int_ppc_mma_pmdmxvbf16gerx2np v1024i1:$ATi, v256i1:$XAp,
+                v16i8:$XB, Msk8Imm:$XMSK, Msk4Imm:$YMSK, Msk2Imm:$PMSK)),
             (PMDMXVBF16GERX2NP $ATi, $XAp, RCCp.BToVSRC, Msk8Imm:$XMSK,
-                          Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
+                Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
 
-  def : Pat<(v1024i1 (int_ppc_mma_pmdmxvbf16gerx2nn v1024i1:$ATi, v256i1:$XAp, v16i8:$XB,
-                                               Msk8Imm:$XMSK, Msk4Imm:$YMSK,
-                                               Msk2Imm:$PMSK)),
+  def : Pat<(v1024i1(int_ppc_mma_pmdmxvbf16gerx2nn v1024i1:$ATi, v256i1:$XAp,
+                v16i8:$XB, Msk8Imm:$XMSK, Msk4Imm:$YMSK, Msk2Imm:$PMSK)),
             (PMDMXVBF16GERX2NN $ATi, $XAp, RCCp.BToVSRC, Msk8Imm:$XMSK,
-                           Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
+                Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
 
-  def : Pat<(v1024i1 (int_ppc_mma_pmdmxvf16gerx2 v256i1:$XAp, v16i8:$XB, Msk8Imm:$XMSK,
-                                             Msk4Imm:$YMSK, Msk2Imm:$PMSK)),
-            (PMDMXVF16GERX2 $XAp, RCCp.BToVSRC, Msk8Imm:$XMSK,
-                          Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
+  def : Pat<(v1024i1(int_ppc_mma_pmdmxvf16gerx2 v256i1:$XAp, v16i8:$XB,
+                Msk8Imm:$XMSK, Msk4Imm:$YMSK, Msk2Imm:$PMSK)),
+            (PMDMXVF16GERX2 $XAp, RCCp.BToVSRC, Msk8Imm:$XMSK, Msk4Imm:$YMSK,
+                Msk2Imm:$PMSK)>;
 
-  def : Pat<(v1024i1 (int_ppc_mma_pmdmxvf16gerx2pp v1024i1:$ATi, v256i1:$XAp, v16i8:$XB,
-                                              Msk8Imm:$XMSK, Msk4Imm:$YMSK,
-                                              Msk2Imm:$PMSK)),
+  def : Pat<(v1024i1(int_ppc_mma_pmdmxvf16gerx2pp v1024i1:$ATi, v256i1:$XAp,
+                v16i8:$XB, Msk8Imm:$XMSK, Msk4Imm:$YMSK, Msk2Imm:$PMSK)),
             (PMDMXVF16GERX2PP $ATi, $XAp, RCCp.BToVSRC, Msk8Imm:$XMSK,
-                          Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
+                Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
 
-  def : Pat<(v1024i1 (int_ppc_mma_pmdmxvf16gerx2pn v1024i1:$ATi, v256i1:$XAp, v16i8:$XB,
-                                               Msk8Imm:$XMSK, Msk4Imm:$YMSK,
-                                               Msk2Imm:$PMSK)),
+  def : Pat<(v1024i1(int_ppc_mma_pmdmxvf16gerx2pn v1024i1:$ATi, v256i1:$XAp,
+                v16i8:$XB, Msk8Imm:$XMSK, Msk4Imm:$YMSK, Msk2Imm:$PMSK)),
             (PMDMXVF16GERX2PN $ATi, $XAp, RCCp.BToVSRC, Msk8Imm:$XMSK,
-                           Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
+                Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
 
-  def : Pat<(v1024i1 (int_ppc_mma_pmdmxvf16gerx2np v1024i1:$ATi, v256i1:$XAp, v16i8:$XB,
-                                              Msk8Imm:$XMSK, Msk4Imm:$YMSK,
-                                              Msk2Imm:$PMSK)),
+  def : Pat<(v1024i1(int_ppc_mma_pmdmxvf16gerx2np v1024i1:$ATi, v256i1:$XAp,
+                v16i8:$XB, Msk8Imm:$XMSK, Msk4Imm:$YMSK, Msk2Imm:$PMSK)),
             (PMDMXVF16GERX2NP $ATi, $XAp, RCCp.BToVSRC, Msk8Imm:$XMSK,
-                          Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
+                Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
 
-  def : Pat<(v1024i1 (int_ppc_mma_pmdmxvf16gerx2nn v1024i1:$ATi, v256i1:$XAp, v16i8:$XB,
-                                               Msk8Imm:$XMSK, Msk4Imm:$YMSK,
-                                               Msk2Imm:$PMSK)),
+  def : Pat<(v1024i1(int_ppc_mma_pmdmxvf16gerx2nn v1024i1:$ATi, v256i1:$XAp,
+                v16i8:$XB, Msk8Imm:$XMSK, Msk4Imm:$YMSK, Msk2Imm:$PMSK)),
             (PMDMXVF16GERX2NN $ATi, $XAp, RCCp.BToVSRC, Msk8Imm:$XMSK,
-                           Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
+                Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
 }
 
-// Cryptography Intrinsic
-let Predicates = [IsISAFuture] in {
-  def : Pat<(v1024i1 (int_ppc_mma_dmxxshapad v1024i1:$ATi, v16i8:$XB, timm:$ID,
-                      timm:$E, timm:$BL)), (DMXXSHAPAD $ATi, RCCp.BToVSRC, $ID, $E, $BL)>;
-}
 
-// MMA+ Instruction aliases
-let Predicates = [IsISAFuture] in {
+//---------------------------- Instruction aliases ---------------------------//
+
+let Predicates = [MMA, IsISAFuture] in {
   def : InstAlias<"dmsha256hash $AT, $AB",
                   (DMSHA2HASH dmr:$AT, dmr:$AB, 0)>;
 

let Predicates = [IsISAFuture] in {
//-------------------------- Instruction definitions -------------------------//

let Predicates = [MMA, IsISAFuture] in {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why do you modify the predicates for these ones?

Copy link
Contributor Author

@lei137 lei137 Jul 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This td file is specific for MMA future instructions so seems like they all should fall under that as we have a separate one for non-mma future instructions.

Also, AFAIK all instructions that uses dmr/acc/wacc should fall under the predicate mma.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm guessing it's to accommodate the below MMA instructions. I wonder if we missed adding MMA to instructions like DMXXEXTFDMR512?

Copy link
Contributor Author

@lei137 lei137 Jul 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think those are meant to be under MMA feature. That's why it was put into this specific td file, but somehow we missed adding them under the correct predicate sections as multiple was created for the same set of predicates it was hard to see. This patch basically move them to under the MMA predicate.

Also if you look in clang/include/clang/Basic/BuiltinsPPC.def you can see we have a few intrinsics implemented that access dmr registers and their required features are set as mma,isa-future-instructions.

eg:

1095 UNALIASED_CUSTOM_BUILTIN(mma_dmsetdmrz, "vW1024*", false,
1096                          "mma,isa-future-instructions")
1097 UNALIASED_CUSTOM_BUILTIN(mma_dmmr, "vW1024*W1024*", false,
1098                          "mma,isa-future-instructions")
1099 UNALIASED_CUSTOM_BUILTIN(mma_dmxor, "vW1024*W1024*", true,
1100                          "mma,isa-future-instructions")

@lei137 lei137 requested a review from maryammo July 29, 2025 19:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants