; RUN: llc -march=amdgcn -mcpu=gfx90a -verify-machineinstrs --pass-remarks=atomic-expand \ ; RUN: %s -o - 2>&1 | FileCheck %s --check-prefix=GFX90A-CAS ; GFX90A-CAS: A compare and swap loop was generated for an atomic fadd operation at system memory scope ; GFX90A-CAS: A compare and swap loop was generated for an atomic fadd operation at agent memory scope ; GFX90A-CAS: A compare and swap loop was generated for an atomic fadd operation at workgroup memory scope ; GFX90A-CAS: A compare and swap loop was generated for an atomic fadd operation at wavefront memory scope ; GFX90A-CAS: A compare and swap loop was generated for an atomic fadd operation at singlethread memory scope ; GFX90A-CAS: A compare and swap loop was generated for an atomic fadd operation at one-as memory scope ; GFX90A-CAS: A compare and swap loop was generated for an atomic fadd operation at agent-one-as memory scope ; GFX90A-CAS: A compare and swap loop was generated for an atomic fadd operation at workgroup-one-as memory scope ; GFX90A-CAS: A compare and swap loop was generated for an atomic fadd operation at wavefront-one-as memory scope ; GFX90A-CAS: A compare and swap loop was generated for an atomic fadd operation at singlethread-one-as memory scope ; GFX90A-CAS-LABEL: atomic_add_cas: ; GFX90A-CAS: flat_atomic_cmpswap v3, v[0:1], v[4:5] glc ; GFX90A-CAS: s_cbranch_execnz define dso_local void @atomic_add_cas(float* %p, float %q) { entry: %ret = atomicrmw fadd float* %p, float %q monotonic, align 4 ret void } ; GFX90A-CAS-LABEL: atomic_add_cas_agent: ; GFX90A-CAS: flat_atomic_cmpswap v3, v[0:1], v[4:5] glc ; GFX90A-CAS: s_cbranch_execnz define dso_local void @atomic_add_cas_agent(float* %p, float %q) { entry: %ret = atomicrmw fadd float* %p, float %q syncscope("agent") monotonic, align 4 ret void } ; GFX90A-CAS-LABEL: atomic_add_cas_workgroup: ; GFX90A-CAS: flat_atomic_cmpswap v3, v[0:1], v[4:5] glc ; GFX90A-CAS: s_cbranch_execnz define dso_local void @atomic_add_cas_workgroup(float* %p, float %q) { entry: %ret = atomicrmw fadd float* %p, float %q syncscope("workgroup") monotonic, align 4 ret void } ; GFX90A-CAS-LABEL: atomic_add_cas_wavefront: ; GFX90A-CAS: flat_atomic_cmpswap v3, v[0:1], v[4:5] glc ; GFX90A-CAS: s_cbranch_execnz define dso_local void @atomic_add_cas_wavefront(float* %p, float %q) { entry: %ret = atomicrmw fadd float* %p, float %q syncscope("wavefront") monotonic, align 4 ret void } ; GFX90A-CAS-LABEL: atomic_add_cas_singlethread: ; GFX90A-CAS: flat_atomic_cmpswap v3, v[0:1], v[4:5] glc ; GFX90A-CAS: s_cbranch_execnz define dso_local void @atomic_add_cas_singlethread(float* %p, float %q) { entry: %ret = atomicrmw fadd float* %p, float %q syncscope("singlethread") monotonic, align 4 ret void } ; GFX90A-CAS-LABEL: atomic_add_cas_one_as: ; GFX90A-CAS: flat_atomic_cmpswap v3, v[0:1], v[4:5] glc ; GFX90A-CAS: s_cbranch_execnz define dso_local void @atomic_add_cas_one_as(float* %p, float %q) { entry: %ret = atomicrmw fadd float* %p, float %q syncscope("one-as") monotonic, align 4 ret void } ; GFX90A-CAS-LABEL: atomic_add_cas_agent_one_as: ; GFX90A-CAS: flat_atomic_cmpswap v3, v[0:1], v[4:5] glc ; GFX90A-CAS: s_cbranch_execnz define dso_local void @atomic_add_cas_agent_one_as(float* %p, float %q) { entry: %ret = atomicrmw fadd float* %p, float %q syncscope("agent-one-as") monotonic, align 4 ret void } ; GFX90A-CAS-LABEL: atomic_add_cas_workgroup_one_as: ; GFX90A-CAS: flat_atomic_cmpswap v3, v[0:1], v[4:5] glc ; GFX90A-CAS: s_cbranch_execnz define dso_local void @atomic_add_cas_workgroup_one_as(float* %p, float %q) { entry: %ret = atomicrmw fadd float* %p, float %q syncscope("workgroup-one-as") monotonic, align 4 ret void } ; GFX90A-CAS-LABEL: atomic_add_cas_wavefront_one_as: ; GFX90A-CAS: flat_atomic_cmpswap v3, v[0:1], v[4:5] glc ; GFX90A-CAS: s_cbranch_execnz define dso_local void @atomic_add_cas_wavefront_one_as(float* %p, float %q) { entry: %ret = atomicrmw fadd float* %p, float %q syncscope("wavefront-one-as") monotonic, align 4 ret void } ; GFX90A-CAS-LABEL: atomic_add_cas_singlethread_one_as: ; GFX90A-CAS: flat_atomic_cmpswap v3, v[0:1], v[4:5] glc ; GFX90A-CAS: s_cbranch_execnz define dso_local void @atomic_add_cas_singlethread_one_as(float* %p, float %q) { entry: %ret = atomicrmw fadd float* %p, float %q syncscope("singlethread-one-as") monotonic, align 4 ret void }