@@ -742,9 +742,14 @@ def VOPProfileMAI_I32_V4I32_X16 : VOPProfileMAI<VOP_V16I32_V4I32_V4I32_V16I3
742
742
def VOPProfileMAI_I32_V4I32_X16_VCD : VOPProfileMAI<VOP_V16I32_V4I32_V4I32_V16I32, VISrc_512_b32, VDst_512, AVSrc_128>;
743
743
744
744
745
- class MFMATable <bit is_mac, string Name> {
745
+ class MFMATable <bit is_mac, string Kind, string Name,
746
+ string AGPROpName = NAME> {
746
747
bit IsMac = is_mac;
747
748
string FMAOp = Name;
749
+ string AGPROp = AGPROpName;
750
+
751
+ // Does this MFMA use "AGPR" or "VGPR" for srcC/vdst
752
+ string MFMAKind = Kind;
748
753
}
749
754
750
755
class MFMA_F8F6F4_WithSizeTable<int A, int B, Instruction ThisVariant, Instruction F8F8Variant> {
@@ -850,12 +855,12 @@ multiclass MAIInst<string OpName, string P, SDPatternOperator node = null_frag,
850
855
let Constraints = !if(NoDstOverlap, "@earlyclobber $vdst", "") in {
851
856
def _e64 : MAIInst<OpName, !cast<VOPProfileMAI>("VOPProfileMAI_" # P),
852
857
!if(!or(NoDstOverlap, !eq(node, null_frag)), null_frag, AgprMAIFrag<node, HasAbid, Scaled>), Scaled>,
853
- MFMATable<0, NAME # "_e64">;
858
+ MFMATable<0, "AGPR", NAME # "_e64">;
854
859
855
860
let OtherPredicates = [isGFX90APlus], Mnemonic = OpName in
856
861
def _vgprcd_e64 : MAIInst<OpName # "_vgprcd", !cast<VOPProfileMAI>("VOPProfileMAI_" # P # "_VCD"),
857
862
!if(!or(NoDstOverlap, !eq(node, null_frag)), null_frag, VgprMAIFrag<node, HasAbid, Scaled>), Scaled>,
858
- MFMATable<0, NAME # "_vgprcd_e64">;
863
+ MFMATable<0, "VGPR", NAME # "_vgprcd_e64", NAME # "_e64 ">;
859
864
}
860
865
861
866
if NoDstOverlap then {
@@ -864,12 +869,12 @@ multiclass MAIInst<string OpName, string P, SDPatternOperator node = null_frag,
864
869
Mnemonic = OpName in {
865
870
def "_mac_e64" : MAIInst<OpName # "_mac", !cast<VOPProfileMAI>("VOPProfileMAI_" # P),
866
871
!if(!eq(node, null_frag), null_frag, AgprMAIFrag<node, HasAbid, Scaled>), Scaled>,
867
- MFMATable<1, NAME # "_e64">;
872
+ MFMATable<1, "AGPR", NAME # "_e64", NAME # "_mac_e64 ">;
868
873
869
874
let OtherPredicates = [isGFX90APlus] in
870
875
def _mac_vgprcd_e64 : MAIInst<OpName # "_mac_vgprcd", !cast<VOPProfileMAI>("VOPProfileMAI_" # P # "_VCD"),
871
876
!if(!eq(node, null_frag), null_frag, VgprMAIFrag<node, HasAbid, Scaled>), Scaled>,
872
- MFMATable<1, NAME # "_vgprcd_e64">;
877
+ MFMATable<1, "VGPR", NAME # "_vgprcd_e64">;
873
878
}
874
879
}
875
880
} // End isConvergent = 1, mayRaiseFPException = 0, ReadsModeReg = 1
@@ -886,23 +891,23 @@ multiclass ScaledMAIInst_mc<string OpName, string UnscaledOpName_, SDPatternOper
886
891
887
892
def _e64 : ScaledMAIInst<OpName,
888
893
!cast<MAIInst>(UnscaledOpName#"_e64"), !if(NoDstOverlap, null_frag, AgprMAIFrag<node, HasAbid, true>)>,
889
- MFMATable<0, NAME # "_e64">;
894
+ MFMATable<0, "AGPR", NAME # "_e64">;
890
895
891
896
def _vgprcd_e64 : ScaledMAIInst<OpName # "_vgprcd",
892
897
!cast<MAIInst>(UnscaledOpName#"_vgprcd_e64"), !if(NoDstOverlap, null_frag, VgprMAIFrag<node, HasAbid, true>)>,
893
- MFMATable<0, NAME # "_vgprcd_e64">;
898
+ MFMATable<0, "VGPR", NAME # "_vgprcd_e64", NAME # "_e64 ">;
894
899
895
900
if NoDstOverlap then {
896
901
let Constraints = !if(NoDstOverlap, "$vdst = $src2", ""),
897
902
isConvertibleToThreeAddress = NoDstOverlap,
898
903
Mnemonic = UnscaledOpName_ in {
899
904
def _mac_e64 : ScaledMAIInst<OpName # "_mac",
900
905
!cast<MAIInst>(UnscaledOpName # "_mac_e64"), AgprMAIFrag<node, HasAbid, true>>,
901
- MFMATable<1, NAME # "_e64">;
906
+ MFMATable<1, "AGPR", NAME # "_e64">;
902
907
903
908
def _mac_vgprcd_e64 : ScaledMAIInst<OpName # " _mac_vgprcd",
904
909
!cast<MAIInst>(UnscaledOpName # "_mac_vgprcd_e64"), VgprMAIFrag<node, HasAbid, true>>,
905
- MFMATable<1, NAME # "_vgprcd_e64">;
910
+ MFMATable<1, "VGPR", NAME # "_vgprcd_e64", NAME # "_mac_e64 ">;
906
911
}
907
912
}
908
913
}
0 commit comments