26 changes: 25 additions & 1 deletion llvm/test/MC/AMDGPU/user-sgpr-count-diag.s
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
// RUN: not llvm-mc --amdhsa-code-object-version=3 -triple amdgcn-amd-amdhsa -mcpu=gfx810 %s 2>&1 >/dev/null | FileCheck -check-prefix=ERR %s
// RUN: not llvm-mc --amdhsa-code-object-version=3 -triple amdgcn-amd-amdhsa -mcpu=gfx90a %s 2>&1 >/dev/null | FileCheck -check-prefix=ERR %s

.amdhsa_kernel implied_count_too_low_0
.amdhsa_user_sgpr_count 0
.amdhsa_user_sgpr_queue_ptr 1
.amdhsa_accum_offset 4
.amdhsa_next_free_vgpr 32
.amdhsa_next_free_sgpr 32
// ERR: :[[@LINE+1]]:19: error: amdgpu_user_sgpr_count smaller than than implied by enabled user SGPRs
Expand All @@ -11,7 +12,30 @@
.amdhsa_kernel implied_count_too_low_1
.amdhsa_user_sgpr_count 1
.amdhsa_user_sgpr_queue_ptr 1
.amdhsa_accum_offset 4
.amdhsa_next_free_vgpr 32
.amdhsa_next_free_sgpr 32
// ERR: :[[@LINE+1]]:19: error: amdgpu_user_sgpr_count smaller than than implied by enabled user SGPRs
.end_amdhsa_kernel

.amdhsa_kernel implied_count_too_low_2
.amdhsa_user_sgpr_count 2
.amdhsa_user_sgpr_queue_ptr 1
.amdhsa_user_sgpr_kernarg_preload_length 1
.amdhsa_accum_offset 4
.amdhsa_next_free_vgpr 32
.amdhsa_next_free_sgpr 32
// ERR: :[[@LINE+1]]:19: error: amdgpu_user_sgpr_count smaller than than implied by enabled user SGPRs
.end_amdhsa_kernel

.amdhsa_kernel preload_out_of_bounds_0
.amdhsa_user_sgpr_count 4
.amdhsa_user_sgpr_queue_ptr 1
.amdhsa_user_sgpr_kernarg_preload_length 1
.amdhsa_user_sgpr_kernarg_preload_offset 1
.amdhsa_kernarg_size 4
.amdhsa_accum_offset 4
.amdhsa_next_free_vgpr 32
.amdhsa_next_free_sgpr 32
// ERR: :[[@LINE+1]]:19: error: Kernarg preload length + offset is larger than the kernarg segment size
.end_amdhsa_kernel
46 changes: 43 additions & 3 deletions llvm/test/MC/AMDGPU/user-sgpr-count.s
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
// RUN: llvm-mc -triple amdgcn-amd-amdhsa -mcpu=gfx904 --amdhsa-code-object-version=3 -mattr=+xnack < %s | FileCheck --check-prefix=ASM %s
// RUN: llvm-mc -triple amdgcn-amd-amdhsa -mcpu=gfx90a --amdhsa-code-object-version=3 -mattr=+xnack < %s | FileCheck --check-prefix=ASM %s

.text
// ASM: .text

.amdgcn_target "amdgcn-amd-amdhsa--gfx904+xnack"
// ASM: .amdgcn_target "amdgcn-amd-amdhsa--gfx904+xnack"
.amdgcn_target "amdgcn-amd-amdhsa--gfx90a+xnack+sram-ecc"
// ASM: .amdgcn_target "amdgcn-amd-amdhsa--gfx90a+xnack+sram-ecc"


