@@ -741,9 +741,14 @@ def VOPProfileMAI_I32_V4I32_X16 : VOPProfileMAI<VOP_V16I32_V4I32_V4I32_V16I3
741741def VOPProfileMAI_I32_V4I32_X16_VCD : VOPProfileMAI<VOP_V16I32_V4I32_V4I32_V16I32, VISrc_512_b32, VDst_512, AVSrc_128>;
742742
743743
744- class MFMATable <bit is_mac, string Name> {
744+ class MFMATable <bit is_mac, string Kind, string Name,
745+ string AGPROpName = NAME> {
745746 bit IsMac = is_mac;
746747 string FMAOp = Name;
748+ string AGPROp = AGPROpName;
749+
750+ // Does this MFMA use "AGPR" or "VGPR" for srcC/vdst
751+ string MFMAKind = Kind;
747752}
748753
749754class MFMA_F8F6F4_WithSizeTable<int A, int B, Instruction ThisVariant, Instruction F8F8Variant> {
@@ -849,12 +854,12 @@ multiclass MAIInst<string OpName, string P, SDPatternOperator node = null_frag,
849854 let Constraints = !if(NoDstOverlap, "@earlyclobber $vdst", "") in {
850855 def _e64 : MAIInst<OpName, !cast<VOPProfileMAI>("VOPProfileMAI_" # P),
851856 !if(!or(NoDstOverlap, !eq(node, null_frag)), null_frag, AgprMAIFrag<node, HasAbid, Scaled>), Scaled>,
852- MFMATable<0, NAME # "_e64">;
857+ MFMATable<0, "AGPR", NAME # "_e64">;
853858
854859 let OtherPredicates = [isGFX90APlus], Mnemonic = OpName in
855860 def _vgprcd_e64 : MAIInst<OpName # "_vgprcd", !cast<VOPProfileMAI>("VOPProfileMAI_" # P # "_VCD"),
856861 !if(!or(NoDstOverlap, !eq(node, null_frag)), null_frag, VgprMAIFrag<node, HasAbid, Scaled>), Scaled>,
857- MFMATable<0, NAME # "_vgprcd_e64">;
862+ MFMATable<0, "VGPR", NAME # "_vgprcd_e64", NAME # "_e64 ">;
858863 }
859864
860865 if NoDstOverlap then {
@@ -863,6 +868,7 @@ multiclass MAIInst<string OpName, string P, SDPatternOperator node = null_frag,
863868 Mnemonic = OpName in {
864869 def "_mac_e64" : MAIInst<OpName # "_mac", !cast<VOPProfileMAI>("VOPProfileMAI_" # P),
865870 !if(!eq(node, null_frag), null_frag, AgprMAIFrag<node, HasAbid, Scaled>), Scaled>,
871+ MFMATable<1, "AGPR", NAME # "_e64", NAME # "_mac_e64">;
866872 MFMATable<1, NAME # "_e64">;
867873
868874 let OtherPredicates = [isGFX90APlus] in
0 commit comments