Skip to content

Commit d050598

Browse files
committed
[AMDGPU] Fix subtarget predicates for MUBUF instructions.
Resolves AsmParser ambiguities, e.g., between BUFFER_WBINVL1_vi and BUFFER_WBINVL1_gfx6_gfx7. Part of <llvm/llvm-project#69256>.
1 parent a604c4b commit d050598

File tree

1 file changed

+15
-14
lines changed

1 file changed

+15
-14
lines changed

llvm/lib/Target/AMDGPU/BUFInstructions.td

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -800,7 +800,7 @@ defm BUFFER_STORE_FORMAT_XYZW : MUBUF_Pseudo_Stores <
800800
"buffer_store_format_xyzw", v4f32
801801
>;
802802

803-
let SubtargetPredicate = HasUnpackedD16VMem, D16Buf = 1 in {
803+
let OtherPredicates = [HasUnpackedD16VMem], D16Buf = 1 in {
804804
let TiedSourceNotRead = 1 in {
805805
defm BUFFER_LOAD_FORMAT_D16_X_gfx80 : MUBUF_Pseudo_Loads <
806806
"buffer_load_format_d16_x", i32
@@ -827,9 +827,9 @@ let TiedSourceNotRead = 1 in {
827827
defm BUFFER_STORE_FORMAT_D16_XYZW_gfx80 : MUBUF_Pseudo_Stores <
828828
"buffer_store_format_d16_xyzw", v4i32
829829
>;
830-
} // End HasUnpackedD16VMem.
830+
} // End OtherPredicates = [HasUnpackedD16VMem], D16Buf = 1.
831831

832-
let SubtargetPredicate = HasPackedD16VMem, D16Buf = 1 in {
832+
let OtherPredicates = [HasPackedD16VMem], D16Buf = 1 in {
833833
let TiedSourceNotRead = 1 in {
834834
defm BUFFER_LOAD_FORMAT_D16_X : MUBUF_Pseudo_Loads <
835835
"buffer_load_format_d16_x", f16
@@ -856,7 +856,7 @@ let TiedSourceNotRead = 1 in {
856856
defm BUFFER_STORE_FORMAT_D16_XYZW : MUBUF_Pseudo_Stores <
857857
"buffer_store_format_d16_xyzw", v4f16
858858
>;
859-
} // End HasPackedD16VMem.
859+
} // End OtherPredicates = [HasPackedD16VMem], D16Buf = 1.
860860

861861
defm BUFFER_LOAD_UBYTE : MUBUF_Pseudo_Loads_Lds <
862862
"buffer_load_ubyte", i32
@@ -1046,7 +1046,7 @@ defm BUFFER_ATOMIC_DEC_X2 : MUBUF_Pseudo_Atomics <
10461046
"buffer_atomic_dec_x2", VReg_64, i64
10471047
>;
10481048

1049-
let SubtargetPredicate = HasGFX10_BEncoding in {
1049+
let OtherPredicates = [HasGFX10_BEncoding] in {
10501050
defm BUFFER_ATOMIC_CSUB : MUBUF_Pseudo_Atomics <
10511051
"buffer_atomic_csub", VGPR_32, i32, int_amdgcn_global_atomic_csub
10521052
>;
@@ -1237,10 +1237,8 @@ def BUFFER_INV : MUBUF_Invalidate<"buffer_inv"> {
12371237
let AsmOperands = "$cpol";
12381238
}
12391239

1240-
let SubtargetPredicate = isGFX10Plus in {
1241-
def BUFFER_GL0_INV : MUBUF_Invalidate<"buffer_gl0_inv">;
1242-
def BUFFER_GL1_INV : MUBUF_Invalidate<"buffer_gl1_inv">;
1243-
} // End SubtargetPredicate = isGFX10Plus
1240+
def BUFFER_GL0_INV : MUBUF_Invalidate<"buffer_gl0_inv">;
1241+
def BUFFER_GL1_INV : MUBUF_Invalidate<"buffer_gl1_inv">;
12441242

12451243
//===----------------------------------------------------------------------===//
12461244
// MUBUF Patterns
@@ -2089,6 +2087,7 @@ class MUBUF_Real_gfx11<bits<8> op, MUBUF_Pseudo ps,
20892087
let Inst{53} = ps.tfe;
20902088
let Inst{54} = ps.offen;
20912089
let Inst{55} = ps.idxen;
2090+
let SubtargetPredicate = isGFX11Only;
20922091
}
20932092

20942093
class Base_MUBUF_Real_Atomic_gfx11<bits<8> op, MUBUF_Pseudo ps,
@@ -2112,11 +2111,13 @@ class MUBUF_Real_gfx10<bits<8> op, MUBUF_Pseudo ps> :
21122111
Base_MUBUF_Real_gfx6_gfx7_gfx10<op{6-0}, ps, SIEncodingFamily.GFX10> {
21132112
let Inst{15} = !if(ps.has_dlc, cpol{CPolBit.DLC}, ps.dlc_value);
21142113
let Inst{25} = op{7};
2114+
let SubtargetPredicate = isGFX10Only;
21152115
}
21162116

21172117
class MUBUF_Real_gfx6_gfx7<bits<8> op, MUBUF_Pseudo ps> :
21182118
Base_MUBUF_Real_gfx6_gfx7_gfx10<op{6-0}, ps, SIEncodingFamily.SI> {
21192119
let Inst{15} = ps.addr64;
2120+
let SubtargetPredicate = isGFX6GFX7;
21202121
}
21212122

21222123
//===----------------------------------------------------------------------===//
@@ -2135,7 +2136,7 @@ class Pre_gfx11_MUBUF_Name <string mnemonic, string real_name> :
21352136

21362137
class MUBUF_Real_gfx11_impl<bits<8> op, string ps_name, string real_name> :
21372138
MUBUF_Real_gfx11<op, !cast<MUBUF_Pseudo>(ps_name), real_name>;
2138-
let AssemblerPredicate = isGFX11Only, DecoderNamespace = "GFX11" in
2139+
let DecoderNamespace = "GFX11" in
21392140
multiclass MUBUF_Real_AllAddr_gfx11_Renamed_Impl2<bits<8> op, string real_name> {
21402141
def _BOTHEN_gfx11 : MUBUF_Real_gfx11_impl<op, NAME # "_BOTHEN", real_name>;
21412142
def _IDXEN_gfx11 : MUBUF_Real_gfx11_impl<op, NAME # "_IDXEN", real_name>;
@@ -2162,7 +2163,7 @@ multiclass MUBUF_Real_AllAddr_gfx11_Renamed<bits<8> op, string real_name> :
21622163
class MUBUF_Real_Atomic_gfx11_impl<bits<8> op, string ps_name,
21632164
string real_name> :
21642165
Base_MUBUF_Real_Atomic_gfx11<op, !cast<MUBUF_Pseudo>(ps_name), real_name>;
2165-
let AssemblerPredicate = isGFX11Only, DecoderNamespace = "GFX11" in
2166+
let DecoderNamespace = "GFX11" in
21662167
multiclass MUBUF_Real_Atomic_gfx11_Renamed_impl<bits<8> op, bit is_return,
21672168
string real_name> {
21682169
defvar Rtn = !if(!eq(is_return, 1), "_RTN", "");
@@ -2191,7 +2192,7 @@ multiclass MUBUF_Real_Atomic_gfx11_Renamed<bits<8> op, string real_name> :
21912192
def : Pre_gfx11_MUBUF_Name<get_MUBUF_ps<NAME>.Mnemonic, real_name>;
21922193
}
21932194

2194-
let AssemblerPredicate = isGFX11Only, DecoderNamespace = "GFX11" in {
2195+
let DecoderNamespace = "GFX11" in {
21952196
def BUFFER_GL0_INV_gfx11 : MUBUF_Real_gfx11<0x02B, BUFFER_GL0_INV>;
21962197
def BUFFER_GL1_INV_gfx11 : MUBUF_Real_gfx11<0x02C, BUFFER_GL1_INV>;
21972198
}
@@ -2279,7 +2280,7 @@ defm BUFFER_ATOMIC_XOR_X2 : MUBUF_Real_Atomic_gfx11_Renamed<0x04B, "buff
22792280
// MUBUF - GFX10.
22802281
//===----------------------------------------------------------------------===//
22812282

2282-
let AssemblerPredicate = isGFX10Only, DecoderNamespace = "GFX10" in {
2283+
let DecoderNamespace = "GFX10" in {
22832284
multiclass MUBUF_Real_AllAddr_Helper_gfx10<bits<8> op> {
22842285
def _BOTHEN_gfx10 :
22852286
MUBUF_Real_gfx10<op, !cast<MUBUF_Pseudo>(NAME#"_BOTHEN")>;
@@ -2336,7 +2337,7 @@ let AssemblerPredicate = isGFX10Only, DecoderNamespace = "GFX10" in {
23362337
MUBUF_Real_gfx10<op, !cast<MUBUF_Pseudo>(NAME#"_OFFSET")>,
23372338
AtomicNoRet<NAME # "_OFFSET_gfx10", 0>;
23382339
}
2339-
} // End AssemblerPredicate = isGFX10Only, DecoderNamespace = "GFX10"
2340+
} // End DecoderNamespace = "GFX10"
23402341

23412342
defm BUFFER_STORE_BYTE_D16_HI : MUBUF_Real_AllAddr_gfx10<0x019>;
23422343
defm BUFFER_STORE_SHORT_D16_HI : MUBUF_Real_AllAddr_gfx10<0x01b>;

0 commit comments

Comments
 (0)