brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.2 KiB · 2b20f9d Raw
225 lines · plain
1; RUN: llc -mtriple=amdgcn -mcpu=gfx908 < %s | FileCheck -check-prefixes=GCN,GFX908 %s2; RUN: llc -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX900 %s3 4; GCN-LABEL: {{^}}max_11_vgprs:5; GFX900-NOT: SCRATCH_RSRC6; GFX908-NOT: SCRATCH_RSRC7; GFX908-DAG: v_accvgpr_write_b32 [[A_REG:a[0-9]+]], v{{[0-9]}}8; GFX900-NOT: buffer_9; GFX908-NOT: buffer_10; GFX908-DAG: v_mov_b32_e32 v{{[0-9]}}, [[V_REG:v[0-9]+]]11; GFX908-DAG: v_accvgpr_read_b32 [[V_REG]], [[A_REG]]12 13; GFX900: NumVgprs: 1114; GFX908: NumVgprs: 1015; GFX900: ScratchSize: 016; GFX908: ScratchSize: 017; GCN:    VGPRBlocks: 218; GFX900: NumVGPRsForWavesPerEU: 1119; GFX908: NumVGPRsForWavesPerEU: 1020define amdgpu_kernel void @max_11_vgprs(ptr addrspace(1) %p) #2 {21  %tid = load volatile i32, ptr addrspace(1) poison22  %p1 = getelementptr inbounds i32, ptr addrspace(1) %p, i32 %tid23  %p2 = getelementptr inbounds i32, ptr addrspace(1) %p1, i32 424  %p3 = getelementptr inbounds i32, ptr addrspace(1) %p2, i32 825  %p4 = getelementptr inbounds i32, ptr addrspace(1) %p3, i32 1226  %p5 = getelementptr inbounds i32, ptr addrspace(1) %p4, i32 1627  %p6 = getelementptr inbounds i32, ptr addrspace(1) %p5, i32 2028  %p7 = getelementptr inbounds i32, ptr addrspace(1) %p6, i32 2429  %p8 = getelementptr inbounds i32, ptr addrspace(1) %p7, i32 2830  %p9 = getelementptr inbounds i32, ptr addrspace(1) %p8, i32 3231  %p10 = getelementptr inbounds i32, ptr addrspace(1) %p9, i32 3632  %v1 = load volatile i32, ptr addrspace(1) %p133  %v2 = load volatile i32, ptr addrspace(1) %p234  %v3 = load volatile i32, ptr addrspace(1) %p335  %v4 = load volatile i32, ptr addrspace(1) %p436  %v5 = load volatile i32, ptr addrspace(1) %p537  %v6 = load volatile i32, ptr addrspace(1) %p638  %v7 = load volatile i32, ptr addrspace(1) %p739  %v8 = load volatile i32, ptr addrspace(1) %p840  %v9 = load volatile i32, ptr addrspace(1) %p941  %v10 = load volatile i32, ptr addrspace(1) %p1042  call void asm sideeffect "", "v,v,v,v,v,v,v,v,v,v"(i32 %v1, i32 %v2, i32 %v3, i32 %v4, i32 %v5, i32 %v6, i32 %v7, i32 %v8, i32 %v9, i32 %v10)43  store volatile i32 %v1, ptr addrspace(1) poison44  store volatile i32 %v2, ptr addrspace(1) poison45  store volatile i32 %v3, ptr addrspace(1) poison46  store volatile i32 %v4, ptr addrspace(1) poison47  store volatile i32 %v5, ptr addrspace(1) poison48  store volatile i32 %v6, ptr addrspace(1) poison49  store volatile i32 %v7, ptr addrspace(1) poison50  store volatile i32 %v8, ptr addrspace(1) poison51  store volatile i32 %v9, ptr addrspace(1) poison52  store volatile i32 %v10, ptr addrspace(1) poison53  ret void54}55 56; GCN-LABEL: {{^}}max_10_vgprs_spill_v32:57; GCN-DAG:    s_mov_b32 s{{[0-9]+}}, SCRATCH_RSRC_DWORD058; GCN-DAG:    s_mov_b32 s{{[0-9]+}}, SCRATCH_RSRC_DWORD159; GCN:        buffer_store_dword v{{[0-9]}},60; GFX908-DAG: v_accvgpr_write_b32 a0, v{{[0-9]}}61; GFX908-DAG: v_accvgpr_write_b32 a9, v{{[0-9]}}62; GCN-NOT:    a1063 64; GFX908: NumVgprs: 1065; GFX900: ScratchSize: 10066; GFX908: ScratchSize: 6867; GFX908: VGPRBlocks: 268; GFX908: NumVGPRsForWavesPerEU: 1069define amdgpu_kernel void @max_10_vgprs_spill_v32(ptr addrspace(1) %p) #0 {70  %tid = call i32 @llvm.amdgcn.workitem.id.x()71  %gep = getelementptr inbounds <32 x float>, ptr addrspace(1) %p, i32 %tid72  %v = load volatile <32 x float>, ptr addrspace(1) %gep73  store volatile <32 x float> %v, ptr addrspace(1) poison74  ret void75}76 77; GCN-LABEL: {{^}}max_256_vgprs_spill_9x32:78; GFX900-DAG: s_mov_b32 s{{[0-9]+}}, SCRATCH_RSRC_DWORD079; GFX900-DAG: s_mov_b32 s{{[0-9]+}}, SCRATCH_RSRC_DWORD180; GFX908-NOT: SCRATCH_RSRC81; GFX908-DAG: v_accvgpr_write_b32 a0, v82; GFX900:     buffer_store_dword v83; GFX900:     buffer_load_dword v84; GFX908-NOT: buffer_85; GFX908-DAG: v_accvgpr_read_b3286 87; GFX900: NumVgprs: 25688; GFX900: ScratchSize: 13289; GFX908: NumVgprs: 25290; GFX908: ScratchSize: 091; GFX900:    VGPRBlocks: 6392; GFX908:    VGPRBlocks: 6293; GFX900:    NumVGPRsForWavesPerEU: 25694; GFX908:    NumVGPRsForWavesPerEU: 25295define amdgpu_kernel void @max_256_vgprs_spill_9x32(ptr addrspace(1) %p) #1 {96  %tid = call i32 @llvm.amdgcn.workitem.id.x()97  %p1 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p, i32 %tid98  %p2 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p1, i32 %tid99  %p3 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p2, i32 %tid100  %p4 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p3, i32 %tid101  %p5 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p4, i32 %tid102  %p6 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p5, i32 %tid103  %p7 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p6, i32 %tid104  %p8 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p7, i32 %tid105  %p9 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p8, i32 %tid106  %v1 = load volatile <32 x float>, ptr addrspace(1) %p1107  %v2 = load volatile <32 x float>, ptr addrspace(1) %p2108  %v3 = load volatile <32 x float>, ptr addrspace(1) %p3109  %v4 = load volatile <32 x float>, ptr addrspace(1) %p4110  %v5 = load volatile <32 x float>, ptr addrspace(1) %p5111  %v6 = load volatile <32 x float>, ptr addrspace(1) %p6112  %v7 = load volatile <32 x float>, ptr addrspace(1) %p7113  %v8 = load volatile <32 x float>, ptr addrspace(1) %p8114  %v9 = load volatile <32 x float>, ptr addrspace(1) %p9115  store volatile <32 x float> %v1, ptr addrspace(1) poison116  store volatile <32 x float> %v2, ptr addrspace(1) poison117  store volatile <32 x float> %v3, ptr addrspace(1) poison118  store volatile <32 x float> %v4, ptr addrspace(1) poison119  store volatile <32 x float> %v5, ptr addrspace(1) poison120  store volatile <32 x float> %v6, ptr addrspace(1) poison121  store volatile <32 x float> %v7, ptr addrspace(1) poison122  store volatile <32 x float> %v8, ptr addrspace(1) poison123  store volatile <32 x float> %v9, ptr addrspace(1) poison124  ret void125}126 127; GCN-LABEL: {{^}}max_256_vgprs_spill_9x32_2bb:128; GFX900-DAG: s_mov_b32 s{{[0-9]+}}, SCRATCH_RSRC_DWORD0129; GFX900-DAG: s_mov_b32 s{{[0-9]+}}, SCRATCH_RSRC_DWORD1130; GFX908-NOT: SCRATCH_RSRC131; GFX908: v_accvgpr_write_b32132; GFX908:  global_load_133; GFX900:     buffer_store_dword v134; GFX900:     buffer_load_dword v135; GFX908-NOT: buffer_136; GFX908-DAG: v_accvgpr_read_b32137 138; GFX900: NumVgprs: 256139; GFX908: NumVgprs: 254140; GFX900: ScratchSize: 132141; GFX908: ScratchSize: 0142; GFX900: VGPRBlocks: 63143; GFX908: VGPRBlocks: 63144; GFX900: NumVGPRsForWavesPerEU: 256145; GFX908: NumVGPRsForWavesPerEU: 254146define amdgpu_kernel void @max_256_vgprs_spill_9x32_2bb(ptr addrspace(1) %p) #1 {147  %tid = call i32 @llvm.amdgcn.workitem.id.x()148  %p1 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p, i32 %tid149  %p2 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p1, i32 %tid150  %p3 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p2, i32 %tid151  %p4 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p3, i32 %tid152  %p5 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p4, i32 %tid153  %p6 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p5, i32 %tid154  %p7 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p6, i32 %tid155  %p8 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p7, i32 %tid156  %p9 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p8, i32 %tid157  %v1 = load volatile <32 x float>, ptr addrspace(1) %p1158  %v2 = load volatile <32 x float>, ptr addrspace(1) %p2159  %v3 = load volatile <32 x float>, ptr addrspace(1) %p3160  %v4 = load volatile <32 x float>, ptr addrspace(1) %p4161  %v5 = load volatile <32 x float>, ptr addrspace(1) %p5162  %v6 = load volatile <32 x float>, ptr addrspace(1) %p6163  %v7 = load volatile <32 x float>, ptr addrspace(1) %p7164  %v8 = load volatile <32 x float>, ptr addrspace(1) %p8165  %v9 = load volatile <32 x float>, ptr addrspace(1) %p9166  br label %st167 168st:169  store volatile <32 x float> %v1, ptr addrspace(1) poison170  store volatile <32 x float> %v2, ptr addrspace(1) poison171  store volatile <32 x float> %v3, ptr addrspace(1) poison172  store volatile <32 x float> %v4, ptr addrspace(1) poison173  store volatile <32 x float> %v5, ptr addrspace(1) poison174  store volatile <32 x float> %v6, ptr addrspace(1) poison175  store volatile <32 x float> %v7, ptr addrspace(1) poison176  store volatile <32 x float> %v8, ptr addrspace(1) poison177  store volatile <32 x float> %v9, ptr addrspace(1) poison178  ret void179}180 181; Make sure there's no crash when we have loads from fixed stack182; objects and are processing VGPR spills183 184; GCN-LABEL: {{^}}stack_args_vgpr_spill:185; GFX908: buffer_load_dword v{{[0-9]+}}, off, s[0:3], s32186; GFX908: buffer_load_dword v{{[0-9]+}}, off, s[0:3], s32 offset:4187; GFX908: v_accvgpr_write_b32188define void @stack_args_vgpr_spill(<32 x float> %arg0, <32 x float> %arg1, ptr addrspace(1) %p) #1 {189  %tid = call i32 @llvm.amdgcn.workitem.id.x()190  %p1 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p, i32 %tid191  %p2 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p1, i32 %tid192  %p3 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p2, i32 %tid193  %p4 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p3, i32 %tid194  %p5 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p4, i32 %tid195  %p6 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p5, i32 %tid196  %p7 = getelementptr inbounds <32 x float>, ptr addrspace(1) %p6, i32 %tid197  %v1 = load volatile <32 x float>, ptr addrspace(1) %p1198  %v2 = load volatile <32 x float>, ptr addrspace(1) %p2199  %v3 = load volatile <32 x float>, ptr addrspace(1) %p3200  %v4 = load volatile <32 x float>, ptr addrspace(1) %p4201  %v5 = load volatile <32 x float>, ptr addrspace(1) %p5202  %v6 = load volatile <32 x float>, ptr addrspace(1) %p6203  %v7 = load volatile <32 x float>, ptr addrspace(1) %p7204  br label %st205 206st:207  store volatile <32 x float> %arg0, ptr addrspace(1) poison208  store volatile <32 x float> %arg1, ptr addrspace(1) poison209  store volatile <32 x float> %v1, ptr addrspace(1) poison210  store volatile <32 x float> %v2, ptr addrspace(1) poison211  store volatile <32 x float> %v3, ptr addrspace(1) poison212  store volatile <32 x float> %v4, ptr addrspace(1) poison213  store volatile <32 x float> %v5, ptr addrspace(1) poison214  store volatile <32 x float> %v6, ptr addrspace(1) poison215  store volatile <32 x float> %v7, ptr addrspace(1) poison216  ret void217}218 219 220declare i32 @llvm.amdgcn.workitem.id.x()221 222attributes #0 = { nounwind "amdgpu-num-vgpr"="10" }223attributes #1 = { "amdgpu-flat-work-group-size"="1,256" }224attributes #2 = { nounwind "amdgpu-num-vgpr"="11" }225