@@ -758,9 +758,14 @@ def VOPProfileMAI_I32_V4I32_X16 : VOPProfileMAI<VOP_V16I32_V4I32_V4I32_V16I3
758
758
def VOPProfileMAI_I32_V4I32_X16_VCD : VOPProfileMAI<VOP_V16I32_V4I32_V4I32_V16I32, VISrc_512_b32, VDst_512, AVSrc_128>;
759
759
760
760
761
- class MFMATable <bit is_mac, string Name> {
761
+ class MFMATable <bit is_mac, string Kind, string Name,
762
+ string AGPROpName = NAME> {
762
763
bit IsMac = is_mac;
763
764
string FMAOp = Name;
765
+ string AGPROp = AGPROpName;
766
+
767
+ // Does this MFMA use "AGPR" or "VGPR" for srcC/vdst
768
+ string MFMAKind = Kind;
764
769
}
765
770
766
771
class 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,
866
871
let Constraints = !if(NoDstOverlap, "@earlyclobber $vdst", "") in {
867
872
def _e64 : MAIInst<OpName, !cast<VOPProfileMAI>("VOPProfileMAI_" # P),
868
873
!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">;
870
875
871
876
let OtherPredicates = [isGFX90APlus], Mnemonic = OpName in
872
877
def _vgprcd_e64 : MAIInst<OpName # "_vgprcd", !cast<VOPProfileMAI>("VOPProfileMAI_" # P # "_VCD"),
873
878
!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 ">;
875
880
}
876
881
877
882
if NoDstOverlap then {
@@ -880,12 +885,12 @@ multiclass MAIInst<string OpName, string P, SDPatternOperator node = null_frag,
880
885
Mnemonic = OpName in {
881
886
def "_mac_e64" : MAIInst<OpName # "_mac", !cast<VOPProfileMAI>("VOPProfileMAI_" # P),
882
887
!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 ">;
884
889
885
890
let OtherPredicates = [isGFX90APlus] in
886
891
def _mac_vgprcd_e64 : MAIInst<OpName # "_mac_vgprcd", !cast<VOPProfileMAI>("VOPProfileMAI_" # P # "_VCD"),
887
892
!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">;
889
894
}
890
895
}
891
896
} // End isConvergent = 1, mayRaiseFPException = 0, ReadsModeReg = 1
@@ -902,23 +907,23 @@ multiclass ScaledMAIInst_mc<string OpName, string UnscaledOpName_, SDPatternOper
902
907
903
908
def _e64 : ScaledMAIInst<OpName,
904
909
!cast<MAIInst>(UnscaledOpName#"_e64"), !if(NoDstOverlap, null_frag, AgprMAIFrag<node, HasAbid, true>)>,
905
- MFMATable<0, NAME # "_e64">;
910
+ MFMATable<0, "AGPR", NAME # "_e64">;
906
911
907
912
def _vgprcd_e64 : ScaledMAIInst<OpName # "_vgprcd",
908
913
!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 ">;
910
915
911
916
if NoDstOverlap then {
912
917
let Constraints = !if(NoDstOverlap, "$vdst = $src2", ""),
913
918
isConvertibleToThreeAddress = NoDstOverlap,
914
919
Mnemonic = UnscaledOpName_ in {
915
920
def _mac_e64 : ScaledMAIInst<OpName # "_mac",
916
921
!cast<MAIInst>(UnscaledOpName # "_mac_e64"), AgprMAIFrag<node, HasAbid, true>>,
917
- MFMATable<1, NAME # "_e64">;
922
+ MFMATable<1, "AGPR", NAME # "_e64">;
918
923
919
924
def _mac_vgprcd_e64 : ScaledMAIInst<OpName # " _mac_vgprcd",
920
925
!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 ">;
922
927
}
923
928
}
924
929
}
0 commit comments