[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