blob: 2595d1e80b39d6f2544a649f1d014c5f250599fb [file] [edit]
# RUN: llc -mtriple=amdgpu9.50-amd-amdhsa %s -o - | FileCheck -check-prefix=DEFAULT %s
# RUN: llc -mtriple=amdgpu9.50-amd-amdhsa -amdgpu-stress-vgpr=2 %s -o - | FileCheck -check-prefix=VGPR2 %s
# RUN: llc -mtriple=amdgpu9.50-amd-amdhsa -amdgpu-stress-vgpr=4 -amdgpu-stress-agpr=0 %s -o - | FileCheck -check-prefix=VGPR4-AGPR0 %s
# Test that -amdgpu-stress-vgpr and -amdgpu-stress-agpr limit register
# availability during register allocation.
#
# No limits - all values stay in VGPRs, no spills.
# With -amdgpu-stress-vgpr=2 - overflow to AGPRs.
# With -amdgpu-stress-vgpr=4 -amdgpu-stress-agpr=0 - forced to spill to scratch.
--- |
define amdgpu_kernel void @stress_regalloc(ptr addrspace(1) %p) #0 { ret void }
attributes #0 = { "amdgpu-waves-per-eu"="1,1" "amdgpu-flat-work-group-size"="64,64" }
...
---
# DEFAULT-LABEL: stress_regalloc:
# DEFAULT: global_load_dword v
# DEFAULT-NOT: global_load_dword a
# DEFAULT-NOT: scratch_store
# DEFAULT: s_endpgm
# VGPR2-LABEL: stress_regalloc:
# VGPR2: global_load_dword a
# VGPR2: s_endpgm
# VGPR4-AGPR0-LABEL: stress_regalloc:
# VGPR4-AGPR0-NOT: global_load_dword a
# VGPR4-AGPR0: scratch_store
# VGPR4-AGPR0: s_endpgm
name: stress_regalloc
tracksRegLiveness: true
machineFunctionInfo:
isEntryFunction: true
body: |
bb.0:
liveins: $sgpr4_sgpr5
%0:sgpr_64 = COPY $sgpr4_sgpr5
%1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 0, 0 :: (load (s64), addrspace 4)
%addr:vreg_64_align2 = COPY %1
%v0:vgpr_32 = GLOBAL_LOAD_DWORD %addr, 0, 0, implicit $exec :: (volatile load (s32), addrspace 1)
%v1:vgpr_32 = GLOBAL_LOAD_DWORD %addr, 4, 0, implicit $exec :: (volatile load (s32), addrspace 1)
%v2:vgpr_32 = GLOBAL_LOAD_DWORD %addr, 8, 0, implicit $exec :: (volatile load (s32), addrspace 1)
%v3:vgpr_32 = GLOBAL_LOAD_DWORD %addr, 12, 0, implicit $exec :: (volatile load (s32), addrspace 1)
%v4:vgpr_32 = GLOBAL_LOAD_DWORD %addr, 16, 0, implicit $exec :: (volatile load (s32), addrspace 1)
%v5:vgpr_32 = GLOBAL_LOAD_DWORD %addr, 20, 0, implicit $exec :: (volatile load (s32), addrspace 1)
GLOBAL_STORE_DWORD %addr, %v0, 40, 0, implicit $exec :: (volatile store (s32), addrspace 1)
GLOBAL_STORE_DWORD %addr, %v1, 44, 0, implicit $exec :: (volatile store (s32), addrspace 1)
GLOBAL_STORE_DWORD %addr, %v2, 48, 0, implicit $exec :: (volatile store (s32), addrspace 1)
GLOBAL_STORE_DWORD %addr, %v3, 52, 0, implicit $exec :: (volatile store (s32), addrspace 1)
GLOBAL_STORE_DWORD %addr, %v4, 56, 0, implicit $exec :: (volatile store (s32), addrspace 1)
GLOBAL_STORE_DWORD %addr, %v5, 60, 0, implicit $exec :: (volatile store (s32), addrspace 1)
S_ENDPGM 0
...