// ASM-LABEL: .amdhsa_kernel user_sgprs_implied_count
Expand All @@ -17,6 +17,7 @@
.amdhsa_user_sgpr_dispatch_id 1
.amdhsa_user_sgpr_flat_scratch_init 1
.amdhsa_user_sgpr_private_segment_size 1
.amdhsa_accum_offset 4
.amdhsa_next_free_vgpr 32
.amdhsa_next_free_sgpr 32
.end_amdhsa_kernel
Expand All @@ -28,6 +29,7 @@
.amdhsa_user_sgpr_kernarg_segment_ptr 1
.amdhsa_user_sgpr_flat_scratch_init 1
.amdhsa_user_sgpr_private_segment_size 1
.amdhsa_accum_offset 4
.amdhsa_next_free_vgpr 32
.amdhsa_next_free_sgpr 32
.end_amdhsa_kernel
Expand All @@ -39,6 +41,7 @@
.amdhsa_user_sgpr_queue_ptr 1
.amdhsa_user_sgpr_kernarg_segment_ptr 1
.amdhsa_user_sgpr_private_segment_size 1
.amdhsa_accum_offset 4
.amdhsa_next_free_vgpr 32
.amdhsa_next_free_sgpr 32
.end_amdhsa_kernel
Expand All @@ -48,6 +51,7 @@
// ASM: .amdhsa_user_sgpr_count 4
.amdhsa_kernel user_sgprs_implied_count_private_segment_buffer
.amdhsa_user_sgpr_private_segment_buffer 1
.amdhsa_accum_offset 4
.amdhsa_next_free_vgpr 32
.amdhsa_next_free_sgpr 32
.end_amdhsa_kernel
Expand All @@ -56,6 +60,7 @@
// ASM-LABEL: .amdhsa_kernel explicit_user_sgpr_count_16
.amdhsa_kernel explicit_user_sgpr_count_16
.amdhsa_user_sgpr_count 16
.amdhsa_accum_offset 4
.amdhsa_next_free_vgpr 32
.amdhsa_next_free_sgpr 32
.end_amdhsa_kernel
Expand All @@ -65,6 +70,7 @@
// ASM: .amdhsa_user_sgpr_count 0
.amdhsa_kernel explicit_user_sgpr_count_0
.amdhsa_user_sgpr_count 0
.amdhsa_accum_offset 4
.amdhsa_next_free_vgpr 32
.amdhsa_next_free_sgpr 32
.end_amdhsa_kernel
Expand All @@ -73,6 +79,7 @@
// ASM: .amdhsa_user_sgpr_count 1
.amdhsa_kernel explicit_user_sgpr_count_1
.amdhsa_user_sgpr_count 1
.amdhsa_accum_offset 4
.amdhsa_next_free_vgpr 32
.amdhsa_next_free_sgpr 32
.end_amdhsa_kernel
Expand All @@ -82,6 +89,39 @@
.amdhsa_user_sgpr_private_segment_buffer 1
.amdhsa_user_sgpr_queue_ptr 1
.amdhsa_user_sgpr_kernarg_segment_ptr 1
.amdhsa_accum_offset 4
.amdhsa_next_free_vgpr 32
.amdhsa_next_free_sgpr 32
.end_amdhsa_kernel

.amdhsa_kernel preload_kernarg_0
.amdhsa_user_sgpr_count 3
.amdhsa_user_sgpr_queue_ptr 1
.amdhsa_user_sgpr_kernarg_preload_length 1
.amdhsa_user_sgpr_kernarg_preload_offset 1
.amdhsa_kernarg_size 8
.amdhsa_accum_offset 4
.amdhsa_next_free_vgpr 32
.amdhsa_next_free_sgpr 32
.end_amdhsa_kernel

.amdhsa_kernel preload_kernarg_1
.amdhsa_user_sgpr_count 3
.amdhsa_user_sgpr_queue_ptr 1
.amdhsa_user_sgpr_kernarg_preload_length 0
.amdhsa_user_sgpr_kernarg_preload_offset 10
.amdhsa_kernarg_size 0
.amdhsa_accum_offset 4
.amdhsa_next_free_vgpr 32
.amdhsa_next_free_sgpr 32
.end_amdhsa_kernel

.amdhsa_kernel preload_kernarg_2
.amdhsa_user_sgpr_count 3
.amdhsa_user_sgpr_queue_ptr 1
.amdhsa_user_sgpr_kernarg_preload_length 1
.amdhsa_user_sgpr_kernarg_preload_offset 0
.amdhsa_accum_offset 4
.amdhsa_next_free_vgpr 32
.amdhsa_next_free_sgpr 32
.end_amdhsa_kernel
7 changes: 6 additions & 1 deletion llvm/test/tools/llvm-objdump/ELF/AMDGPU/kd-gfx90a.s
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@
; CHECK: .amdhsa_kernel kernel
; CHECK-NEXT: .amdhsa_group_segment_fixed_size 0
; CHECK-NEXT: .amdhsa_private_segment_fixed_size 0
; CHECK-NEXT: .amdhsa_kernarg_size 0
; CHECK-NEXT: .amdhsa_kernarg_size 32
; CHECK-NEXT: .amdhsa_accum_offset 12
; CHECK-NEXT: .amdhsa_tg_split 0
; CHECK-NEXT: .amdhsa_next_free_vgpr 32
Expand Down Expand Up @@ -145,9 +145,14 @@
; CHECK-NEXT: .amdhsa_user_sgpr_dispatch_id 0
; CHECK-NEXT: .amdhsa_user_sgpr_flat_scratch_init 0
; CHECK-NEXT: .amdhsa_user_sgpr_private_segment_size 0
; CHECK-NEXT: .amdhsa_user_sgpr_kernarg_preload_length 2
; CHECK-NEXT: .amdhsa_user_sgpr_kernarg_preload_offset 1
; CHECK-NEXT: .end_amdhsa_kernel
.amdhsa_kernel kernel
.amdhsa_next_free_vgpr 32
.amdhsa_next_free_sgpr 0
.amdhsa_accum_offset 12
.amdhsa_kernarg_size 32
.amdhsa_user_sgpr_kernarg_preload_length 2
.amdhsa_user_sgpr_kernarg_preload_offset 1
.end_amdhsa_kernel