80 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefix=GCN %s3 4define i32 @atomic_nand_i32_lds(ptr addrspace(3) %ptr) nounwind {5; GCN-LABEL: atomic_nand_i32_lds:6; GCN: ; %bb.0:7; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8; GCN-NEXT: ds_read_b32 v1, v09; GCN-NEXT: s_mov_b64 s[4:5], 010; GCN-NEXT: .LBB0_1: ; %atomicrmw.start11; GCN-NEXT: ; =>This Inner Loop Header: Depth=112; GCN-NEXT: s_waitcnt lgkmcnt(0)13; GCN-NEXT: v_mov_b32_e32 v2, v114; GCN-NEXT: v_bfi_b32 v1, v2, -5, -115; GCN-NEXT: ds_cmpst_rtn_b32 v1, v0, v2, v116; GCN-NEXT: s_waitcnt lgkmcnt(0)17; GCN-NEXT: v_cmp_eq_u32_e32 vcc, v1, v218; GCN-NEXT: s_or_b64 s[4:5], vcc, s[4:5]19; GCN-NEXT: s_andn2_b64 exec, exec, s[4:5]20; GCN-NEXT: s_cbranch_execnz .LBB0_121; GCN-NEXT: ; %bb.2: ; %atomicrmw.end22; GCN-NEXT: s_or_b64 exec, exec, s[4:5]23; GCN-NEXT: v_mov_b32_e32 v0, v124; GCN-NEXT: s_setpc_b64 s[30:31]25 %result = atomicrmw nand ptr addrspace(3) %ptr, i32 4 seq_cst26 ret i32 %result27}28 29define i32 @atomic_nand_i32_global(ptr addrspace(1) %ptr) nounwind {30; GCN-LABEL: atomic_nand_i32_global:31; GCN: ; %bb.0:32; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)33; GCN-NEXT: global_load_dword v2, v[0:1], off34; GCN-NEXT: s_mov_b64 s[4:5], 035; GCN-NEXT: .LBB1_1: ; %atomicrmw.start36; GCN-NEXT: ; =>This Inner Loop Header: Depth=137; GCN-NEXT: s_waitcnt vmcnt(0)38; GCN-NEXT: v_mov_b32_e32 v3, v239; GCN-NEXT: v_bfi_b32 v2, v3, -5, -140; GCN-NEXT: global_atomic_cmpswap v2, v[0:1], v[2:3], off glc41; GCN-NEXT: s_waitcnt vmcnt(0)42; GCN-NEXT: buffer_wbinvl1_vol43; GCN-NEXT: v_cmp_eq_u32_e32 vcc, v2, v344; GCN-NEXT: s_or_b64 s[4:5], vcc, s[4:5]45; GCN-NEXT: s_andn2_b64 exec, exec, s[4:5]46; GCN-NEXT: s_cbranch_execnz .LBB1_147; GCN-NEXT: ; %bb.2: ; %atomicrmw.end48; GCN-NEXT: s_or_b64 exec, exec, s[4:5]49; GCN-NEXT: v_mov_b32_e32 v0, v250; GCN-NEXT: s_setpc_b64 s[30:31]51 %result = atomicrmw nand ptr addrspace(1) %ptr, i32 4 seq_cst52 ret i32 %result53}54 55define i32 @atomic_nand_i32_flat(ptr %ptr) nounwind {56; GCN-LABEL: atomic_nand_i32_flat:57; GCN: ; %bb.0:58; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)59; GCN-NEXT: flat_load_dword v2, v[0:1]60; GCN-NEXT: s_mov_b64 s[4:5], 061; GCN-NEXT: .LBB2_1: ; %atomicrmw.start62; GCN-NEXT: ; =>This Inner Loop Header: Depth=163; GCN-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)64; GCN-NEXT: v_mov_b32_e32 v3, v265; GCN-NEXT: v_bfi_b32 v2, v3, -5, -166; GCN-NEXT: flat_atomic_cmpswap v2, v[0:1], v[2:3] glc67; GCN-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)68; GCN-NEXT: buffer_wbinvl1_vol69; GCN-NEXT: v_cmp_eq_u32_e32 vcc, v2, v370; GCN-NEXT: s_or_b64 s[4:5], vcc, s[4:5]71; GCN-NEXT: s_andn2_b64 exec, exec, s[4:5]72; GCN-NEXT: s_cbranch_execnz .LBB2_173; GCN-NEXT: ; %bb.2: ; %atomicrmw.end74; GCN-NEXT: s_or_b64 exec, exec, s[4:5]75; GCN-NEXT: v_mov_b32_e32 v0, v276; GCN-NEXT: s_setpc_b64 s[30:31]77 %result = atomicrmw nand ptr %ptr, i32 4 seq_cst78 ret i32 %result79}80