| ; 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 |
| } |