@@ -721,9 +721,14 @@ def VOPProfileMAI_F32_V4I32_V4I32_X512_VCD : VOPProfileMAI<VOP_V16F32_V4I32_V4I3
721721}
722722
723723
724- class MFMATable <bit is_mac, string Name> {
724+ class MFMATable <bit is_mac, string Kind, string Name,
725+ string AGPROpName = NAME> {
725726 bit IsMac = is_mac;
726727 string FMAOp = Name;
728+ string AGPROp = AGPROpName;
729+
730+ // Does this MFMA use "AGPR" or "VGPR" for srcC/vdst
731+ string MFMAKind = Kind;
727732}
728733
729734class MFMA_F8F6F4_WithSizeTable<int A, int B, Instruction ThisVariant, Instruction F8F8Variant> {
@@ -829,12 +834,12 @@ multiclass MAIInst<string OpName, string P, SDPatternOperator node = null_frag,
829834 let Constraints = !if(NoDstOverlap, "@earlyclobber $vdst", "") in {
830835 def _e64 : MAIInst<OpName, !cast<VOPProfileMAI>("VOPProfileMAI_" # P),
831836 !if(!or(NoDstOverlap, !eq(node, null_frag)), null_frag, AgprMAIFrag<node, HasAbid, Scaled>), Scaled>,
832- MFMATable<0, NAME # "_e64">;
837+ MFMATable<0, "AGPR", NAME # "_e64">;
833838
834839 let OtherPredicates = [isGFX90APlus], Mnemonic = OpName in
835840 def _vgprcd_e64 : MAIInst<OpName # "_vgprcd", !cast<VOPProfileMAI>("VOPProfileMAI_" # P # "_VCD"),
836841 !if(!or(NoDstOverlap, !eq(node, null_frag)), null_frag, VgprMAIFrag<node, HasAbid, Scaled>), Scaled>,
837- MFMATable<0, NAME # "_vgprcd_e64">;
842+ MFMATable<0, "VGPR", NAME # "_vgprcd_e64", NAME # "_e64 ">;
838843 }
839844
840845 if NoDstOverlap then {
@@ -843,6 +848,7 @@ multiclass MAIInst<string OpName, string P, SDPatternOperator node = null_frag,
843848 Mnemonic = OpName in {
844849 def "_mac_e64" : MAIInst<OpName # "_mac", !cast<VOPProfileMAI>("VOPProfileMAI_" # P),
845850 !if(!eq(node, null_frag), null_frag, AgprMAIFrag<node, HasAbid, Scaled>), Scaled>,
851+ MFMATable<1, "AGPR", NAME # "_e64", NAME # "_mac_e64">;
846852 MFMATable<1, NAME # "_e64">;
847853
848854 let OtherPredicates = [isGFX90APlus] in
0 commit comments