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