Skip to content

Commit 89f8d35

Browse files
authored
[AMDGPU] Fix subtarget predicates for some V_MFMA instructions. (#70450)
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 <#69256>.
1 parent ddd2747 commit 89f8d35

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
@@ -1072,17 +1072,24 @@ multiclass VOP3P_Real_MFMA_gfx940<bits<7> op, string Name = !cast<VOP3_Pseudo>(N
10721072
defm : VOP3P_Real_MFMA_gfx940_aliases<Name, !subst("_1k", "", PS_ACD.Mnemonic), NAME>;
10731073
}
10741074

1075-
multiclass VOP3P_Real_MFMA<bits<7> op, string GFX940Name = !cast<VOP3_Pseudo>(NAME#"_e64").Mnemonic> :
1076-
VOP3P_Real_MFMA_gfx90a <op>,
1077-
VOP3P_Real_MFMA_gfx940 <op, GFX940Name> {
1075+
multiclass VOP3P_Real_MFMA_vi<bits<7> op> {
10781076
def _vi : VOP3P_Real<!cast<VOP3_Pseudo>(NAME#"_e64"), SIEncodingFamily.VI>,
10791077
VOP3Pe_MAI <op, !cast<VOP3_Pseudo>(NAME#"_e64").Pfl, ?> {
1078+
let SubtargetPredicate = isGFX8GFX9NotGFX90A;
10801079
let AssemblerPredicate = HasMAIInsts;
10811080
let DecoderNamespace = "GFX8";
10821081
let Constraints = "";
10831082
}
10841083
}
10851084

1085+
multiclass VOP3P_Real_MFMA_vi_gfx90a<bits<7> op> :
1086+
VOP3P_Real_MFMA_gfx90a <op>,
1087+
VOP3P_Real_MFMA_vi <op>;
1088+
1089+
multiclass VOP3P_Real_MFMA<bits<7> op, string GFX940Name = !cast<VOP3_Pseudo>(NAME#"_e64").Mnemonic> :
1090+
VOP3P_Real_MFMA_vi_gfx90a <op>,
1091+
VOP3P_Real_MFMA_gfx940 <op, GFX940Name>;
1092+
10861093
multiclass VOP3P_Real_SMFMAC<bits<7> op, string alias> {
10871094
def _gfx940 : VOP3P_Real<!cast<VOP3_Pseudo>(NAME#"_e64"), SIEncodingFamily.VI>,
10881095
VOP3Pe_SMFMAC <op> {
@@ -1143,7 +1150,7 @@ defm V_DOT8_U32_U4 : VOP3P_Real_vi <0x2b>;
11431150
defm V_DOT4_I32_I8 : VOP3P_Real_vi <0x28>;
11441151
defm V_DOT8_I32_I4 : VOP3P_Real_vi <0x2a>;
11451152

1146-
let SubtargetPredicate = HasMAIInsts in {
1153+
let OtherPredicates = [HasMAIInsts] in {
11471154

11481155
defm V_ACCVGPR_READ_B32 : VOP3P_Real_MAI <0x58>;
11491156
defm V_ACCVGPR_WRITE_B32 : VOP3P_Real_MAI <0x59>;
@@ -1161,17 +1168,15 @@ defm V_MFMA_I32_32X32X4I8 : VOP3P_Real_MFMA <0x50, "v_mfma_i32_32x32x4_2b_i8">
11611168
defm V_MFMA_I32_16X16X4I8 : VOP3P_Real_MFMA <0x51, "v_mfma_i32_16x16x4_4b_i8">;
11621169
defm V_MFMA_I32_4X4X4I8 : VOP3P_Real_MFMA <0x52, "v_mfma_i32_4x4x4_16b_i8">;
11631170

1164-
let SubtargetPredicate = isGFX908orGFX90A in {
1165-
defm V_MFMA_I32_16X16X16I8 : VOP3P_Real_MFMA <0x55>;
1166-
defm V_MFMA_I32_32X32X8I8 : VOP3P_Real_MFMA <0x54>;
1167-
defm V_MFMA_F32_32X32X2BF16 : VOP3P_Real_MFMA <0x68>;
1168-
defm V_MFMA_F32_16X16X2BF16 : VOP3P_Real_MFMA <0x69>;
1169-
defm V_MFMA_F32_4X4X2BF16 : VOP3P_Real_MFMA <0x6b>;
1170-
defm V_MFMA_F32_32X32X4BF16 : VOP3P_Real_MFMA <0x6c>;
1171-
defm V_MFMA_F32_16X16X8BF16 : VOP3P_Real_MFMA <0x6d>;
1172-
}
1171+
defm V_MFMA_I32_16X16X16I8 : VOP3P_Real_MFMA_vi_gfx90a <0x55>;
1172+
defm V_MFMA_I32_32X32X8I8 : VOP3P_Real_MFMA_vi_gfx90a <0x54>;
1173+
defm V_MFMA_F32_32X32X2BF16 : VOP3P_Real_MFMA_vi_gfx90a <0x68>;
1174+
defm V_MFMA_F32_16X16X2BF16 : VOP3P_Real_MFMA_vi_gfx90a <0x69>;
1175+
defm V_MFMA_F32_4X4X2BF16 : VOP3P_Real_MFMA_vi_gfx90a <0x6b>;
1176+
defm V_MFMA_F32_32X32X4BF16 : VOP3P_Real_MFMA_vi_gfx90a <0x6c>;
1177+
defm V_MFMA_F32_16X16X8BF16 : VOP3P_Real_MFMA_vi_gfx90a <0x6d>;
11731178

1174-
} // End SubtargetPredicate = HasMAIInsts
1179+
} // End OtherPredicates = [HasMAIInsts]
11751180

11761181
defm V_MFMA_F32_32X32X4BF16_1K : VOP3P_Real_MFMA_gfx90a <0x63>;
11771182
defm V_MFMA_F32_16X16X4BF16_1K : VOP3P_Real_MFMA_gfx90a <0x64>;

0 commit comments

Comments
 (0)