Skip to content

Commit 30f973e

Browse files
committed
[AMDGPU] Fix subtarget predicates for some V_MFMA instructions.
Resolves AsmParser ambiguity, e.g., V_MFMA_I32_32X32X8I8_vi currently has isGFX908orGFX90A as its subtarget predicate, which makes it identical to V_MFMA_I32_32X32X8I8_gfx90a_acd on GFX90A. Part of <llvm/llvm-project#69256>.
1 parent 7360c6a commit 30f973e

File tree

1 file changed

+19
-14
lines changed

1 file changed

+19
-14
lines changed

llvm/lib/Target/AMDGPU/VOP3PInstructions.td

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1085,17 +1085,24 @@ multiclass VOP3P_Real_MFMA_gfx940<bits<7> op, string Name = !cast<VOP3_Pseudo>(N
10851085
defm : VOP3P_Real_MFMA_gfx940_aliases<Name, !subst("_1k", "", PS_ACD.Mnemonic), NAME>;
10861086
}
10871087

1088-
multiclass VOP3P_Real_MFMA<bits<7> op, string GFX940Name = !cast<VOP3_Pseudo>(NAME#"_e64").Mnemonic> :
1089-
VOP3P_Real_MFMA_gfx90a <op>,
1090-
VOP3P_Real_MFMA_gfx940 <op, GFX940Name> {
1088+
multiclass VOP3P_Real_MFMA_vi<bits<7> op> {
10911089
def _vi : VOP3P_Real<!cast<VOP3_Pseudo>(NAME#"_e64"), SIEncodingFamily.VI>,
10921090
VOP3Pe_MAI <op, !cast<VOP3_Pseudo>(NAME#"_e64").Pfl, ?> {
1091+
let SubtargetPredicate = isGFX8GFX9NotGFX90A;
10931092
let AssemblerPredicate = HasMAIInsts;
10941093
let DecoderNamespace = "GFX8";
10951094
let Constraints = "";
10961095
}
10971096
}
10981097

1098+
multiclass VOP3P_Real_MFMA_vi_gfx90a<bits<7> op> :
1099+
VOP3P_Real_MFMA_gfx90a <op>,
1100+
VOP3P_Real_MFMA_vi <op>;
1101+
1102+
multiclass VOP3P_Real_MFMA<bits<7> op, string GFX940Name = !cast<VOP3_Pseudo>(NAME#"_e64").Mnemonic> :
1103+
VOP3P_Real_MFMA_vi_gfx90a <op>,
1104+
VOP3P_Real_MFMA_gfx940 <op, GFX940Name>;
1105+
10991106
multiclass VOP3P_Real_SMFMAC<bits<7> op, string alias> {
11001107
def _gfx940 : VOP3P_Real<!cast<VOP3_Pseudo>(NAME#"_e64"), SIEncodingFamily.VI>,
11011108
VOP3Pe_SMFMAC <op> {
@@ -1156,7 +1163,7 @@ defm V_DOT8_U32_U4 : VOP3P_Real_vi <0x2b>;
11561163
defm V_DOT4_I32_I8 : VOP3P_Real_vi <0x28>;
11571164
defm V_DOT8_I32_I4 : VOP3P_Real_vi <0x2a>;
11581165

1159-
let SubtargetPredicate = HasMAIInsts in {
1166+
let OtherPredicates = [HasMAIInsts] in {
11601167

11611168
defm V_ACCVGPR_READ_B32 : VOP3P_Real_MAI <0x58>;
11621169
defm V_ACCVGPR_WRITE_B32 : VOP3P_Real_MAI <0x59>;
@@ -1174,17 +1181,15 @@ defm V_MFMA_I32_32X32X4I8 : VOP3P_Real_MFMA <0x50, "v_mfma_i32_32x32x4_2b_i8">
11741181
defm V_MFMA_I32_16X16X4I8 : VOP3P_Real_MFMA <0x51, "v_mfma_i32_16x16x4_4b_i8">;
11751182
defm V_MFMA_I32_4X4X4I8 : VOP3P_Real_MFMA <0x52, "v_mfma_i32_4x4x4_16b_i8">;
11761183

1177-
let SubtargetPredicate = isGFX908orGFX90A in {
1178-
defm V_MFMA_I32_16X16X16I8 : VOP3P_Real_MFMA <0x55>;
1179-
defm V_MFMA_I32_32X32X8I8 : VOP3P_Real_MFMA <0x54>;
1180-
defm V_MFMA_F32_32X32X2BF16 : VOP3P_Real_MFMA <0x68>;
1181-
defm V_MFMA_F32_16X16X2BF16 : VOP3P_Real_MFMA <0x69>;
1182-
defm V_MFMA_F32_4X4X2BF16 : VOP3P_Real_MFMA <0x6b>;
1183-
defm V_MFMA_F32_32X32X4BF16 : VOP3P_Real_MFMA <0x6c>;
1184-
defm V_MFMA_F32_16X16X8BF16 : VOP3P_Real_MFMA <0x6d>;
1185-
}
1184+
defm V_MFMA_I32_16X16X16I8 : VOP3P_Real_MFMA_vi_gfx90a <0x55>;
1185+
defm V_MFMA_I32_32X32X8I8 : VOP3P_Real_MFMA_vi_gfx90a <0x54>;
1186+
defm V_MFMA_F32_32X32X2BF16 : VOP3P_Real_MFMA_vi_gfx90a <0x68>;
1187+
defm V_MFMA_F32_16X16X2BF16 : VOP3P_Real_MFMA_vi_gfx90a <0x69>;
1188+
defm V_MFMA_F32_4X4X2BF16 : VOP3P_Real_MFMA_vi_gfx90a <0x6b>;
1189+
defm V_MFMA_F32_32X32X4BF16 : VOP3P_Real_MFMA_vi_gfx90a <0x6c>;
1190+
defm V_MFMA_F32_16X16X8BF16 : VOP3P_Real_MFMA_vi_gfx90a <0x6d>;
11861191

1187-
} // End SubtargetPredicate = HasMAIInsts
1192+
} // End OtherPredicates = [HasMAIInsts]
11881193

11891194
defm V_MFMA_F32_32X32X4BF16_1K : VOP3P_Real_MFMA_gfx90a <0x63>;
11901195
defm V_MFMA_F32_16X16X4BF16_1K : VOP3P_Real_MFMA_gfx90a <0x64>;

0 commit comments

Comments
 (0)