421 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx803 < %s | FileCheck -check-prefixes=FIXEDABI,FIXEDABI-SDAG %s3; RUN: llc -global-isel -mtriple=amdgcn-amd-amdhsa -mcpu=gfx803 < %s | FileCheck -check-prefixes=FIXEDABI,FIXEDABI-GISEL %s4 5; Test with gfx803 so that6; addrspacecast/llvm.amdgcn.is.shared/llvm.amdgcn.is.private require7; the queue ptr. Tests with code object v3 and above to test8; llvm.trap/llvm.debugtrap that require the queue ptr.9 10 11declare hidden void @requires_all_inputs()12 13; This function incorrectly is marked with the hints that the callee14; does not require the implicit arguments to the function. Make sure15; we do not crash.16define void @parent_func_missing_inputs() #0 {17; FIXEDABI-LABEL: parent_func_missing_inputs:18; FIXEDABI: ; %bb.0:19; FIXEDABI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)20; FIXEDABI-NEXT: s_mov_b32 s16, s3321; FIXEDABI-NEXT: s_mov_b32 s33, s3222; FIXEDABI-NEXT: s_or_saveexec_b64 s[18:19], -123; FIXEDABI-NEXT: buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill24; FIXEDABI-NEXT: s_mov_b64 exec, s[18:19]25; FIXEDABI-NEXT: v_writelane_b32 v40, s16, 226; FIXEDABI-NEXT: s_addk_i32 s32, 0x40027; FIXEDABI-NEXT: v_writelane_b32 v40, s30, 028; FIXEDABI-NEXT: s_getpc_b64 s[16:17]29; FIXEDABI-NEXT: s_add_u32 s16, s16, requires_all_inputs@rel32@lo+430; FIXEDABI-NEXT: s_addc_u32 s17, s17, requires_all_inputs@rel32@hi+1231; FIXEDABI-NEXT: v_writelane_b32 v40, s31, 132; FIXEDABI-NEXT: s_swappc_b64 s[30:31], s[16:17]33; FIXEDABI-NEXT: v_readlane_b32 s31, v40, 134; FIXEDABI-NEXT: v_readlane_b32 s30, v40, 035; FIXEDABI-NEXT: s_mov_b32 s32, s3336; FIXEDABI-NEXT: v_readlane_b32 s4, v40, 237; FIXEDABI-NEXT: s_or_saveexec_b64 s[6:7], -138; FIXEDABI-NEXT: buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload39; FIXEDABI-NEXT: s_mov_b64 exec, s[6:7]40; FIXEDABI-NEXT: s_mov_b32 s33, s441; FIXEDABI-NEXT: s_waitcnt vmcnt(0)42; FIXEDABI-NEXT: s_setpc_b64 s[30:31]43 call void @requires_all_inputs()44 ret void45}46 47define amdgpu_kernel void @parent_kernel_missing_inputs() #0 {48; FIXEDABI-SDAG-LABEL: parent_kernel_missing_inputs:49; FIXEDABI-SDAG: ; %bb.0:50; FIXEDABI-SDAG-NEXT: s_add_i32 s4, s4, s951; FIXEDABI-SDAG-NEXT: s_lshr_b32 flat_scratch_hi, s4, 852; FIXEDABI-SDAG-NEXT: s_add_u32 s0, s0, s953; FIXEDABI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 10, v154; FIXEDABI-SDAG-NEXT: s_addc_u32 s1, s1, 055; FIXEDABI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 20, v256; FIXEDABI-SDAG-NEXT: v_or_b32_e32 v0, v0, v157; FIXEDABI-SDAG-NEXT: s_mov_b32 flat_scratch_lo, s558; FIXEDABI-SDAG-NEXT: s_mov_b32 s14, s859; FIXEDABI-SDAG-NEXT: s_getpc_b64 s[4:5]60; FIXEDABI-SDAG-NEXT: s_add_u32 s4, s4, requires_all_inputs@rel32@lo+461; FIXEDABI-SDAG-NEXT: s_addc_u32 s5, s5, requires_all_inputs@rel32@hi+1262; FIXEDABI-SDAG-NEXT: v_or_b32_e32 v31, v0, v263; FIXEDABI-SDAG-NEXT: s_mov_b64 s[8:9], 064; FIXEDABI-SDAG-NEXT: s_mov_b32 s12, s665; FIXEDABI-SDAG-NEXT: s_mov_b32 s13, s766; FIXEDABI-SDAG-NEXT: s_mov_b32 s32, 067; FIXEDABI-SDAG-NEXT: s_swappc_b64 s[30:31], s[4:5]68; FIXEDABI-SDAG-NEXT: s_endpgm69;70; FIXEDABI-GISEL-LABEL: parent_kernel_missing_inputs:71; FIXEDABI-GISEL: ; %bb.0:72; FIXEDABI-GISEL-NEXT: s_add_i32 s4, s4, s973; FIXEDABI-GISEL-NEXT: s_lshr_b32 flat_scratch_hi, s4, 874; FIXEDABI-GISEL-NEXT: s_add_u32 s0, s0, s975; FIXEDABI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 10, v176; FIXEDABI-GISEL-NEXT: s_addc_u32 s1, s1, 077; FIXEDABI-GISEL-NEXT: v_or_b32_e32 v0, v0, v178; FIXEDABI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 20, v279; FIXEDABI-GISEL-NEXT: s_mov_b32 flat_scratch_lo, s580; FIXEDABI-GISEL-NEXT: s_mov_b32 s14, s881; FIXEDABI-GISEL-NEXT: v_or_b32_e32 v31, v0, v182; FIXEDABI-GISEL-NEXT: s_getpc_b64 s[4:5]83; FIXEDABI-GISEL-NEXT: s_add_u32 s4, s4, requires_all_inputs@rel32@lo+484; FIXEDABI-GISEL-NEXT: s_addc_u32 s5, s5, requires_all_inputs@rel32@hi+1285; FIXEDABI-GISEL-NEXT: s_mov_b64 s[8:9], 086; FIXEDABI-GISEL-NEXT: s_mov_b32 s12, s687; FIXEDABI-GISEL-NEXT: s_mov_b32 s13, s788; FIXEDABI-GISEL-NEXT: s_mov_b32 s32, 089; FIXEDABI-GISEL-NEXT: s_swappc_b64 s[30:31], s[4:5]90; FIXEDABI-GISEL-NEXT: s_endpgm91 call void @requires_all_inputs()92 ret void93}94 95; Function is marked with amdgpu-no-workitem-id-* but uses them anyway96define void @marked_func_use_workitem_id(ptr addrspace(1) %ptr) #0 {97; FIXEDABI-SDAG-LABEL: marked_func_use_workitem_id:98; FIXEDABI-SDAG: ; %bb.0:99; FIXEDABI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)100; FIXEDABI-SDAG-NEXT: v_and_b32_e32 v2, 0x3ff, v31101; FIXEDABI-SDAG-NEXT: flat_store_dword v[0:1], v2102; FIXEDABI-SDAG-NEXT: s_waitcnt vmcnt(0)103; FIXEDABI-SDAG-NEXT: v_bfe_u32 v2, v31, 10, 10104; FIXEDABI-SDAG-NEXT: flat_store_dword v[0:1], v2105; FIXEDABI-SDAG-NEXT: s_waitcnt vmcnt(0)106; FIXEDABI-SDAG-NEXT: v_bfe_u32 v2, v31, 20, 10107; FIXEDABI-SDAG-NEXT: flat_store_dword v[0:1], v2108; FIXEDABI-SDAG-NEXT: s_waitcnt vmcnt(0)109; FIXEDABI-SDAG-NEXT: s_setpc_b64 s[30:31]110;111; FIXEDABI-GISEL-LABEL: marked_func_use_workitem_id:112; FIXEDABI-GISEL: ; %bb.0:113; FIXEDABI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)114; FIXEDABI-GISEL-NEXT: v_and_b32_e32 v2, 0x3ff, v31115; FIXEDABI-GISEL-NEXT: v_bfe_u32 v3, v31, 10, 10116; FIXEDABI-GISEL-NEXT: v_bfe_u32 v4, v31, 20, 10117; FIXEDABI-GISEL-NEXT: flat_store_dword v[0:1], v2118; FIXEDABI-GISEL-NEXT: s_waitcnt vmcnt(0)119; FIXEDABI-GISEL-NEXT: flat_store_dword v[0:1], v3120; FIXEDABI-GISEL-NEXT: s_waitcnt vmcnt(0)121; FIXEDABI-GISEL-NEXT: flat_store_dword v[0:1], v4122; FIXEDABI-GISEL-NEXT: s_waitcnt vmcnt(0)123; FIXEDABI-GISEL-NEXT: s_setpc_b64 s[30:31]124 %id.x = call i32 @llvm.amdgcn.workitem.id.x()125 %id.y = call i32 @llvm.amdgcn.workitem.id.y()126 %id.z = call i32 @llvm.amdgcn.workitem.id.z()127 store volatile i32 %id.x, ptr addrspace(1) %ptr128 store volatile i32 %id.y, ptr addrspace(1) %ptr129 store volatile i32 %id.z, ptr addrspace(1) %ptr130 ret void131}132 133; Function is marked with amdgpu-no-workitem-id-* but uses them anyway134define amdgpu_kernel void @marked_kernel_use_workitem_id(ptr addrspace(1) %ptr) #0 {135; FIXEDABI-LABEL: marked_kernel_use_workitem_id:136; FIXEDABI: ; %bb.0:137; FIXEDABI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x0138; FIXEDABI-NEXT: s_add_i32 s6, s6, s11139; FIXEDABI-NEXT: s_mov_b32 flat_scratch_lo, s7140; FIXEDABI-NEXT: s_lshr_b32 flat_scratch_hi, s6, 8141; FIXEDABI-NEXT: s_waitcnt lgkmcnt(0)142; FIXEDABI-NEXT: v_mov_b32_e32 v4, s1143; FIXEDABI-NEXT: v_mov_b32_e32 v3, s0144; FIXEDABI-NEXT: flat_store_dword v[3:4], v0145; FIXEDABI-NEXT: s_waitcnt vmcnt(0)146; FIXEDABI-NEXT: flat_store_dword v[3:4], v1147; FIXEDABI-NEXT: s_waitcnt vmcnt(0)148; FIXEDABI-NEXT: flat_store_dword v[3:4], v2149; FIXEDABI-NEXT: s_waitcnt vmcnt(0)150; FIXEDABI-NEXT: s_endpgm151 %id.x = call i32 @llvm.amdgcn.workitem.id.x()152 %id.y = call i32 @llvm.amdgcn.workitem.id.y()153 %id.z = call i32 @llvm.amdgcn.workitem.id.z()154 store volatile i32 %id.x, ptr addrspace(1) %ptr155 store volatile i32 %id.y, ptr addrspace(1) %ptr156 store volatile i32 %id.z, ptr addrspace(1) %ptr157 ret void158}159 160define void @marked_func_use_workgroup_id(ptr addrspace(1) %ptr) #0 {161; FIXEDABI-LABEL: marked_func_use_workgroup_id:162; FIXEDABI: ; %bb.0:163; FIXEDABI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)164; FIXEDABI-NEXT: v_mov_b32_e32 v2, s12165; FIXEDABI-NEXT: flat_store_dword v[0:1], v2166; FIXEDABI-NEXT: s_waitcnt vmcnt(0)167; FIXEDABI-NEXT: v_mov_b32_e32 v2, s13168; FIXEDABI-NEXT: flat_store_dword v[0:1], v2169; FIXEDABI-NEXT: s_waitcnt vmcnt(0)170; FIXEDABI-NEXT: v_mov_b32_e32 v2, s14171; FIXEDABI-NEXT: flat_store_dword v[0:1], v2172; FIXEDABI-NEXT: s_waitcnt vmcnt(0)173; FIXEDABI-NEXT: s_setpc_b64 s[30:31]174 %id.x = call i32 @llvm.amdgcn.workgroup.id.x()175 %id.y = call i32 @llvm.amdgcn.workgroup.id.y()176 %id.z = call i32 @llvm.amdgcn.workgroup.id.z()177 store volatile i32 %id.x, ptr addrspace(1) %ptr178 store volatile i32 %id.y, ptr addrspace(1) %ptr179 store volatile i32 %id.z, ptr addrspace(1) %ptr180 ret void181}182 183define amdgpu_kernel void @marked_kernel_use_workgroup_id(ptr addrspace(1) %ptr) #0 {184; FIXEDABI-LABEL: marked_kernel_use_workgroup_id:185; FIXEDABI: ; %bb.0:186; FIXEDABI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x0187; FIXEDABI-NEXT: s_add_i32 s6, s6, s11188; FIXEDABI-NEXT: s_mov_b32 flat_scratch_lo, s7189; FIXEDABI-NEXT: s_lshr_b32 flat_scratch_hi, s6, 8190; FIXEDABI-NEXT: v_mov_b32_e32 v2, s8191; FIXEDABI-NEXT: s_waitcnt lgkmcnt(0)192; FIXEDABI-NEXT: v_mov_b32_e32 v0, s0193; FIXEDABI-NEXT: v_mov_b32_e32 v1, s1194; FIXEDABI-NEXT: flat_store_dword v[0:1], v2195; FIXEDABI-NEXT: s_waitcnt vmcnt(0)196; FIXEDABI-NEXT: v_mov_b32_e32 v2, s9197; FIXEDABI-NEXT: flat_store_dword v[0:1], v2198; FIXEDABI-NEXT: s_waitcnt vmcnt(0)199; FIXEDABI-NEXT: v_mov_b32_e32 v2, s10200; FIXEDABI-NEXT: flat_store_dword v[0:1], v2201; FIXEDABI-NEXT: s_waitcnt vmcnt(0)202; FIXEDABI-NEXT: s_endpgm203 %id.x = call i32 @llvm.amdgcn.workgroup.id.x()204 %id.y = call i32 @llvm.amdgcn.workgroup.id.y()205 %id.z = call i32 @llvm.amdgcn.workgroup.id.z()206 store volatile i32 %id.x, ptr addrspace(1) %ptr207 store volatile i32 %id.y, ptr addrspace(1) %ptr208 store volatile i32 %id.z, ptr addrspace(1) %ptr209 ret void210}211 212define void @marked_func_use_other_sgpr(ptr addrspace(1) %ptr) #0 {213; FIXEDABI-LABEL: marked_func_use_other_sgpr:214; FIXEDABI: ; %bb.0:215; FIXEDABI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)216; FIXEDABI-NEXT: v_mov_b32_e32 v2, s6217; FIXEDABI-NEXT: v_mov_b32_e32 v3, s7218; FIXEDABI-NEXT: flat_load_ubyte v2, v[2:3] glc219; FIXEDABI-NEXT: s_waitcnt vmcnt(0)220; FIXEDABI-NEXT: v_mov_b32_e32 v2, s8221; FIXEDABI-NEXT: v_mov_b32_e32 v3, s9222; FIXEDABI-NEXT: flat_load_ubyte v2, v[2:3] glc223; FIXEDABI-NEXT: s_waitcnt vmcnt(0)224; FIXEDABI-NEXT: v_mov_b32_e32 v2, s4225; FIXEDABI-NEXT: v_mov_b32_e32 v3, s5226; FIXEDABI-NEXT: flat_load_ubyte v2, v[2:3] glc227; FIXEDABI-NEXT: s_waitcnt vmcnt(0)228; FIXEDABI-NEXT: v_mov_b32_e32 v2, s10229; FIXEDABI-NEXT: v_mov_b32_e32 v3, s11230; FIXEDABI-NEXT: flat_store_dwordx2 v[0:1], v[2:3]231; FIXEDABI-NEXT: s_waitcnt vmcnt(0)232; FIXEDABI-NEXT: s_setpc_b64 s[30:31]233 %queue.ptr = call ptr addrspace(4) @llvm.amdgcn.queue.ptr()234 %implicitarg.ptr = call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()235 %dispatch.ptr = call ptr addrspace(4) @llvm.amdgcn.dispatch.ptr()236 %dispatch.id = call i64 @llvm.amdgcn.dispatch.id()237 %queue.load = load volatile i8, ptr addrspace(4) %queue.ptr238 %implicitarg.load = load volatile i8, ptr addrspace(4) %implicitarg.ptr239 %dispatch.load = load volatile i8, ptr addrspace(4) %dispatch.ptr240 store volatile i64 %dispatch.id, ptr addrspace(1) %ptr241 ret void242}243 244define amdgpu_kernel void @marked_kernel_use_other_sgpr(ptr addrspace(1) %ptr) #0 {245; FIXEDABI-LABEL: marked_kernel_use_other_sgpr:246; FIXEDABI: ; %bb.0:247; FIXEDABI-NEXT: s_add_i32 s6, s6, s11248; FIXEDABI-NEXT: s_mov_b32 flat_scratch_lo, s7249; FIXEDABI-NEXT: s_lshr_b32 flat_scratch_hi, s6, 8250; FIXEDABI-NEXT: s_add_u32 s0, s4, 8251; FIXEDABI-NEXT: flat_load_ubyte v0, v[0:1] glc252; FIXEDABI-NEXT: s_addc_u32 s1, s5, 0253; FIXEDABI-NEXT: s_waitcnt vmcnt(0)254; FIXEDABI-NEXT: v_mov_b32_e32 v0, s0255; FIXEDABI-NEXT: v_mov_b32_e32 v1, s1256; FIXEDABI-NEXT: flat_load_ubyte v0, v[0:1] glc257; FIXEDABI-NEXT: s_waitcnt vmcnt(0)258; FIXEDABI-NEXT: flat_load_ubyte v0, v[0:1] glc259; FIXEDABI-NEXT: s_endpgm260 %queue.ptr = call ptr addrspace(4) @llvm.amdgcn.queue.ptr()261 %implicitarg.ptr = call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()262 %dispatch.ptr = call ptr addrspace(4) @llvm.amdgcn.dispatch.ptr()263 %dispatch.id = call i64 @llvm.amdgcn.dispatch.id()264 %queue.load = load volatile i8, ptr addrspace(4) %queue.ptr265 %implicitarg.load = load volatile i8, ptr addrspace(4) %implicitarg.ptr266 %dispatch.load = load volatile i8, ptr addrspace(4) %dispatch.ptr267 ret void268}269 270define amdgpu_kernel void @marked_kernel_nokernargs_implicitarg_ptr() #0 {271; FIXEDABI-LABEL: marked_kernel_nokernargs_implicitarg_ptr:272; FIXEDABI: ; %bb.0:273; FIXEDABI-NEXT: s_add_i32 s4, s4, s9274; FIXEDABI-NEXT: v_mov_b32_e32 v0, 0275; FIXEDABI-NEXT: s_mov_b32 flat_scratch_lo, s5276; FIXEDABI-NEXT: s_lshr_b32 flat_scratch_hi, s4, 8277; FIXEDABI-NEXT: v_mov_b32_e32 v1, 0278; FIXEDABI-NEXT: flat_load_ubyte v0, v[0:1] glc279; FIXEDABI-NEXT: s_endpgm280 %implicitarg.ptr = call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()281 %implicitarg.load = load volatile i8, ptr addrspace(4) %implicitarg.ptr282 ret void283}284 285; On gfx8, the queue ptr is required for this addrspacecast.286define void @addrspacecast_requires_queue_ptr(ptr addrspace(5) %ptr.private, ptr addrspace(3) %ptr.local) #0 {287; FIXEDABI-SDAG-LABEL: addrspacecast_requires_queue_ptr:288; FIXEDABI-SDAG: ; %bb.0:289; FIXEDABI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)290; FIXEDABI-SDAG-NEXT: s_mov_b64 s[4:5], 0xc0291; FIXEDABI-SDAG-NEXT: s_load_dword s6, s[4:5], 0x0292; FIXEDABI-SDAG-NEXT: s_mov_b64 s[4:5], 0xc4293; FIXEDABI-SDAG-NEXT: s_load_dword s4, s[4:5], 0x0294; FIXEDABI-SDAG-NEXT: v_cmp_ne_u32_e32 vcc, -1, v0295; FIXEDABI-SDAG-NEXT: s_waitcnt lgkmcnt(0)296; FIXEDABI-SDAG-NEXT: v_mov_b32_e32 v2, s6297; FIXEDABI-SDAG-NEXT: v_cndmask_b32_e32 v3, 0, v2, vcc298; FIXEDABI-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v0, vcc299; FIXEDABI-SDAG-NEXT: v_mov_b32_e32 v0, s4300; FIXEDABI-SDAG-NEXT: v_cmp_ne_u32_e32 vcc, -1, v1301; FIXEDABI-SDAG-NEXT: v_cndmask_b32_e32 v5, 0, v0, vcc302; FIXEDABI-SDAG-NEXT: v_mov_b32_e32 v0, 1303; FIXEDABI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v1, vcc304; FIXEDABI-SDAG-NEXT: flat_store_dword v[2:3], v0305; FIXEDABI-SDAG-NEXT: s_waitcnt vmcnt(0)306; FIXEDABI-SDAG-NEXT: v_mov_b32_e32 v0, 2307; FIXEDABI-SDAG-NEXT: flat_store_dword v[4:5], v0308; FIXEDABI-SDAG-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)309; FIXEDABI-SDAG-NEXT: s_setpc_b64 s[30:31]310;311; FIXEDABI-GISEL-LABEL: addrspacecast_requires_queue_ptr:312; FIXEDABI-GISEL: ; %bb.0:313; FIXEDABI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)314; FIXEDABI-GISEL-NEXT: s_mov_b64 s[4:5], 0xc0315; FIXEDABI-GISEL-NEXT: s_load_dword s6, s[4:5], 0x0316; FIXEDABI-GISEL-NEXT: s_mov_b64 s[4:5], 0xc4317; FIXEDABI-GISEL-NEXT: s_load_dword s4, s[4:5], 0x0318; FIXEDABI-GISEL-NEXT: v_cmp_ne_u32_e32 vcc, -1, v0319; FIXEDABI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v0, vcc320; FIXEDABI-GISEL-NEXT: s_waitcnt lgkmcnt(0)321; FIXEDABI-GISEL-NEXT: v_mov_b32_e32 v3, s6322; FIXEDABI-GISEL-NEXT: v_cndmask_b32_e32 v3, 0, v3, vcc323; FIXEDABI-GISEL-NEXT: v_mov_b32_e32 v4, s4324; FIXEDABI-GISEL-NEXT: v_cmp_ne_u32_e32 vcc, -1, v1325; FIXEDABI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v1, vcc326; FIXEDABI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v4, vcc327; FIXEDABI-GISEL-NEXT: v_mov_b32_e32 v4, 1328; FIXEDABI-GISEL-NEXT: flat_store_dword v[2:3], v4329; FIXEDABI-GISEL-NEXT: s_waitcnt vmcnt(0)330; FIXEDABI-GISEL-NEXT: v_mov_b32_e32 v2, 2331; FIXEDABI-GISEL-NEXT: flat_store_dword v[0:1], v2332; FIXEDABI-GISEL-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)333; FIXEDABI-GISEL-NEXT: s_setpc_b64 s[30:31]334 %flat.private = addrspacecast ptr addrspace(5) %ptr.private to ptr335 %flat.local = addrspacecast ptr addrspace(3) %ptr.local to ptr336 store volatile i32 1, ptr %flat.private337 store volatile i32 2, ptr %flat.local338 ret void339}340 341define void @is_shared_requires_queue_ptr(ptr %ptr) #0 {342; FIXEDABI-LABEL: is_shared_requires_queue_ptr:343; FIXEDABI: ; %bb.0:344; FIXEDABI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)345; FIXEDABI-NEXT: s_mov_b64 s[4:5], 0xc4346; FIXEDABI-NEXT: s_load_dword s4, s[4:5], 0x0347; FIXEDABI-NEXT: s_waitcnt lgkmcnt(0)348; FIXEDABI-NEXT: v_cmp_eq_u32_e32 vcc, s4, v1349; FIXEDABI-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc350; FIXEDABI-NEXT: flat_store_dword v[0:1], v0351; FIXEDABI-NEXT: s_waitcnt vmcnt(0)352; FIXEDABI-NEXT: s_setpc_b64 s[30:31]353 %is.shared = call i1 @llvm.amdgcn.is.shared(ptr %ptr)354 %zext = zext i1 %is.shared to i32355 store volatile i32 %zext, ptr addrspace(1) poison356 ret void357}358 359define void @is_private_requires_queue_ptr(ptr %ptr) #0 {360; FIXEDABI-LABEL: is_private_requires_queue_ptr:361; FIXEDABI: ; %bb.0:362; FIXEDABI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)363; FIXEDABI-NEXT: s_mov_b64 s[4:5], 0xc0364; FIXEDABI-NEXT: s_load_dword s4, s[4:5], 0x0365; FIXEDABI-NEXT: s_waitcnt lgkmcnt(0)366; FIXEDABI-NEXT: v_cmp_eq_u32_e32 vcc, s4, v1367; FIXEDABI-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc368; FIXEDABI-NEXT: flat_store_dword v[0:1], v0369; FIXEDABI-NEXT: s_waitcnt vmcnt(0)370; FIXEDABI-NEXT: s_setpc_b64 s[30:31]371 %is.private = call i1 @llvm.amdgcn.is.private(ptr %ptr)372 %zext = zext i1 %is.private to i32373 store volatile i32 %zext, ptr addrspace(1) poison374 ret void375}376 377define void @trap_requires_queue() #0 {378; FIXEDABI-LABEL: trap_requires_queue:379; FIXEDABI: ; %bb.0:380; FIXEDABI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)381; FIXEDABI-NEXT: s_mov_b64 s[4:5], 0xc8382; FIXEDABI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x0383; FIXEDABI-NEXT: s_waitcnt lgkmcnt(0)384; FIXEDABI-NEXT: s_trap 2385 call void @llvm.trap()386 unreachable387}388 389define void @debugtrap_requires_queue() #0 {390; FIXEDABI-LABEL: debugtrap_requires_queue:391; FIXEDABI: ; %bb.0:392; FIXEDABI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)393; FIXEDABI-NEXT: s_trap 3394 call void @llvm.debugtrap()395 unreachable396}397 398; FIXME: Broken in globalisel399; define void @ubsantrap_requires_queue() #0 {400; call void @llvm.ubsantrap(i8 0)401; unreachable402; }403 404declare i32 @llvm.amdgcn.workitem.id.x()405declare i32 @llvm.amdgcn.workitem.id.y()406declare i32 @llvm.amdgcn.workitem.id.z()407declare i32 @llvm.amdgcn.workgroup.id.x()408declare i32 @llvm.amdgcn.workgroup.id.y()409declare i32 @llvm.amdgcn.workgroup.id.z()410declare noalias ptr addrspace(4) @llvm.amdgcn.queue.ptr()411declare noalias ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()412declare i64 @llvm.amdgcn.dispatch.id()413declare noalias ptr addrspace(4) @llvm.amdgcn.dispatch.ptr()414declare i1 @llvm.amdgcn.is.shared(ptr)415declare i1 @llvm.amdgcn.is.private(ptr)416declare void @llvm.trap()417declare void @llvm.debugtrap()418 419attributes #0 = { "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-queue-ptr" "amdgpu-no-work-group-id-x" "amdgpu-no-work-group-id-y" "amdgpu-no-work-group-id-z" "amdgpu-no-work-item-id-x" "amdgpu-no-work-item-id-y" "amdgpu-no-work-item-id-z" }420 421