@@ -758,9 +758,14 @@ def VOPProfileMAI_I32_V4I32_X16 : VOPProfileMAI<VOP_V16I32_V4I32_V4I32_V16I3
758758def VOPProfileMAI_I32_V4I32_X16_VCD : VOPProfileMAI<VOP_V16I32_V4I32_V4I32_V16I32, VISrc_512_b32, VDst_512, AVSrc_128>;
759759
760760
761- class MFMATable <bit is_mac, string Name> {
761+ class MFMATable <bit is_mac, string Kind, string Name,
762+ string AGPROpName = NAME> {
762763 bit IsMac = is_mac;
763764 string FMAOp = Name;
765+ string AGPROp = AGPROpName;
766+
767+ // Does this MFMA use "AGPR" or "VGPR" for srcC/vdst
768+ string MFMAKind = Kind;
764769}
765770
766771class MFMA_F8F6F4_WithSizeTable<int A, int B, Instruction ThisVariant, Instruction F8F8Variant> {
@@ -866,12 +871,12 @@ multiclass MAIInst<string OpName, string P, SDPatternOperator node = null_frag,
866871 let Constraints = !if(NoDstOverlap, "@earlyclobber $vdst", "") in {
867872 def _e64 : MAIInst<OpName, !cast<VOPProfileMAI>("VOPProfileMAI_" # P),
868873 !if(!or(NoDstOverlap, !eq(node, null_frag)), null_frag, AgprMAIFrag<node, HasAbid, Scaled>), Scaled>,
869- MFMATable<0, NAME # "_e64">;
874+ MFMATable<0, "AGPR", NAME # "_e64">;
870875
871876 let OtherPredicates = [isGFX90APlus], Mnemonic = OpName in
872877 def _vgprcd_e64 : MAIInst<OpName # "_vgprcd", !cast<VOPProfileMAI>("VOPProfileMAI_" # P # "_VCD"),
873878 !if(!or(NoDstOverlap, !eq(node, null_frag)), null_frag, VgprMAIFrag<node, HasAbid, Scaled>), Scaled>,
874- MFMATable<0, NAME # "_vgprcd_e64">;
879+ MFMATable<0, "VGPR", NAME # "_vgprcd_e64", NAME # "_e64 ">;
875880 }
876881
877882 if NoDstOverlap then {
@@ -880,12 +885,12 @@ multiclass MAIInst<string OpName, string P, SDPatternOperator node = null_frag,
880885 Mnemonic = OpName in {
881886 def "_mac_e64" : MAIInst<OpName # "_mac", !cast<VOPProfileMAI>("VOPProfileMAI_" # P),
882887 !if(!eq(node, null_frag), null_frag, AgprMAIFrag<node, HasAbid, Scaled>), Scaled>,
883- MFMATable<1, NAME # "_e64">;
888+ MFMATable<1, "AGPR", NAME # "_e64", NAME # "_mac_e64 ">;
884889
885890 let OtherPredicates = [isGFX90APlus] in
886891 def _mac_vgprcd_e64 : MAIInst<OpName # "_mac_vgprcd", !cast<VOPProfileMAI>("VOPProfileMAI_" # P # "_VCD"),
887892 !if(!eq(node, null_frag), null_frag, VgprMAIFrag<node, HasAbid, Scaled>), Scaled>,
888- MFMATable<1, NAME # "_vgprcd_e64">;
893+ MFMATable<1, "VGPR", NAME # "_vgprcd_e64">;
889894 }
890895 }
891896 } // End isConvergent = 1, mayRaiseFPException = 0, ReadsModeReg = 1
@@ -902,23 +907,23 @@ multiclass ScaledMAIInst_mc<string OpName, string UnscaledOpName_, SDPatternOper
902907
903908 def _e64 : ScaledMAIInst<OpName,
904909 !cast<MAIInst>(UnscaledOpName#"_e64"), !if(NoDstOverlap, null_frag, AgprMAIFrag<node, HasAbid, true>)>,
905- MFMATable<0, NAME # "_e64">;
910+ MFMATable<0, "AGPR", NAME # "_e64">;
906911
907912 def _vgprcd_e64 : ScaledMAIInst<OpName # "_vgprcd",
908913 !cast<MAIInst>(UnscaledOpName#"_vgprcd_e64"), !if(NoDstOverlap, null_frag, VgprMAIFrag<node, HasAbid, true>)>,
909- MFMATable<0, NAME # "_vgprcd_e64">;
914+ MFMATable<0, "VGPR", NAME # "_vgprcd_e64", NAME # "_e64 ">;
910915
911916 if NoDstOverlap then {
912917 let Constraints = !if(NoDstOverlap, "$vdst = $src2", ""),
913918 isConvertibleToThreeAddress = NoDstOverlap,
914919 Mnemonic = UnscaledOpName_ in {
915920 def _mac_e64 : ScaledMAIInst<OpName # "_mac",
916921 !cast<MAIInst>(UnscaledOpName # "_mac_e64"), AgprMAIFrag<node, HasAbid, true>>,
917- MFMATable<1, NAME # "_e64">;
922+ MFMATable<1, "AGPR", NAME # "_e64">;
918923
919924 def _mac_vgprcd_e64 : ScaledMAIInst<OpName # " _mac_vgprcd",
920925 !cast<MAIInst>(UnscaledOpName # "_mac_vgprcd_e64"), VgprMAIFrag<node, HasAbid, true>>,
921- MFMATable<1, NAME # "_vgprcd_e64">;
926+ MFMATable<1, "VGPR", NAME # "_vgprcd_e64", NAME # "_mac_e64 ">;
922927 }
923928 }
924929}
0 commit comments