@@ -721,9 +721,14 @@ def VOPProfileMAI_F32_V4I32_V4I32_X512_VCD : VOPProfileMAI<VOP_V16F32_V4I32_V4I3
721
721
}
722
722
723
723
724
- class MFMATable <bit is_mac, string Name> {
724
+ class MFMATable <bit is_mac, string Kind, string Name,
725
+ string AGPROpName = NAME> {
725
726
bit IsMac = is_mac;
726
727
string FMAOp = Name;
728
+ string AGPROp = AGPROpName;
729
+
730
+ // Does this MFMA use "AGPR" or "VGPR" for srcC/vdst
731
+ string MFMAKind = Kind;
727
732
}
728
733
729
734
class 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,
829
834
let Constraints = !if(NoDstOverlap, "@earlyclobber $vdst", "") in {
830
835
def _e64 : MAIInst<OpName, !cast<VOPProfileMAI>("VOPProfileMAI_" # P),
831
836
!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">;
833
838
834
839
let OtherPredicates = [isGFX90APlus], Mnemonic = OpName in
835
840
def _vgprcd_e64 : MAIInst<OpName # "_vgprcd", !cast<VOPProfileMAI>("VOPProfileMAI_" # P # "_VCD"),
836
841
!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 ">;
838
843
}
839
844
840
845
if NoDstOverlap then {
@@ -843,6 +848,7 @@ multiclass MAIInst<string OpName, string P, SDPatternOperator node = null_frag,
843
848
Mnemonic = OpName in {
844
849
def "_mac_e64" : MAIInst<OpName # "_mac", !cast<VOPProfileMAI>("VOPProfileMAI_" # P),
845
850
!if(!eq(node, null_frag), null_frag, AgprMAIFrag<node, HasAbid, Scaled>), Scaled>,
851
+ MFMATable<1, "AGPR", NAME # "_e64", NAME # "_mac_e64">;
846
852
MFMATable<1, NAME # "_e64">;
847
853
848
854
let OtherPredicates = [isGFX90APlus] in
0 commit comments