1; RUN: llc -march=amdgcn -mcpu=gfx90a -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s 2 3; Check that syncscope it copied from atomicrmw to cmpxchg during expansion. 4; There should be no scc unless we have system scope. 5 6; GCN-LABEL: {{^}}expand_atomicrmw_agent: 7; GCN: global_atomic_cmpswap v{{[0-9]+}}, v[{{[0-9:]+}}], v[{{[0-9:]+}}], off glc{{$}} 8define void @expand_atomicrmw_agent(float addrspace(1)* nocapture %arg) { 9entry: 10 %ret = atomicrmw fadd float addrspace(1)* %arg, float 1.000000e+00 syncscope("agent") monotonic, align 4 11 ret void 12} 13 14; GCN-LABEL: {{^}}expand_atomicrmw_workgroup: 15; GCN: global_atomic_cmpswap v{{[0-9]+}}, v[{{[0-9:]+}}], v[{{[0-9:]+}}], off glc{{$}} 16define void @expand_atomicrmw_workgroup(float addrspace(1)* nocapture %arg) { 17entry: 18 %ret = atomicrmw fadd float addrspace(1)* %arg, float 1.000000e+00 syncscope("workgroup") monotonic, align 4 19 ret void 20} 21 22; GCN-LABEL: {{^}}expand_atomicrmw_wavefront: 23; GCN: global_atomic_cmpswap v{{[0-9]+}}, v[{{[0-9:]+}}], v[{{[0-9:]+}}], off glc{{$}} 24define void @expand_atomicrmw_wavefront(float addrspace(1)* nocapture %arg) { 25entry: 26 %ret = atomicrmw fadd float addrspace(1)* %arg, float 1.000000e+00 syncscope("wavefront") monotonic, align 4 27 ret void 28} 29 30; GCN-LABEL: {{^}}expand_atomicrmw_agent_one_as: 31; GCN: global_atomic_cmpswap v{{[0-9]+}}, v[{{[0-9:]+}}], v[{{[0-9:]+}}], off glc{{$}} 32define void @expand_atomicrmw_agent_one_as(float addrspace(1)* nocapture %arg) { 33entry: 34 %ret = atomicrmw fadd float addrspace(1)* %arg, float 1.000000e+00 syncscope("agent-one-as") monotonic, align 4 35 ret void 36} 37 38; GCN-LABEL: {{^}}expand_atomicrmw_workgroup_one_as: 39; GCN: global_atomic_cmpswap v{{[0-9]+}}, v[{{[0-9:]+}}], v[{{[0-9:]+}}], off glc{{$}} 40define void @expand_atomicrmw_workgroup_one_as(float addrspace(1)* nocapture %arg) { 41entry: 42 %ret = atomicrmw fadd float addrspace(1)* %arg, float 1.000000e+00 syncscope("workgroup-one-as") monotonic, align 4 43 ret void 44} 45 46; GCN-LABEL: {{^}}expand_atomicrmw_wavefront_one_as: 47; GCN: global_atomic_cmpswap v{{[0-9]+}}, v[{{[0-9:]+}}], v[{{[0-9:]+}}], off glc{{$}} 48define void @expand_atomicrmw_wavefront_one_as(float addrspace(1)* nocapture %arg) { 49entry: 50 %ret = atomicrmw fadd float addrspace(1)* %arg, float 1.000000e+00 syncscope("wavefront-one-as") monotonic, align 4 51 ret void 52} 53 54; GCN-LABEL: {{^}}expand_atomicrmw_singlethread_one_as: 55; GCN: global_atomic_cmpswap v{{[0-9]+}}, v[{{[0-9:]+}}], v[{{[0-9:]+}}], off glc{{$}} 56define void @expand_atomicrmw_singlethread_one_as(float addrspace(1)* nocapture %arg) { 57entry: 58 %ret = atomicrmw fadd float addrspace(1)* %arg, float 1.000000e+00 syncscope("singlethread-one-as") monotonic, align 4 59 ret void 60} 61 62; GCN-LABEL: {{^}}expand_atomicrmw_one_as: 63; GCN: global_atomic_cmpswap v{{[0-9]+}}, v[{{[0-9:]+}}], v[{{[0-9:]+}}], off glc scc{{$}} 64define void @expand_atomicrmw_one_as(float addrspace(1)* nocapture %arg) { 65entry: 66 %ret = atomicrmw fadd float addrspace(1)* %arg, float 1.000000e+00 syncscope("one-as") monotonic, align 4 67 ret void 68} 69 70; GCN-LABEL: {{^}}expand_atomicrmw_system: 71; GCN: global_atomic_cmpswap v{{[0-9]+}}, v[{{[0-9:]+}}], v[{{[0-9:]+}}], off glc scc{{$}} 72define void @expand_atomicrmw_system(float addrspace(1)* nocapture %arg) { 73entry: 74 %ret = atomicrmw fadd float addrspace(1)* %arg, float 1.000000e+00 monotonic, align 4 75 ret void 76} 77