; Test generation of _dvgpr$ symbol for an amdgpu_cs_chain function with dynamic vgprs. ; RUN: llc -mtriple=amdgcn-amd-amdpal -mcpu=gfx1200 < %s | FileCheck -check-prefixes=DVGPR %s ; Function with 0 VGPRs, which counts as 1 block. ; ; DVGPR-LABEL: func0: ; DVGPR: .set _dvgpr$func0, func0+0 ; define amdgpu_cs_chain void @func0() #0 { ret void } ; Function with 21 VGPRs, which is 2 blocks. ; ; DVGPR-LABEL: func21: ; DVGPR: .set func21.num_vgpr, 21 ; DVGPR: .set _dvgpr$func21, func21+8 ; define amdgpu_cs_chain void @func21(<13 x float> %arg) #0 { tail call void @func21(<13 x float> %arg) ret void } ; Anonymous function with 87 VGPRs, which is 6 blocks. ; ; DVGPR: [[FUNC87:__unnamed[^:]*]]: ; DVGPR: .set [[FUNC87]].num_vgpr, 87 ; DVGPR: .set _dvgpr$[[FUNC87]], [[FUNC87]]+40 ; define amdgpu_cs_chain void @0(<79 x float> %arg) #0 { tail call void @0(<79 x float> %arg) ret void } ; Function with 128 VGPRs, which is 8 blocks. ; ; DVGPR-LABEL: func128: ; DVGPR: .set func128.num_vgpr, 128 ; DVGPR: .set _dvgpr$func128, func128+56 ; define amdgpu_cs_chain void @func128(<120 x float> %arg) #0 { tail call void @func128(<120 x float> %arg) ret void } ; Function with 79 VGPRs, which is 3 blocks with a block size of 32. ; ; DVGPR-LABEL: func79: ; DVGPR: .set func79.num_vgpr, 79 ; DVGPR: .set _dvgpr$func79, func79+16 ; define amdgpu_cs_chain void @func79(<71 x float> %arg) #1 { tail call void @func79(<71 x float> %arg) ret void } ; Function with 225 VGPRs, which is 8 blocks with a block size of 32. ; ; DVGPR-LABEL: func225: ; DVGPR: .set func225.num_vgpr, 225 ; DVGPR: .set _dvgpr$func225, func225+56 ; define amdgpu_cs_chain void @func225(<217 x float> %arg) #1 { tail call void @func225(<217 x float> %arg) ret void } attributes #0 = { "amdgpu-dynamic-vgpr-block-size"="16" } attributes #1 = { "amdgpu-dynamic-vgpr-block-size"="32" }