brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.8 KiB · 67f2eb1 Raw
587 lines · plain
1; RUN: opt -passes=amdgpu-attributor -mcpu=kaveri < %s | llc -enable-ipra=0 | FileCheck -enable-var-scope -check-prefixes=GCN,CIVI %s2; RUN: opt -passes=amdgpu-attributor -mcpu=gfx900 < %s | llc -enable-ipra=0 | FileCheck -enable-var-scope -check-prefixes=GCN,GFX9 %s3 4target triple = "amdgcn-amd-amdhsa"5 6; GCN-LABEL: {{^}}use_dispatch_ptr:7; GCN: s_load_dword s{{[0-9]+}}, s[4:5]8define hidden void @use_dispatch_ptr() #1 {9  %dispatch_ptr = call noalias ptr addrspace(4) @llvm.amdgcn.dispatch.ptr() #010  %value = load volatile i32, ptr addrspace(4) %dispatch_ptr11  ret void12}13 14; GCN-LABEL: {{^}}kern_indirect_use_dispatch_ptr:15; GCN-NOT: s[4:5]16; GCN-NOT: s417; GCN-NOT: s518; GCN: .amdhsa_user_sgpr_dispatch_ptr 119define amdgpu_kernel void @kern_indirect_use_dispatch_ptr(i32) #1 {20  call void @use_dispatch_ptr()21  ret void22}23 24; GCN-LABEL: {{^}}use_queue_ptr:25; GCN: s_load_dword s{{[0-9]+}}, s[6:7]26define hidden void @use_queue_ptr() #1 {27  %queue_ptr = call noalias ptr addrspace(4) @llvm.amdgcn.queue.ptr() #028  %value = load volatile i32, ptr addrspace(4) %queue_ptr29  ret void30}31 32; GCN-LABEL: {{^}}kern_indirect_use_queue_ptr:33; GCN: s_swappc_b64 s[30:31], s[10:11]34; GCN: .amdhsa_user_sgpr_queue_ptr 135define amdgpu_kernel void @kern_indirect_use_queue_ptr(i32) #1 {36  call void @use_queue_ptr()37  ret void38}39 40; GCN-LABEL: {{^}}use_queue_ptr_addrspacecast:41; CIVI: s_load_dword [[APERTURE_LOAD:s[0-9]+]], s[4:5], 0x042; CIVI: v_mov_b32_e32 v[[LO:[0-9]+]], 1643; CIVI-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], [[APERTURE_LOAD]]44 45; GFX9: s_mov_b64 s[{{[0-9]+}}:[[HI:[0-9]+]]], src_shared_base46; GFX9-DAG: v_mov_b32_e32 v[[VGPR_HI:[0-9]+]], s[[HI]]47; GFX9: {{flat|global}}_store_dword v{{\[[0-9]+}}:[[VGPR_HI]]]48 49; CIVI: {{flat|global}}_store_dword v[[[LO]]:[[HI]]]50define hidden void @use_queue_ptr_addrspacecast() #1 {51  %asc = addrspacecast ptr addrspace(3) inttoptr (i32 16 to ptr addrspace(3)) to ptr52  store volatile i32 0, ptr %asc53  ret void54}55 56; GCN-LABEL: {{^}}kern_indirect_use_queue_ptr_addrspacecast:57; CIVI: s_swappc_b64 s[30:31], s[4:5]58; CIVI: .amdhsa_user_sgpr_queue_ptr 059 60; GFX9-NOT: s_mov_b64 s[6:7]61; GFX9: .amdhsa_user_sgpr_queue_ptr 062define amdgpu_kernel void @kern_indirect_use_queue_ptr_addrspacecast(i32) #1 {63  call void @use_queue_ptr_addrspacecast()64  ret void65}66 67; Not really supported in callable functions.68; GCN-LABEL: {{^}}use_kernarg_segment_ptr:69; GCN: s_mov_b64 [[PTR:s\[[0-9]+:[0-9]+\]]], 070; GCN: s_load_dword s{{[0-9]+}}, [[PTR]], 0x071define hidden void @use_kernarg_segment_ptr() #1 {72  %kernarg_segment_ptr = call noalias ptr addrspace(4) @llvm.amdgcn.kernarg.segment.ptr() #073  %value = load volatile i32, ptr addrspace(4) %kernarg_segment_ptr74  ret void75}76 77; GCN-LABEL: {{^}}use_implicitarg_ptr:78; GCN: s_load_dword s{{[0-9]+}}, s[8:9]79define hidden void @use_implicitarg_ptr() #1 {80  %implicit.arg.ptr = call noalias ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr() #081  %value = load volatile i32, ptr addrspace(4) %implicit.arg.ptr82  ret void83}84 85; GCN-LABEL: {{^}}kern_indirect_use_kernarg_segment_ptr:86; GCN: .amdhsa_user_sgpr_kernarg_segment_ptr 187define amdgpu_kernel void @kern_indirect_use_kernarg_segment_ptr(i32) #1 {88  call void @use_kernarg_segment_ptr()89  ret void90}91 92; GCN-LABEL: {{^}}use_dispatch_id:93; GCN: ; use s[10:11]94define hidden void @use_dispatch_id() #1 {95  %id = call i64 @llvm.amdgcn.dispatch.id()96  call void asm sideeffect "; use $0", "s"(i64 %id)97  ret void98}99 100; No kernarg segment so that there is a mov to check. With kernarg101; pointer enabled, it happens to end up in the right place anyway.102 103; GCN-LABEL: {{^}}kern_indirect_use_dispatch_id:104; GCN: s_mov_b64 s[10:11], s[4:5]105; GCN: .amdhsa_user_sgpr_dispatch_id 1106define amdgpu_kernel void @kern_indirect_use_dispatch_id() #1 {107  call void @use_dispatch_id()108  ret void109}110 111; GCN-LABEL: {{^}}use_workgroup_id_x:112; GCN: s_waitcnt113; GCN: ; use s12114define hidden void @use_workgroup_id_x() #1 {115  %val = call i32 @llvm.amdgcn.workgroup.id.x()116  call void asm sideeffect "; use $0", "s"(i32 %val)117  ret void118}119 120; GCN-LABEL: {{^}}use_stack_workgroup_id_x:121; GCN: s_waitcnt122; GCN-NOT: s32123; GCN: buffer_store_dword v0, off, s[0:3], s32{{$}}124; GCN: ; use s12125; GCN: s_setpc_b64126define hidden void @use_stack_workgroup_id_x() #1 {127  %alloca = alloca i32, addrspace(5)128  store volatile i32 0, ptr addrspace(5) %alloca129  %val = call i32 @llvm.amdgcn.workgroup.id.x()130  call void asm sideeffect "; use $0", "s"(i32 %val)131  ret void132}133 134; GCN-LABEL: {{^}}use_workgroup_id_y:135; GCN: s_waitcnt136; GCN: ; use s13137define hidden void @use_workgroup_id_y() #1 {138  %val = call i32 @llvm.amdgcn.workgroup.id.y()139  call void asm sideeffect "; use $0", "s"(i32 %val)140  ret void141}142 143; GCN-LABEL: {{^}}use_workgroup_id_z:144; GCN: s_waitcnt145; GCN: ; use s14146define hidden void @use_workgroup_id_z() #1 {147  %val = call i32 @llvm.amdgcn.workgroup.id.z()148  call void asm sideeffect "; use $0", "s"(i32 %val)149  ret void150}151 152; GCN-LABEL: {{^}}use_workgroup_id_xy:153; GCN: ; use s12154; GCN: ; use s13155define hidden void @use_workgroup_id_xy() #1 {156  %val0 = call i32 @llvm.amdgcn.workgroup.id.x()157  %val1 = call i32 @llvm.amdgcn.workgroup.id.y()158  call void asm sideeffect "; use $0", "s"(i32 %val0)159  call void asm sideeffect "; use $0", "s"(i32 %val1)160  ret void161}162 163; GCN-LABEL: {{^}}use_workgroup_id_xyz:164; GCN: ; use s12165; GCN: ; use s13166; GCN: ; use s14167define hidden void @use_workgroup_id_xyz() #1 {168  %val0 = call i32 @llvm.amdgcn.workgroup.id.x()169  %val1 = call i32 @llvm.amdgcn.workgroup.id.y()170  %val2 = call i32 @llvm.amdgcn.workgroup.id.z()171  call void asm sideeffect "; use $0", "s"(i32 %val0)172  call void asm sideeffect "; use $0", "s"(i32 %val1)173  call void asm sideeffect "; use $0", "s"(i32 %val2)174  ret void175}176 177; GCN-LABEL: {{^}}use_workgroup_id_xz:178; GCN: ; use s12179; GCN: ; use s14180define hidden void @use_workgroup_id_xz() #1 {181  %val0 = call i32 @llvm.amdgcn.workgroup.id.x()182  %val1 = call i32 @llvm.amdgcn.workgroup.id.z()183  call void asm sideeffect "; use $0", "s"(i32 %val0)184  call void asm sideeffect "; use $0", "s"(i32 %val1)185  ret void186}187 188; GCN-LABEL: {{^}}use_workgroup_id_yz:189; GCN: ; use s13190; GCN: ; use s14191define hidden void @use_workgroup_id_yz() #1 {192  %val0 = call i32 @llvm.amdgcn.workgroup.id.y()193  %val1 = call i32 @llvm.amdgcn.workgroup.id.z()194  call void asm sideeffect "; use $0", "s"(i32 %val0)195  call void asm sideeffect "; use $0", "s"(i32 %val1)196  ret void197}198 199; GCN-LABEL: {{^}}kern_indirect_use_workgroup_id_x:200; GCN-NOT: s6201; GCN: s_getpc_b64 s[6:7]202; GCN-NEXT: s_add_u32 s6, s6, use_workgroup_id_x@rel32@lo+4203; GCN-NEXT: s_addc_u32 s7, s7, use_workgroup_id_x@rel32@hi+12204; GCN-NOT: s6205; GCN: s_mov_b32 s12, s4206; GCN: s_mov_b32 s32, 0207; GCN: s_swappc_b64208; GCN-NEXT: s_endpgm209 210; GCN: .amdhsa_system_sgpr_workgroup_id_x 1211; GCN: .amdhsa_system_sgpr_workgroup_id_y 0212; GCN: .amdhsa_system_sgpr_workgroup_id_z 0213define amdgpu_kernel void @kern_indirect_use_workgroup_id_x() #1 {214  call void @use_workgroup_id_x()215  ret void216}217 218; GCN-LABEL: {{^}}kern_indirect_use_workgroup_id_y:219; GCN-NOT: s12220; GCN: s_mov_b32 s13, s5221; GCN-NOT: s12222; GCN: s_mov_b32 s32, 0223; GCN: s_swappc_b64224 225; GCN: .amdhsa_system_sgpr_workgroup_id_x 1226; GCN: .amdhsa_system_sgpr_workgroup_id_y 1227; GCN: .amdhsa_system_sgpr_workgroup_id_z 0228define amdgpu_kernel void @kern_indirect_use_workgroup_id_y() #1 {229  call void @use_workgroup_id_y()230  ret void231}232 233; GCN-LABEL: {{^}}kern_indirect_use_workgroup_id_z:234; GCN-NOT: s12235; GCN-NOT: s13236; GCN: s_mov_b32 s14, s5237; GCN-NOT: s12238; GCN-NOT: s13239 240; GCN: s_mov_b32 s32, 0241; GCN: s_swappc_b64242 243; GCN: .amdhsa_system_sgpr_workgroup_id_x 1244; GCN: .amdhsa_system_sgpr_workgroup_id_y 0245; GCN: .amdhsa_system_sgpr_workgroup_id_z 1246define amdgpu_kernel void @kern_indirect_use_workgroup_id_z() #1 {247  call void @use_workgroup_id_z()248  ret void249}250 251; GCN-LABEL: {{^}}kern_indirect_use_workgroup_id_xy:252; GCN-NOT: s14253; GCN: s_mov_b32 s12, s4254; GCN-NEXT: s_mov_b32 s13, s5255; GCN-NOT: s14256 257; GCN: s_mov_b32 s32, 0258; GCN: s_swappc_b64259 260; GCN: .amdhsa_system_sgpr_workgroup_id_x 1261; GCN: .amdhsa_system_sgpr_workgroup_id_y 1262; GCN: .amdhsa_system_sgpr_workgroup_id_z 0263define amdgpu_kernel void @kern_indirect_use_workgroup_id_xy() #1 {264  call void @use_workgroup_id_xy()265  ret void266}267 268; GCN-LABEL: {{^}}kern_indirect_use_workgroup_id_xyz:269; GCN: s_mov_b32 s12, s4270; GCN: s_mov_b32 s13, s5271; GCN: s_mov_b32 s14, s6272; GCN: s_mov_b32 s32, 0273; GCN: s_swappc_b64274 275; GCN: .amdhsa_system_sgpr_workgroup_id_x 1276; GCN: .amdhsa_system_sgpr_workgroup_id_y 1277; GCN: .amdhsa_system_sgpr_workgroup_id_z 1278define amdgpu_kernel void @kern_indirect_use_workgroup_id_xyz() #1 {279  call void @use_workgroup_id_xyz()280  ret void281}282 283; GCN-LABEL: {{^}}kern_indirect_use_workgroup_id_xz:284 285; GCN-NOT: s13286; GCN: s_mov_b32 s12, s4287; GCN-NEXT: s_mov_b32 s14, s5288; GCN-NOT: s13289 290; GCN: s_mov_b32 s32, 0291; GCN: s_swappc_b64292 293; GCN: .amdhsa_system_sgpr_workgroup_id_x 1294; GCN: .amdhsa_system_sgpr_workgroup_id_y 0295; GCN: .amdhsa_system_sgpr_workgroup_id_z 1296define amdgpu_kernel void @kern_indirect_use_workgroup_id_xz() #1 {297  call void @use_workgroup_id_xz()298  ret void299}300 301; GCN-LABEL: {{^}}kern_indirect_use_workgroup_id_yz:302 303; GCN: s_mov_b32 s13, s5304; GCN: s_mov_b32 s14, s6305 306; GCN: s_mov_b32 s32, 0307; GCN: s_swappc_b64308 309; GCN: .amdhsa_system_sgpr_workgroup_id_x 1310; GCN: .amdhsa_system_sgpr_workgroup_id_y 1311; GCN: .amdhsa_system_sgpr_workgroup_id_z 1312define amdgpu_kernel void @kern_indirect_use_workgroup_id_yz() #1 {313  call void @use_workgroup_id_yz()314  ret void315}316 317; Argument is in right place already318; GCN-LABEL: {{^}}func_indirect_use_workgroup_id_x:319; GCN-NOT: s12320; GCN-NOT: s13321; GCN-NOT: s14322; GCN: v_readlane_b32 s30, v40, 0323define hidden void @func_indirect_use_workgroup_id_x() #1 {324  call void @use_workgroup_id_x()325  ret void326}327 328; Argument is in right place already. We are free to clobber other329; SGPR arguments330; GCN-LABEL: {{^}}func_indirect_use_workgroup_id_y:331; GCN-NOT: s12332; GCN-NOT: s13333; GCN-NOT: s14334define hidden void @func_indirect_use_workgroup_id_y() #1 {335  call void @use_workgroup_id_y()336  ret void337}338 339; GCN-LABEL: {{^}}func_indirect_use_workgroup_id_z:340; GCN-NOT: s12341; GCN-NOT: s13342; GCN-NOT: s14343define hidden void @func_indirect_use_workgroup_id_z() #1 {344  call void @use_workgroup_id_z()345  ret void346}347 348; GCN-LABEL: {{^}}other_arg_use_workgroup_id_x:349; CIVI: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, v0350; GFX9: global_store_dword v{{\[[0-9]+:[0-9]+\]}}, v0, off351; GCN: ; use s12352define hidden void @other_arg_use_workgroup_id_x(i32 %arg0) #1 {353  %val = call i32 @llvm.amdgcn.workgroup.id.x()354  store volatile i32 %arg0, ptr addrspace(1) poison355  call void asm sideeffect "; use $0", "s"(i32 %val)356  ret void357}358 359; GCN-LABEL: {{^}}other_arg_use_workgroup_id_y:360; CIVI: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, v0361; GFX9: global_store_dword v{{\[[0-9]+:[0-9]+\]}}, v0, off362; GCN: ; use s13363define hidden void @other_arg_use_workgroup_id_y(i32 %arg0) #1 {364  %val = call i32 @llvm.amdgcn.workgroup.id.y()365  store volatile i32 %arg0, ptr addrspace(1) poison366  call void asm sideeffect "; use $0", "s"(i32 %val)367  ret void368}369 370; GCN-LABEL: {{^}}other_arg_use_workgroup_id_z:371; CIVI: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, v0372; GFX9: global_store_dword v{{\[[0-9]+:[0-9]+\]}}, v0, off373; GCN: ; use s14374define hidden void @other_arg_use_workgroup_id_z(i32 %arg0) #1 {375  %val = call i32 @llvm.amdgcn.workgroup.id.z()376  store volatile i32 %arg0, ptr addrspace(1) poison377  call void asm sideeffect "; use $0", "s"(i32 %val)378  ret void379}380 381; GCN-LABEL: {{^}}kern_indirect_other_arg_use_workgroup_id_x:382 383; GCN-NOT: s13384; GCN-NOT: s14385; GCN-DAG: s_mov_b32 s12, s4386; GCN-DAG: v_mov_b32_e32 v0, 0x22b387; GCN-NOT: s13388; GCN-NOT: s14389 390; GCN-DAG: s_mov_b32 s32, 0391; GCN: s_swappc_b64392 393; GCN: .amdhsa_system_sgpr_workgroup_id_x 1394; GCN: .amdhsa_system_sgpr_workgroup_id_y 0395; GCN: .amdhsa_system_sgpr_workgroup_id_z 0396define amdgpu_kernel void @kern_indirect_other_arg_use_workgroup_id_x() #1 {397  call void @other_arg_use_workgroup_id_x(i32 555)398  ret void399}400 401; GCN-LABEL: {{^}}kern_indirect_other_arg_use_workgroup_id_y:402; GCN-DAG: v_mov_b32_e32 v0, 0x22b403; GCN-DAG: s_mov_b32 s13, s5404 405; GCN-DAG: s_mov_b32 s32, 0406; GCN: s_swappc_b64407 408; GCN: .amdhsa_system_sgpr_workgroup_id_x 1409; GCN: .amdhsa_system_sgpr_workgroup_id_y 1410; GCN: .amdhsa_system_sgpr_workgroup_id_z 0411define amdgpu_kernel void @kern_indirect_other_arg_use_workgroup_id_y() #1 {412  call void @other_arg_use_workgroup_id_y(i32 555)413  ret void414}415 416; GCN-LABEL: {{^}}kern_indirect_other_arg_use_workgroup_id_z:417; GCN-DAG: v_mov_b32_e32 v0, 0x22b418; GCN-DAG: s_mov_b32 s14, s5419 420; GCN: s_mov_b32 s32, 0421; GCN: s_swappc_b64422 423; GCN: .amdhsa_system_sgpr_workgroup_id_x 1424; GCN: .amdhsa_system_sgpr_workgroup_id_y 0425; GCN: .amdhsa_system_sgpr_workgroup_id_z 1426define amdgpu_kernel void @kern_indirect_other_arg_use_workgroup_id_z() #1 {427  call void @other_arg_use_workgroup_id_z(i32 555)428  ret void429}430 431; GCN-LABEL: {{^}}use_every_sgpr_input:432; GCN: buffer_store_dword v{{[0-9]+}}, off, s[0:3], s32{{$}}433; GCN: s_load_dword s{{[0-9]+}}, s[4:5]434; GCN: s_load_dword s{{[0-9]+}}, s[6:7]435; GCN: s_load_dword s{{[0-9]+}}, s[8:9]436; GCN: ; use s[10:11]437; GCN: ; use s12438; GCN: ; use s13439; GCN: ; use s14440define hidden void @use_every_sgpr_input() #1 {441  %alloca = alloca i32, align 4, addrspace(5)442  store volatile i32 0, ptr addrspace(5) %alloca443 444  %dispatch_ptr = call noalias ptr addrspace(4) @llvm.amdgcn.dispatch.ptr() #0445  %val0 = load volatile i32, ptr addrspace(4) %dispatch_ptr446 447  %queue_ptr = call noalias ptr addrspace(4) @llvm.amdgcn.queue.ptr() #0448  %val1 = load volatile i32, ptr addrspace(4) %queue_ptr449 450  %implicitarg.ptr = call noalias ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr() #0451  %val2 = load volatile i32, ptr addrspace(4) %implicitarg.ptr452 453  %val3 = call i64 @llvm.amdgcn.dispatch.id()454  call void asm sideeffect "; use $0", "s"(i64 %val3)455 456  %val4 = call i32 @llvm.amdgcn.workgroup.id.x()457  call void asm sideeffect "; use $0", "s"(i32 %val4)458 459  %val5 = call i32 @llvm.amdgcn.workgroup.id.y()460  call void asm sideeffect "; use $0", "s"(i32 %val5)461 462  %val6 = call i32 @llvm.amdgcn.workgroup.id.z()463  call void asm sideeffect "; use $0", "s"(i32 %val6)464 465  ret void466}467 468; GCN-LABEL: {{^}}kern_indirect_use_every_sgpr_input:469; GCN: s_mov_b32 s32, 0470; GCN: s_swappc_b64471 472; GCN: .amdhsa_user_sgpr_private_segment_buffer 1473; GCN: .amdhsa_user_sgpr_dispatch_ptr 1474; GCN: .amdhsa_user_sgpr_queue_ptr 1475; GCN: .amdhsa_user_sgpr_kernarg_segment_ptr 1476; GCN: .amdhsa_user_sgpr_dispatch_id 1477; GCN: .amdhsa_user_sgpr_flat_scratch_init 0478; GCN: .amdhsa_user_sgpr_private_segment_size 0479; GCN: .amdhsa_system_sgpr_private_segment_wavefront_offset 1480; GCN: .amdhsa_system_sgpr_workgroup_id_x 1481; GCN: .amdhsa_system_sgpr_workgroup_id_y 1482; GCN: .amdhsa_system_sgpr_workgroup_id_z 1483; GCN: .amdhsa_system_sgpr_workgroup_info 0484; GCN: .amdhsa_system_vgpr_workitem_id 0485define amdgpu_kernel void @kern_indirect_use_every_sgpr_input(i8) #1 {486  call void @use_every_sgpr_input()487  ret void488}489 490; We have to pass the kernarg segment, but there are no kernel491; arguments so null is passed.492; GCN-LABEL: {{^}}kern_indirect_use_every_sgpr_input_no_kernargs:493; GCN: s_mov_b64 s[10:11], s[8:9]494; GCN: s_mov_b32 s32, 0495; GCN: s_swappc_b64496 497; GCN: .amdhsa_user_sgpr_private_segment_buffer 1498; GCN: .amdhsa_user_sgpr_dispatch_ptr 1499; GCN: .amdhsa_user_sgpr_queue_ptr 1500; GCN: .amdhsa_user_sgpr_kernarg_segment_ptr 0501; GCN: .amdhsa_user_sgpr_dispatch_id 1502; GCN: .amdhsa_user_sgpr_flat_scratch_init 0503; GCN: .amdhsa_user_sgpr_private_segment_size 0504; GCN: .amdhsa_system_sgpr_private_segment_wavefront_offset 1505; GCN: .amdhsa_system_sgpr_workgroup_id_x 1506; GCN: .amdhsa_system_sgpr_workgroup_id_y 1507; GCN: .amdhsa_system_sgpr_workgroup_id_z 1508; GCN: .amdhsa_system_sgpr_workgroup_info 0509; GCN: .amdhsa_system_vgpr_workitem_id 0510define amdgpu_kernel void @kern_indirect_use_every_sgpr_input_no_kernargs() #2 {511  call void @use_every_sgpr_input()512  ret void513}514 515; GCN-LABEL: {{^}}func_indirect_use_every_sgpr_input:516; GCN-NOT: s6517; GCN-NOT: s7518; GCN-NOT: s8519; GCN-NOT: s9520; GCN-NOT: s10521; GCN-NOT: s11522; GCN-NOT: s12523; GCN-NOT: s13524; GCN-NOT: s[6:7]525; GCN-NOT: s[8:9]526; GCN-NOT: s[10:11]527; GCN-NOT: s[12:13]528; GCN-NOT: s14529; GCN: s_or_saveexec_b64 s[16:17], -1530define hidden void @func_indirect_use_every_sgpr_input() #1 {531  call void @use_every_sgpr_input()532  ret void533}534 535; GCN-LABEL: {{^}}func_use_every_sgpr_input_call_use_workgroup_id_xyz:536; GCN-NOT: s12537; GCN-NOT: s13538; GCN-NOT: s14539; GCN: ; use s[10:11]540; GCN: ; use s12541; GCN: ; use s13542; GCN: ; use s14543 544; GCN: s_swappc_b64545define hidden void @func_use_every_sgpr_input_call_use_workgroup_id_xyz() #1 {546  %alloca = alloca i32, align 4, addrspace(5)547  store volatile i32 0, ptr addrspace(5) %alloca548 549  %dispatch_ptr = call noalias ptr addrspace(4) @llvm.amdgcn.dispatch.ptr() #0550  %val0 = load volatile i32, ptr addrspace(4) %dispatch_ptr551 552  %queue_ptr = call noalias ptr addrspace(4) @llvm.amdgcn.queue.ptr() #0553  %val1 = load volatile i32, ptr addrspace(4) %queue_ptr554 555  %kernarg_segment_ptr = call noalias ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr() #0556  %val2 = load volatile i32, ptr addrspace(4) %kernarg_segment_ptr557 558  %val3 = call i64 @llvm.amdgcn.dispatch.id()559  call void asm sideeffect "; use $0", "s"(i64 %val3)560 561  %val4 = call i32 @llvm.amdgcn.workgroup.id.x()562  call void asm sideeffect "; use $0", "s"(i32 %val4)563 564  %val5 = call i32 @llvm.amdgcn.workgroup.id.y()565  call void asm sideeffect "; use $0", "s"(i32 %val5)566 567  %val6 = call i32 @llvm.amdgcn.workgroup.id.z()568  call void asm sideeffect "; use $0", "s"(i32 %val6)569 570  call void @use_workgroup_id_xyz()571  ret void572}573 574declare i32 @llvm.amdgcn.workgroup.id.x() #0575declare i32 @llvm.amdgcn.workgroup.id.y() #0576declare i32 @llvm.amdgcn.workgroup.id.z() #0577declare noalias ptr addrspace(4) @llvm.amdgcn.queue.ptr() #0578declare noalias ptr addrspace(4) @llvm.amdgcn.kernarg.segment.ptr() #0579declare noalias ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr() #0580declare i64 @llvm.amdgcn.dispatch.id() #0581declare noalias ptr addrspace(4) @llvm.amdgcn.dispatch.ptr() #0582 583attributes #0 = { nounwind readnone speculatable }584attributes #1 = { nounwind noinline }585attributes #2 = { nounwind noinline "amdgpu-implicitarg-num-bytes"="0" }586 587