[llvm] [AMDGPU] Add VFLAT, VGLOBAL, VSCRATCH to gfx13 (PR #182811)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Feb 22 22:52:22 PST 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-amdgpu
Author: Mariusz Sikora (mariusz-sikora-at-amd)
<details>
<summary>Changes</summary>
---
Patch is 262.04 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/182811.diff
6 Files Affected:
- (modified) llvm/lib/Target/AMDGPU/AMDGPU.td (+1)
- (modified) llvm/lib/Target/AMDGPU/FLATInstructions.td (+218)
- (modified) llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp (+1-1)
- (modified) llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp (+2-2)
- (added) llvm/test/MC/AMDGPU/gfx13_asm_vflat.s (+3441)
- (added) llvm/test/MC/AMDGPU/gfx13_asm_vflat_alias.s (+414)
``````````diff
diff --git a/llvm/lib/Target/AMDGPU/AMDGPU.td b/llvm/lib/Target/AMDGPU/AMDGPU.td
index 07fb32173c2a3..8199e6f942041 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPU.td
+++ b/llvm/lib/Target/AMDGPU/AMDGPU.td
@@ -2082,6 +2082,7 @@ def FeatureISAVersion13 : FeatureSet<
FeatureShaderCyclesRegister,
FeatureArchitectedFlatScratch,
FeatureArchitectedSGPRs,
+ FeatureFlatGVSMode,
FeatureAtomicFaddRtnInsts,
FeatureAtomicFaddNoRtnInsts,
FeatureAtomicDsPkAdd16Insts,
diff --git a/llvm/lib/Target/AMDGPU/FLATInstructions.td b/llvm/lib/Target/AMDGPU/FLATInstructions.td
index 63460b5571a1c..c92d154846d84 100644
--- a/llvm/lib/Target/AMDGPU/FLATInstructions.td
+++ b/llvm/lib/Target/AMDGPU/FLATInstructions.td
@@ -3722,6 +3722,224 @@ defm GLOBAL_ATOMIC_ADD_F64 : VFLAT_Real_Atomics_gfx1250<0x055>;
defm GLOBAL_ATOMIC_MIN_F64 : VFLAT_Real_Atomics_gfx1250<0x05b, "global_atomic_min_num_f64">;
defm GLOBAL_ATOMIC_MAX_F64 : VFLAT_Real_Atomics_gfx1250<0x05c, "global_atomic_max_num_f64">;
+//===----------------------------------------------------------------------===//
+// GFX13
+//===----------------------------------------------------------------------===//
+
+class VFLAT_Real_Base_gfx13 <bits<8> op, FLAT_Pseudo ps, string opName = ps.Mnemonic>
+ : VFLAT_Real <op, ps, opName>,
+ SIMCInstr <ps.PseudoInstr, SIEncodingFamily.GFX13> {
+ let AssemblerPredicate = isGFX13Only;
+ let DecoderNamespace = "GFX13";
+
+ let Inst{48} = cpol{CPolBit.SCAL}; // scale offset
+}
+
+multiclass VFLAT_Real_gfx13 <bits<8> op, string name = get_FLAT_ps<NAME>.Mnemonic> {
+ defvar ps = !cast<FLAT_Pseudo>(NAME);
+ def _gfx13 : VFLAT_Real_Base_gfx13 <op, ps, name> {
+ let Inst{25-24} = {ps.is_flat_global, ps.is_flat_scratch};
+ }
+}
+
+multiclass VFLAT_Aliases_gfx13<string name, string alias = name> {
+ defvar ps = get_FLAT_ps<NAME>;
+ if !ne(ps.Mnemonic, name) then
+ def : MnemonicAlias<ps.Mnemonic, name>, Requires<[isGFX13Only]>;
+ if !ne(alias, name) then
+ def : MnemonicAlias<alias, name>, Requires<[isGFX13Only]>;
+}
+
+multiclass VFLAT_Real_Base_gfx13<bits<8> op,
+ string name = get_FLAT_ps<NAME>.Mnemonic,
+ string alias = name> :
+ VFLAT_Aliases_gfx13<name, alias>,
+ VFLAT_Real_gfx13<op, name>;
+
+multiclass VFLAT_Real_Atomics_gfx13<bits<8> op,
+ string name = get_FLAT_ps<NAME>.Mnemonic,
+ string alias = name> :
+ VFLAT_Real_Base_gfx13<op, name, alias> {
+ defm _RTN : VFLAT_Real_gfx13<op, name>;
+}
+
+multiclass VFLAT_Real_AllAddr_gfx13<bits<8> op,
+ string name = get_FLAT_ps<NAME>.Mnemonic,
+ string alias = name> :
+ VFLAT_Real_Base_gfx13<op, name, alias> {
+ defm _SADDR : VFLAT_Real_gfx13<op, name>;
+}
+
+multiclass VFLAT_Real_AllAddr_Atomics_gfx13<bits<8> op,
+ string name = get_FLAT_ps<NAME>.Mnemonic,
+ string alias = name> :
+ VFLAT_Real_AllAddr_gfx13<op, name, alias> {
+ defm _RTN : VFLAT_Real_gfx13<op, name>;
+ defm _SADDR_RTN : VFLAT_Real_gfx13<op, name>;
+}
+
+multiclass VSCRATCH_Real_AllAddr_gfx13<bits<8> op,
+ string name = get_FLAT_ps<NAME>.Mnemonic> :
+ VFLAT_Real_Base_gfx13<op, name> {
+ defm _SADDR : VFLAT_Real_gfx13<op, name>;
+ defm _ST : VFLAT_Real_gfx13<op, name>;
+ defm _SVS : VFLAT_Real_gfx13<op, name>;
+}
+
+// ENC_VFLAT.
+defm FLAT_LOAD_UBYTE : VFLAT_Real_AllAddr_gfx13<0x08, "flat_load_u8">;
+defm FLAT_LOAD_SBYTE : VFLAT_Real_AllAddr_gfx13<0x09, "flat_load_i8">;
+defm FLAT_LOAD_USHORT : VFLAT_Real_AllAddr_gfx13<0x0a, "flat_load_u16">;
+defm FLAT_LOAD_SSHORT : VFLAT_Real_AllAddr_gfx13<0x0b, "flat_load_i16">;
+defm FLAT_LOAD_DWORD : VFLAT_Real_AllAddr_gfx13<0x0c, "flat_load_b32">;
+defm FLAT_LOAD_DWORDX2 : VFLAT_Real_AllAddr_gfx13<0x0d, "flat_load_b64">;
+defm FLAT_LOAD_DWORDX4 : VFLAT_Real_AllAddr_gfx13<0x0e, "flat_load_b128">;
+defm FLAT_LOAD_DWORDX3 : VFLAT_Real_AllAddr_gfx13<0x0f, "flat_load_b96">;
+defm FLAT_STORE_BYTE : VFLAT_Real_AllAddr_gfx13<0x18, "flat_store_b8">;
+defm FLAT_STORE_BYTE_D16_HI : VFLAT_Real_AllAddr_gfx13<0x19, "flat_store_d16_hi_b8">;
+defm FLAT_STORE_SHORT : VFLAT_Real_AllAddr_gfx13<0x1a, "flat_store_b16">;
+defm FLAT_STORE_SHORT_D16_HI : VFLAT_Real_AllAddr_gfx13<0x1b, "flat_store_d16_hi_b16">;
+defm FLAT_STORE_DWORD : VFLAT_Real_AllAddr_gfx13<0x1c, "flat_store_b32">;
+defm FLAT_STORE_DWORDX2 : VFLAT_Real_AllAddr_gfx13<0x1d, "flat_store_b64">;
+defm FLAT_STORE_DWORDX4 : VFLAT_Real_AllAddr_gfx13<0x1e, "flat_store_b128">;
+defm FLAT_STORE_DWORDX3 : VFLAT_Real_AllAddr_gfx13<0x1f, "flat_store_b96">;
+defm FLAT_LOAD_UBYTE_D16 : VFLAT_Real_AllAddr_gfx13<0x20, "flat_load_d16_u8">;
+defm FLAT_LOAD_UBYTE_D16_HI : VFLAT_Real_AllAddr_gfx13<0x21, "flat_load_d16_hi_u8">;
+defm FLAT_LOAD_SBYTE_D16 : VFLAT_Real_AllAddr_gfx13<0x22, "flat_load_d16_i8">;
+defm FLAT_LOAD_SBYTE_D16_HI : VFLAT_Real_AllAddr_gfx13<0x23, "flat_load_d16_hi_i8">;
+defm FLAT_LOAD_SHORT_D16 : VFLAT_Real_AllAddr_gfx13<0x24, "flat_load_d16_b16">;
+defm FLAT_LOAD_SHORT_D16_HI : VFLAT_Real_AllAddr_gfx13<0x25, "flat_load_d16_hi_b16">;
+defm FLAT_ATOMIC_SWAP : VFLAT_Real_AllAddr_Atomics_gfx13<0x30, "flat_atomic_swap_b32">;
+defm FLAT_ATOMIC_CMPSWAP : VFLAT_Real_AllAddr_Atomics_gfx13<0x31, "flat_atomic_cmpswap_b32">;
+defm FLAT_ATOMIC_ADD : VFLAT_Real_AllAddr_Atomics_gfx13<0x32, "flat_atomic_add_u32">;
+defm FLAT_ATOMIC_SUB : VFLAT_Real_AllAddr_Atomics_gfx13<0x33, "flat_atomic_sub_u32">;
+defm FLAT_ATOMIC_CSUB_U32 : VFLAT_Real_AllAddr_Atomics_gfx13<0x34, "flat_atomic_sub_clamp_u32">;
+defm FLAT_ATOMIC_SMIN : VFLAT_Real_AllAddr_Atomics_gfx13<0x35, "flat_atomic_min_i32">;
+defm FLAT_ATOMIC_UMIN : VFLAT_Real_AllAddr_Atomics_gfx13<0x36, "flat_atomic_min_u32">;
+defm FLAT_ATOMIC_SMAX : VFLAT_Real_AllAddr_Atomics_gfx13<0x37, "flat_atomic_max_i32">;
+defm FLAT_ATOMIC_UMAX : VFLAT_Real_AllAddr_Atomics_gfx13<0x38, "flat_atomic_max_u32">;
+defm FLAT_ATOMIC_AND : VFLAT_Real_AllAddr_Atomics_gfx13<0x39, "flat_atomic_and_b32">;
+defm FLAT_ATOMIC_OR : VFLAT_Real_AllAddr_Atomics_gfx13<0x3a, "flat_atomic_or_b32">;
+defm FLAT_ATOMIC_XOR : VFLAT_Real_AllAddr_Atomics_gfx13<0x3b, "flat_atomic_xor_b32">;
+defm FLAT_ATOMIC_INC : VFLAT_Real_AllAddr_Atomics_gfx13<0x3c, "flat_atomic_inc_u32">;
+defm FLAT_ATOMIC_DEC : VFLAT_Real_AllAddr_Atomics_gfx13<0x3d, "flat_atomic_dec_u32">;
+defm FLAT_ATOMIC_FMIN : VFLAT_Real_AllAddr_Atomics_gfx13<0x3f, "flat_atomic_min_num_f32", "flat_atomic_min_f32">;
+defm FLAT_ATOMIC_FMAX : VFLAT_Real_AllAddr_Atomics_gfx13<0x40, "flat_atomic_max_num_f32", "flat_atomic_max_f32">;
+defm FLAT_ATOMIC_MIN_F64 : VFLAT_Real_AllAddr_Atomics_gfx13<0x5f, "flat_atomic_min_num_f64", "flat_atomic_fmin_x2">;
+defm FLAT_ATOMIC_MAX_F64 : VFLAT_Real_AllAddr_Atomics_gfx13<0x60, "flat_atomic_max_num_f64", "flat_atomic_fmax_x2">;
+defm FLAT_ATOMIC_COND_SUB_U32 : VFLAT_Real_AllAddr_Atomics_gfx13<0x47>;
+defm FLAT_ATOMIC_PK_ADD_F16 : VFLAT_Real_AllAddr_Atomics_gfx13<0x4a>;
+defm FLAT_ATOMIC_PK_ADD_BF16 : VFLAT_Real_AllAddr_Atomics_gfx13<0x4b>;
+defm FLAT_ATOMIC_SWAP_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x50, "flat_atomic_swap_b64">;
+defm FLAT_ATOMIC_CMPSWAP_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x51, "flat_atomic_cmpswap_b64">;
+defm FLAT_ATOMIC_ADD_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x52, "flat_atomic_add_u64">;
+defm FLAT_ATOMIC_SUB_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x53, "flat_atomic_sub_u64">;
+defm FLAT_ATOMIC_ADD_F32 : VFLAT_Real_AllAddr_Atomics_gfx13<0x54>;
+defm FLAT_ATOMIC_SMIN_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x55, "flat_atomic_min_i64">;
+defm FLAT_ATOMIC_UMIN_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x56, "flat_atomic_min_u64">;
+defm FLAT_ATOMIC_SMAX_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x57, "flat_atomic_max_i64">;
+defm FLAT_ATOMIC_UMAX_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x58, "flat_atomic_max_u64">;
+defm FLAT_ATOMIC_AND_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x59, "flat_atomic_and_b64">;
+defm FLAT_ATOMIC_OR_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x5a, "flat_atomic_or_b64">;
+defm FLAT_ATOMIC_XOR_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x5b, "flat_atomic_xor_b64">;
+defm FLAT_ATOMIC_INC_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x5c, "flat_atomic_inc_u64">;
+defm FLAT_ATOMIC_DEC_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x5d, "flat_atomic_dec_u64">;
+
+// ENC_VGLOBAL.
+defm GLOBAL_LOAD_UBYTE : VFLAT_Real_AllAddr_gfx13<0x08, "global_load_u8">;
+defm GLOBAL_LOAD_SBYTE : VFLAT_Real_AllAddr_gfx13<0x09, "global_load_i8">;
+defm GLOBAL_LOAD_USHORT : VFLAT_Real_AllAddr_gfx13<0x0a, "global_load_u16">;
+defm GLOBAL_LOAD_SSHORT : VFLAT_Real_AllAddr_gfx13<0x0b, "global_load_i16">;
+defm GLOBAL_LOAD_DWORD : VFLAT_Real_AllAddr_gfx13<0x0c, "global_load_b32">;
+defm GLOBAL_LOAD_DWORDX2 : VFLAT_Real_AllAddr_gfx13<0x0d, "global_load_b64">;
+defm GLOBAL_LOAD_DWORDX4 : VFLAT_Real_AllAddr_gfx13<0x0e, "global_load_b128">;
+defm GLOBAL_LOAD_DWORDX3 : VFLAT_Real_AllAddr_gfx13<0x0f, "global_load_b96">;
+defm GLOBAL_LOAD_DWORD_ADDTID : VFLAT_Real_AllAddr_gfx13<0x16, "global_load_addtid_b32">;
+defm GLOBAL_STORE_DWORD_ADDTID : VFLAT_Real_AllAddr_gfx13<0x17, "global_store_addtid_b32">;
+defm GLOBAL_STORE_BYTE : VFLAT_Real_AllAddr_gfx13<0x18, "global_store_b8">;
+defm GLOBAL_STORE_BYTE_D16_HI : VFLAT_Real_AllAddr_gfx13<0x19, "global_store_d16_hi_b8">;
+defm GLOBAL_STORE_SHORT : VFLAT_Real_AllAddr_gfx13<0x1a, "global_store_b16">;
+defm GLOBAL_STORE_SHORT_D16_HI : VFLAT_Real_AllAddr_gfx13<0x1b, "global_store_d16_hi_b16">;
+defm GLOBAL_STORE_DWORD : VFLAT_Real_AllAddr_gfx13<0x1c, "global_store_b32">;
+defm GLOBAL_STORE_DWORDX2 : VFLAT_Real_AllAddr_gfx13<0x1d, "global_store_b64">;
+defm GLOBAL_STORE_DWORDX4 : VFLAT_Real_AllAddr_gfx13<0x1e, "global_store_b128">;
+defm GLOBAL_STORE_DWORDX3 : VFLAT_Real_AllAddr_gfx13<0x1f, "global_store_b96">;
+defm GLOBAL_LOAD_UBYTE_D16 : VFLAT_Real_AllAddr_gfx13<0x20, "global_load_d16_u8">;
+defm GLOBAL_LOAD_UBYTE_D16_HI : VFLAT_Real_AllAddr_gfx13<0x21, "global_load_d16_hi_u8">;
+defm GLOBAL_LOAD_SBYTE_D16 : VFLAT_Real_AllAddr_gfx13<0x22, "global_load_d16_i8">;
+defm GLOBAL_LOAD_SBYTE_D16_HI : VFLAT_Real_AllAddr_gfx13<0x23, "global_load_d16_hi_i8">;
+defm GLOBAL_LOAD_SHORT_D16 : VFLAT_Real_AllAddr_gfx13<0x24, "global_load_d16_b16">;
+defm GLOBAL_LOAD_SHORT_D16_HI : VFLAT_Real_AllAddr_gfx13<0x25, "global_load_d16_hi_b16">;
+defm GLOBAL_INV : VFLAT_Real_Base_gfx13<0x2b>;
+defm GLOBAL_WB : VFLAT_Real_Base_gfx13<0x2c>;
+defm GLOBAL_WBINV : VFLAT_Real_Base_gfx13<0x2e>;
+defm GLOBAL_ATOMIC_SWAP : VFLAT_Real_AllAddr_Atomics_gfx13<0x30, "global_atomic_swap_b32">;
+defm GLOBAL_ATOMIC_CMPSWAP : VFLAT_Real_AllAddr_Atomics_gfx13<0x31, "global_atomic_cmpswap_b32">;
+defm GLOBAL_ATOMIC_ADD : VFLAT_Real_AllAddr_Atomics_gfx13<0x32, "global_atomic_add_u32">;
+defm GLOBAL_ATOMIC_SUB : VFLAT_Real_AllAddr_Atomics_gfx13<0x33, "global_atomic_sub_u32">;
+defm GLOBAL_ATOMIC_CSUB : VFLAT_Real_AllAddr_Atomics_gfx13<0x34, "global_atomic_sub_clamp_u32", "global_atomic_csub_u32">;
+defm GLOBAL_ATOMIC_SMIN : VFLAT_Real_AllAddr_Atomics_gfx13<0x35, "global_atomic_min_i32">;
+defm GLOBAL_ATOMIC_UMIN : VFLAT_Real_AllAddr_Atomics_gfx13<0x36, "global_atomic_min_u32">;
+defm GLOBAL_ATOMIC_SMAX : VFLAT_Real_AllAddr_Atomics_gfx13<0x37, "global_atomic_max_i32">;
+defm GLOBAL_ATOMIC_UMAX : VFLAT_Real_AllAddr_Atomics_gfx13<0x38, "global_atomic_max_u32">;
+defm GLOBAL_ATOMIC_AND : VFLAT_Real_AllAddr_Atomics_gfx13<0x39, "global_atomic_and_b32">;
+defm GLOBAL_ATOMIC_OR : VFLAT_Real_AllAddr_Atomics_gfx13<0x3a, "global_atomic_or_b32">;
+defm GLOBAL_ATOMIC_XOR : VFLAT_Real_AllAddr_Atomics_gfx13<0x3b, "global_atomic_xor_b32">;
+defm GLOBAL_ATOMIC_INC : VFLAT_Real_AllAddr_Atomics_gfx13<0x3c, "global_atomic_inc_u32">;
+defm GLOBAL_ATOMIC_DEC : VFLAT_Real_AllAddr_Atomics_gfx13<0x3d, "global_atomic_dec_u32">;
+defm GLOBAL_ATOMIC_FMIN : VFLAT_Real_AllAddr_Atomics_gfx13<0x3f, "global_atomic_min_num_f32", "global_atomic_min_f32">;
+defm GLOBAL_ATOMIC_FMAX : VFLAT_Real_AllAddr_Atomics_gfx13<0x40, "global_atomic_max_num_f32", "global_atomic_max_f32">;
+defm GLOBAL_ATOMIC_MIN_F64 : VFLAT_Real_AllAddr_Atomics_gfx13<0x5f, "global_atomic_min_num_f64", "global_atomic_fmin_x2">;
+defm GLOBAL_ATOMIC_MAX_F64 : VFLAT_Real_AllAddr_Atomics_gfx13<0x60, "global_atomic_max_num_f64", "global_atomic_fmax_x2">;
+defm GLOBAL_LOAD_BLOCK : VFLAT_Real_AllAddr_gfx13<0x43>;
+defm GLOBAL_STORE_BLOCK : VFLAT_Real_AllAddr_gfx13<0x44>;
+defm GLOBAL_LOAD_TR_B128_w32 : VFLAT_Real_AllAddr_gfx13<0x45, "global_load_tr16_b128">;
+defm GLOBAL_LOAD_TR_B64_w32 : VFLAT_Real_AllAddr_gfx13<0x46, "global_load_tr8_b64">;
+defm GLOBAL_ATOMIC_COND_SUB_U32 : VFLAT_Real_AllAddr_Atomics_gfx13<0x47>;
+defm GLOBAL_ATOMIC_PK_ADD_F16 : VFLAT_Real_AllAddr_Atomics_gfx13<0x4a>;
+defm GLOBAL_ATOMIC_PK_ADD_BF16 : VFLAT_Real_AllAddr_Atomics_gfx13<0x4b>;
+defm GLOBAL_ATOMIC_SWAP_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x50, "global_atomic_swap_b64">;
+defm GLOBAL_ATOMIC_CMPSWAP_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x51, "global_atomic_cmpswap_b64">;
+defm GLOBAL_ATOMIC_ADD_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x52, "global_atomic_add_u64">;
+defm GLOBAL_ATOMIC_SUB_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x53, "global_atomic_sub_u64">;
+defm GLOBAL_ATOMIC_ADD_F32 : VFLAT_Real_AllAddr_Atomics_gfx13<0x54>;
+defm GLOBAL_ATOMIC_SMIN_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x55, "global_atomic_min_i64">;
+defm GLOBAL_ATOMIC_UMIN_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x56, "global_atomic_min_u64">;
+defm GLOBAL_ATOMIC_SMAX_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x57, "global_atomic_max_i64">;
+defm GLOBAL_ATOMIC_UMAX_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x58, "global_atomic_max_u64">;
+defm GLOBAL_ATOMIC_AND_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x59, "global_atomic_and_b64">;
+defm GLOBAL_ATOMIC_OR_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x5a, "global_atomic_or_b64">;
+defm GLOBAL_ATOMIC_XOR_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x5b, "global_atomic_xor_b64">;
+defm GLOBAL_ATOMIC_INC_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x5c, "global_atomic_inc_u64">;
+defm GLOBAL_ATOMIC_DEC_X2 : VFLAT_Real_AllAddr_Atomics_gfx13<0x5d, "global_atomic_dec_u64">;
+defm GLOBAL_ATOMIC_ORDERED_ADD_B64 : VFLAT_Real_AllAddr_Atomics_gfx13<0x75>;
+
+// ENC_VSCRATCH.
+defm SCRATCH_LOAD_UBYTE : VSCRATCH_Real_AllAddr_gfx13<0x08, "scratch_load_u8">;
+defm SCRATCH_LOAD_SBYTE : VSCRATCH_Real_AllAddr_gfx13<0x09, "scratch_load_i8">;
+defm SCRATCH_LOAD_USHORT : VSCRATCH_Real_AllAddr_gfx13<0x0a, "scratch_load_u16">;
+defm SCRATCH_LOAD_SSHORT : VSCRATCH_Real_AllAddr_gfx13<0x0b, "scratch_load_i16">;
+defm SCRATCH_LOAD_DWORD : VSCRATCH_Real_AllAddr_gfx13<0x0c, "scratch_load_b32">;
+defm SCRATCH_LOAD_DWORDX2 : VSCRATCH_Real_AllAddr_gfx13<0x0d, "scratch_load_b64">;
+defm SCRATCH_LOAD_DWORDX4 : VSCRATCH_Real_AllAddr_gfx13<0x0e, "scratch_load_b128">;
+defm SCRATCH_LOAD_DWORDX3 : VSCRATCH_Real_AllAddr_gfx13<0x0f, "scratch_load_b96">;
+defm SCRATCH_STORE_BYTE : VSCRATCH_Real_AllAddr_gfx13<0x18, "scratch_store_b8">;
+defm SCRATCH_STORE_BYTE_D16_HI : VSCRATCH_Real_AllAddr_gfx13<0x19, "scratch_store_d16_hi_b8">;
+defm SCRATCH_STORE_SHORT : VSCRATCH_Real_AllAddr_gfx13<0x1a, "scratch_store_b16">;
+defm SCRATCH_STORE_SHORT_D16_HI : VSCRATCH_Real_AllAddr_gfx13<0x1b, "scratch_store_d16_hi_b16">;
+defm SCRATCH_STORE_DWORD : VSCRATCH_Real_AllAddr_gfx13<0x1c, "scratch_store_b32">;
+defm SCRATCH_STORE_DWORDX2 : VSCRATCH_Real_AllAddr_gfx13<0x1d, "scratch_store_b64">;
+defm SCRATCH_STORE_DWORDX4 : VSCRATCH_Real_AllAddr_gfx13<0x1e, "scratch_store_b128">;
+defm SCRATCH_STORE_DWORDX3 : VSCRATCH_Real_AllAddr_gfx13<0x1f, "scratch_store_b96">;
+defm SCRATCH_LOAD_UBYTE_D16 : VSCRATCH_Real_AllAddr_gfx13<0x20, "scratch_load_d16_u8">;
+defm SCRATCH_LOAD_UBYTE_D16_HI : VSCRATCH_Real_AllAddr_gfx13<0x21, "scratch_load_d16_hi_u8">;
+defm SCRATCH_LOAD_SBYTE_D16 : VSCRATCH_Real_AllAddr_gfx13<0x22, "scratch_load_d16_i8">;
+defm SCRATCH_LOAD_SBYTE_D16_HI : VSCRATCH_Real_AllAddr_gfx13<0x23, "scratch_load_d16_hi_i8">;
+defm SCRATCH_LOAD_SHORT_D16 : VSCRATCH_Real_AllAddr_gfx13<0x24, "scratch_load_d16_b16">;
+defm SCRATCH_LOAD_SHORT_D16_HI : VSCRATCH_Real_AllAddr_gfx13<0x25, "scratch_load_d16_hi_b16">;
+defm SCRATCH_LOAD_BLOCK : VSCRATCH_Real_AllAddr_gfx13<0x43>;
+defm SCRATCH_STORE_BLOCK : VSCRATCH_Real_AllAddr_gfx13<0x44>;
+
def True16D16Table : GenericTable {
let FilterClass = "True16D16Table";
let CppTypeName = "True16D16Info";
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp
index 4aa4083b6c2ab..0ceca9ae1a7ca 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp
@@ -130,7 +130,7 @@ void AMDGPUInstPrinter::printFlatOffset(const MCInst *MI, unsigned OpNo,
const MCInstrDesc &Desc = MII.get(MI->getOpcode());
bool AllowNegative = (Desc.TSFlags & (SIInstrFlags::FlatGlobal |
SIInstrFlags::FlatScratch)) ||
- AMDGPU::isGFX12(STI);
+ isGFX12Plus(STI);
if (AllowNegative) // Signed offset
O << formatDec(SignExtend32(Imm, AMDGPU::getNumFlatOffsetBits(STI)));
diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
index 8ad424a255fc1..a72184e74666f 100644
--- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
@@ -3447,10 +3447,10 @@ std::optional<int64_t> getSMRDEncodedLiteralOffset32(const MCSubtargetInfo &ST,
}
unsigned getNumFlatOffsetBits(const MCSubtargetInfo &ST) {
- if (AMDGPU::isGFX10(ST))
+ if (isGFX10(ST))
return 12;
- if (AMDGPU::isGFX12(ST))
+ if (isGFX12Plus(ST))
return 24;
return 13;
}
diff --git a/llvm/test/MC/AMDGPU/gfx13_asm_vflat.s b/llvm/test/MC/AMDGPU/gfx13_asm_vflat.s
new file mode 100644
index 0000000000000..a9ace1677cacf
--- /dev/null
+++ b/llvm/test/MC/AMDGPU/gfx13_asm_vflat.s
@@ -0,0 +1,3441 @@
+// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 6
+// RUN: llvm-mc -triple=amdgcn -mcpu=gfx1310 -show-encoding < %s | FileCheck -check-prefixes=GFX13,GFX13-W32 %s
+// RUN: llvm-mc -triple=amdgcn -mcpu=gfx1310 -show-encoding < %s | %extract-encodings | llvm-mc -triple=amdgcn -mcpu=gfx1310 -disassemble -show-encoding | FileCheck -check-prefixes=GFX13,GFX13-W32 %s
+// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1310 -matt...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/182811
More information about the llvm-commits
mailing list