From 3cacd079d8671473213fd273a8df6839723728a2 Mon Sep 17 00:00:00 2001 From: Jannik Silvanus Date: Thu, 30 Mar 2023 17:45:38 +0200 Subject: [PATCH 1/2] [AMDGPU] Add GFX12 S_ALLOC_VGPR instruction This patch only adds the instruction for disassembly support. We neither have an instrinsic nor codegen support, and it is unclear whether we actually want to ever have an intrinsic, given the fragile semantics. For now, it will be generated only by the backend in very specific circumstances. --- llvm/lib/Target/AMDGPU/SOPInstructions.td | 7 +++++++ llvm/test/MC/AMDGPU/gfx11_unsupported.s | 3 +++ llvm/test/MC/AMDGPU/gfx12_asm_sop1.s | 9 +++++++++ llvm/test/MC/Disassembler/AMDGPU/gfx12_dasm_sop1.txt | 9 +++++++++ 4 files changed, 28 insertions(+) diff --git a/llvm/lib/Target/AMDGPU/SOPInstructions.td b/llvm/lib/Target/AMDGPU/SOPInstructions.td index 5e62ceac281b8..eeac9c1ad1084 100644 --- a/llvm/lib/Target/AMDGPU/SOPInstructions.td +++ b/llvm/lib/Target/AMDGPU/SOPInstructions.td @@ -423,6 +423,12 @@ let SubtargetPredicate = isGFX11Plus in { } } // End SubtargetPredicate = isGFX11Plus +let SubtargetPredicate = isGFX12Plus in { + let hasSideEffects = 1, Defs = [SCC] in { + def S_ALLOC_VGPR : SOP1_0_32 <"s_alloc_vgpr">; + } +} // End SubtargetPredicate = isGFX12Plus + class SOP1_F32_Inst : SOP1_32 vt1:$src0))]>; @@ -2048,6 +2054,7 @@ defm S_GET_BARRIER_STATE_M0 : SOP1_M0_Real_gfx12<0x050>; defm S_BARRIER_SIGNAL_IMM : SOP1_IMM_Real_gfx12<0x04e>; defm S_BARRIER_SIGNAL_ISFIRST_IMM : SOP1_IMM_Real_gfx12<0x04f>; defm S_GET_BARRIER_STATE_IMM : SOP1_IMM_Real_gfx12<0x050>; +defm S_ALLOC_VGPR : SOP1_Real_gfx12<0x053>; defm S_SLEEP_VAR : SOP1_IMM_Real_gfx12<0x058>; //===----------------------------------------------------------------------===// diff --git a/llvm/test/MC/AMDGPU/gfx11_unsupported.s b/llvm/test/MC/AMDGPU/gfx11_unsupported.s index d5d10ce548c4d..cd30647fe6378 100644 --- a/llvm/test/MC/AMDGPU/gfx11_unsupported.s +++ b/llvm/test/MC/AMDGPU/gfx11_unsupported.s @@ -322,6 +322,9 @@ image_sample_cd_o v252, v[1:4], s[8:15], s[12:15] dmask:0x1 image_sample_cd_o_g16 v[5:6], v[1:4], s[8:15], s[12:15] dmask:0x3 // CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction not supported on this GPU +s_alloc_vgpr s0 +// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction not supported on this GPU + s_atomic_add flat_scratch_hi, s[2:3], s0 // CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction not supported on this GPU diff --git a/llvm/test/MC/AMDGPU/gfx12_asm_sop1.s b/llvm/test/MC/AMDGPU/gfx12_asm_sop1.s index 1e12e5bb48828..3828a4d36adcc 100644 --- a/llvm/test/MC/AMDGPU/gfx12_asm_sop1.s +++ b/llvm/test/MC/AMDGPU/gfx12_asm_sop1.s @@ -1,5 +1,14 @@ // RUN: llvm-mc -triple=amdgcn -show-encoding -mcpu=gfx1200 %s | FileCheck --check-prefix=GFX12 %s +s_alloc_vgpr 0x1235 +// GFX12: encoding: [0xff,0x53,0x80,0xbe,0x35,0x12,0x00,0x00] + +s_alloc_vgpr 18 +// GFX12: encoding: [0x92,0x53,0x80,0xbe] + +s_alloc_vgpr s35 +// GFX12: encoding: [0x23,0x53,0x80,0xbe] + s_sleep_var 0x1234 // GFX12: encoding: [0xff,0x58,0x80,0xbe,0x34,0x12,0x00,0x00] diff --git a/llvm/test/MC/Disassembler/AMDGPU/gfx12_dasm_sop1.txt b/llvm/test/MC/Disassembler/AMDGPU/gfx12_dasm_sop1.txt index fa7d020bdd726..2ee84fa976d79 100644 --- a/llvm/test/MC/Disassembler/AMDGPU/gfx12_dasm_sop1.txt +++ b/llvm/test/MC/Disassembler/AMDGPU/gfx12_dasm_sop1.txt @@ -1,5 +1,14 @@ # RUN: llvm-mc -triple=amdgcn -mcpu=gfx1200 -disassemble -show-encoding < %s | FileCheck -check-prefixes=GFX12 %s +# GFX12: s_alloc_vgpr 0x1235 ; encoding: [0xff,0x53,0x80,0xbe,0x35,0x12,0x00,0x00] +0xff,0x53,0x80,0xbe,0x35,0x12,0x00,0x00 + +# GFX12: s_alloc_vgpr 18 ; encoding: [0x92,0x53,0x80,0xbe] +0x92,0x53,0x80,0xbe + +# GFX12: s_alloc_vgpr s35 ; encoding: [0x23,0x53,0x80,0xbe] +0x23,0x53,0x80,0xbe + # GFX12: s_sleep_var 0x1234 ; encoding: [0xff,0x58,0x80,0xbe,0x34,0x12,0x00,0x00] 0xff,0x58,0x80,0xbe,0x34,0x12,0x00,0x00 From 049c04bef6302a92bb04a0b8ecaee29676c6ed66 Mon Sep 17 00:00:00 2001 From: Diana Picus Date: Fri, 7 Mar 2025 10:11:31 +0100 Subject: [PATCH 2/2] More tests --- llvm/test/MC/AMDGPU/gfx12_asm_sop1.s | 6 ++++++ llvm/test/MC/AMDGPU/gfx12_err.s | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/llvm/test/MC/AMDGPU/gfx12_asm_sop1.s b/llvm/test/MC/AMDGPU/gfx12_asm_sop1.s index 3828a4d36adcc..51fd7ded8fda7 100644 --- a/llvm/test/MC/AMDGPU/gfx12_asm_sop1.s +++ b/llvm/test/MC/AMDGPU/gfx12_asm_sop1.s @@ -9,6 +9,12 @@ s_alloc_vgpr 18 s_alloc_vgpr s35 // GFX12: encoding: [0x23,0x53,0x80,0xbe] +s_alloc_vgpr m0 +// GFX12: encoding: [0x7d,0x53,0x80,0xbe] + +s_alloc_vgpr scc +// GFX12: encoding: [0xfd,0x53,0x80,0xbe] + s_sleep_var 0x1234 // GFX12: encoding: [0xff,0x58,0x80,0xbe,0x34,0x12,0x00,0x00] diff --git a/llvm/test/MC/AMDGPU/gfx12_err.s b/llvm/test/MC/AMDGPU/gfx12_err.s index b07e160454ef7..5269288f9d1e8 100644 --- a/llvm/test/MC/AMDGPU/gfx12_err.s +++ b/llvm/test/MC/AMDGPU/gfx12_err.s @@ -116,3 +116,12 @@ s_prefetch_inst s[14:15], 0xffffff, m0, 7 s_endpgm_ordered_ps_done // GFX12-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: instruction not supported on this GPU + +s_alloc_vgpr v0 +// GFX12-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_alloc_vgpr exec +// GFX12-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction + +s_alloc_vgpr vcc +// GFX12-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction