xref: /llvm-project/llvm/test/CodeGen/NVPTX/load-store-sm-90.ll (revision b279f6b098d3849f7f1c1f539b108307d5f8ae2d)
1*b279f6b0SFangrui Song; RUN: llc < %s -mtriple=nvptx64 -mcpu=sm_90 -mattr=+ptx78 | FileCheck %s
2*b279f6b0SFangrui Song; RUN: %if ptxas-12.2 %{ llc < %s -mtriple=nvptx64 -mcpu=sm_90 -mattr=+ptx78 | %ptxas-verify -arch=sm_90 %}
378ae2de4Sgonzalobg
478ae2de4Sgonzalobg; TODO: fix "atomic load volatile acquire": generates "ld.acquire.sys;"
578ae2de4Sgonzalobg;       but should generate "ld.mmio.relaxed.sys; fence.acq_rel.sys;"
678ae2de4Sgonzalobg; TODO: fix "atomic store volatile release": generates "st.release.sys;"
778ae2de4Sgonzalobg;       but should generate "fence.acq_rel.sys; st.mmio.relaxed.sys;"
878ae2de4Sgonzalobg
978ae2de4Sgonzalobg; TODO: fix "atomic load volatile seq_cst": generates "fence.sc.sys; ld.acquire.sys;"
1078ae2de4Sgonzalobg;       but should generate "fence.sc.sys; ld.relaxed.mmio.sys; fence.acq_rel.sys;"
1178ae2de4Sgonzalobg; TODO: fix "atomic store volatile seq_cst": generates "fence.sc.sys; st.release.sys;"
1278ae2de4Sgonzalobg;       but should generate "fence.sc.sys; st.relaxed.mmio.sys;"
1378ae2de4Sgonzalobg
1478ae2de4Sgonzalobg; TODO: add i1, <8 x i8>, and <6 x i8> vector tests.
1578ae2de4Sgonzalobg
1678ae2de4Sgonzalobg; TODO: add test for vectors that exceed 128-bit length
1778ae2de4Sgonzalobg; Per https://docs.nvidia.com/cuda/parallel-thread-execution/index.html#vectors
1878ae2de4Sgonzalobg; vectors cannot exceed 128-bit in length, i.e., .v4.u64 is not allowed.
1978ae2de4Sgonzalobg
2078ae2de4Sgonzalobg; TODO: generate PTX that preserves Concurrent Forward Progress
2178ae2de4Sgonzalobg;       for atomic operations to local statespace
2278ae2de4Sgonzalobg;       by generating atomic or volatile operations.
2378ae2de4Sgonzalobg
2478ae2de4Sgonzalobg; TODO: design exposure for atomic operations on vector types.
2578ae2de4Sgonzalobg
2678ae2de4Sgonzalobg; TODO: implement and test thread scope.
2778ae2de4Sgonzalobg
2878ae2de4Sgonzalobg; TODO: add weak,atomic,volatile,atomic volatile tests
2978ae2de4Sgonzalobg;       for .const and .param statespaces.
3078ae2de4Sgonzalobg
3178ae2de4Sgonzalobg; TODO: optimize .shared.sys into .shared.cta or .shared.cluster .
3278ae2de4Sgonzalobg
3378ae2de4Sgonzalobg;; generic statespace
3478ae2de4Sgonzalobg
3578ae2de4Sgonzalobg; CHECK-LABEL: generic_unordered_cluster
3678ae2de4Sgonzalobgdefine void @generic_unordered_cluster(ptr %a, ptr %b, ptr %c, ptr %d, ptr %e) local_unnamed_addr {
3778ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
3878ae2de4Sgonzalobg  %a.load = load atomic i8, ptr %a syncscope("cluster") unordered, align 1
3978ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
4078ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
4178ae2de4Sgonzalobg  store atomic i8 %a.add, ptr %a syncscope("cluster") unordered, align 1
4278ae2de4Sgonzalobg
4378ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
4478ae2de4Sgonzalobg  %b.load = load atomic i16, ptr %b syncscope("cluster") unordered, align 2
4578ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
4678ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
4778ae2de4Sgonzalobg  store atomic i16 %b.add, ptr %b syncscope("cluster") unordered, align 2
4878ae2de4Sgonzalobg
4978ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
5078ae2de4Sgonzalobg  %c.load = load atomic i32, ptr %c syncscope("cluster") unordered, align 4
5178ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
5278ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
5378ae2de4Sgonzalobg  store atomic i32 %c.add, ptr %c syncscope("cluster") unordered, align 4
5478ae2de4Sgonzalobg
5578ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
5678ae2de4Sgonzalobg  %d.load = load atomic i64, ptr %d syncscope("cluster") unordered, align 8
5778ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
5878ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
5978ae2de4Sgonzalobg  store atomic i64 %d.add, ptr %d syncscope("cluster") unordered, align 8
6078ae2de4Sgonzalobg
6178ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
6278ae2de4Sgonzalobg  %e.load = load atomic float, ptr %e syncscope("cluster") unordered, align 4
6378ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
6478ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
6578ae2de4Sgonzalobg  store atomic float %e.add, ptr %e syncscope("cluster") unordered, align 4
6678ae2de4Sgonzalobg
6778ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
6878ae2de4Sgonzalobg  %f.load = load atomic double, ptr %e syncscope("cluster") unordered, align 8
6978ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
7078ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
7178ae2de4Sgonzalobg  store atomic double %f.add, ptr %e syncscope("cluster") unordered, align 8
7278ae2de4Sgonzalobg
7378ae2de4Sgonzalobg  ret void
7478ae2de4Sgonzalobg}
7578ae2de4Sgonzalobg
7678ae2de4Sgonzalobg; CHECK-LABEL: generic_unordered_volatile_cluster
7778ae2de4Sgonzalobgdefine void @generic_unordered_volatile_cluster(ptr %a, ptr %b, ptr %c, ptr %d, ptr %e) local_unnamed_addr {
7878ae2de4Sgonzalobg  ; CHECK: ld.volatile.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
7978ae2de4Sgonzalobg  %a.load = load atomic volatile i8, ptr %a syncscope("cluster") unordered, align 1
8078ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
8178ae2de4Sgonzalobg  ; CHECK: st.volatile.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
8278ae2de4Sgonzalobg  store atomic volatile i8 %a.add, ptr %a syncscope("cluster") unordered, align 1
8378ae2de4Sgonzalobg
8478ae2de4Sgonzalobg  ; CHECK: ld.volatile.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
8578ae2de4Sgonzalobg  %b.load = load atomic volatile i16, ptr %b syncscope("cluster") unordered, align 2
8678ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
8778ae2de4Sgonzalobg  ; CHECK: st.volatile.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
8878ae2de4Sgonzalobg  store atomic volatile i16 %b.add, ptr %b syncscope("cluster") unordered, align 2
8978ae2de4Sgonzalobg
9078ae2de4Sgonzalobg  ; CHECK: ld.volatile.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
9178ae2de4Sgonzalobg  %c.load = load atomic volatile i32, ptr %c syncscope("cluster") unordered, align 4
9278ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
9378ae2de4Sgonzalobg  ; CHECK: st.volatile.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
9478ae2de4Sgonzalobg  store atomic volatile i32 %c.add, ptr %c syncscope("cluster") unordered, align 4
9578ae2de4Sgonzalobg
9678ae2de4Sgonzalobg  ; CHECK: ld.volatile.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
9778ae2de4Sgonzalobg  %d.load = load atomic volatile i64, ptr %d syncscope("cluster") unordered, align 8
9878ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
9978ae2de4Sgonzalobg  ; CHECK: st.volatile.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
10078ae2de4Sgonzalobg  store atomic volatile i64 %d.add, ptr %d syncscope("cluster") unordered, align 8
10178ae2de4Sgonzalobg
10278ae2de4Sgonzalobg  ; CHECK: ld.volatile.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
10378ae2de4Sgonzalobg  %e.load = load atomic volatile float, ptr %e syncscope("cluster") unordered, align 4
10478ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
10578ae2de4Sgonzalobg  ; CHECK: st.volatile.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
10678ae2de4Sgonzalobg  store atomic volatile float %e.add, ptr %e syncscope("cluster") unordered, align 4
10778ae2de4Sgonzalobg
10878ae2de4Sgonzalobg  ; CHECK: ld.volatile.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
10978ae2de4Sgonzalobg  %f.load = load atomic volatile double, ptr %e syncscope("cluster") unordered, align 8
11078ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
11178ae2de4Sgonzalobg  ; CHECK: st.volatile.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
11278ae2de4Sgonzalobg  store atomic volatile double %f.add, ptr %e syncscope("cluster") unordered, align 8
11378ae2de4Sgonzalobg
11478ae2de4Sgonzalobg  ret void
11578ae2de4Sgonzalobg}
11678ae2de4Sgonzalobg
11778ae2de4Sgonzalobg; CHECK-LABEL: generic_monotonic_cluster
11878ae2de4Sgonzalobgdefine void @generic_monotonic_cluster(ptr %a, ptr %b, ptr %c, ptr %d, ptr %e) local_unnamed_addr {
11978ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
12078ae2de4Sgonzalobg  %a.load = load atomic i8, ptr %a syncscope("cluster") monotonic, align 1
12178ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
12278ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
12378ae2de4Sgonzalobg  store atomic i8 %a.add, ptr %a syncscope("cluster") monotonic, align 1
12478ae2de4Sgonzalobg
12578ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
12678ae2de4Sgonzalobg  %b.load = load atomic i16, ptr %b syncscope("cluster") monotonic, align 2
12778ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
12878ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
12978ae2de4Sgonzalobg  store atomic i16 %b.add, ptr %b syncscope("cluster") monotonic, align 2
13078ae2de4Sgonzalobg
13178ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
13278ae2de4Sgonzalobg  %c.load = load atomic i32, ptr %c syncscope("cluster") monotonic, align 4
13378ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
13478ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
13578ae2de4Sgonzalobg  store atomic i32 %c.add, ptr %c syncscope("cluster") monotonic, align 4
13678ae2de4Sgonzalobg
13778ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
13878ae2de4Sgonzalobg  %d.load = load atomic i64, ptr %d syncscope("cluster") monotonic, align 8
13978ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
14078ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
14178ae2de4Sgonzalobg  store atomic i64 %d.add, ptr %d syncscope("cluster") monotonic, align 8
14278ae2de4Sgonzalobg
14378ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
14478ae2de4Sgonzalobg  %e.load = load atomic float, ptr %e syncscope("cluster") monotonic, align 4
14578ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
14678ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
14778ae2de4Sgonzalobg  store atomic float %e.add, ptr %e syncscope("cluster") monotonic, align 4
14878ae2de4Sgonzalobg
14978ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
15078ae2de4Sgonzalobg  %f.load = load atomic double, ptr %e syncscope("cluster") monotonic, align 8
15178ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
15278ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
15378ae2de4Sgonzalobg  store atomic double %f.add, ptr %e syncscope("cluster") monotonic, align 8
15478ae2de4Sgonzalobg
15578ae2de4Sgonzalobg  ret void
15678ae2de4Sgonzalobg}
15778ae2de4Sgonzalobg
15878ae2de4Sgonzalobg; CHECK-LABEL: generic_monotonic_volatile_cluster
15978ae2de4Sgonzalobgdefine void @generic_monotonic_volatile_cluster(ptr %a, ptr %b, ptr %c, ptr %d, ptr %e) local_unnamed_addr {
16078ae2de4Sgonzalobg  ; CHECK: ld.volatile.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
16178ae2de4Sgonzalobg  %a.load = load atomic volatile i8, ptr %a syncscope("cluster") monotonic, align 1
16278ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
16378ae2de4Sgonzalobg  ; CHECK: st.volatile.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
16478ae2de4Sgonzalobg  store atomic volatile i8 %a.add, ptr %a syncscope("cluster") monotonic, align 1
16578ae2de4Sgonzalobg
16678ae2de4Sgonzalobg  ; CHECK: ld.volatile.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
16778ae2de4Sgonzalobg  %b.load = load atomic volatile i16, ptr %b syncscope("cluster") monotonic, align 2
16878ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
16978ae2de4Sgonzalobg  ; CHECK: st.volatile.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
17078ae2de4Sgonzalobg  store atomic volatile i16 %b.add, ptr %b syncscope("cluster") monotonic, align 2
17178ae2de4Sgonzalobg
17278ae2de4Sgonzalobg  ; CHECK: ld.volatile.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
17378ae2de4Sgonzalobg  %c.load = load atomic volatile i32, ptr %c syncscope("cluster") monotonic, align 4
17478ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
17578ae2de4Sgonzalobg  ; CHECK: st.volatile.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
17678ae2de4Sgonzalobg  store atomic volatile i32 %c.add, ptr %c syncscope("cluster") monotonic, align 4
17778ae2de4Sgonzalobg
17878ae2de4Sgonzalobg  ; CHECK: ld.volatile.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
17978ae2de4Sgonzalobg  %d.load = load atomic volatile i64, ptr %d syncscope("cluster") monotonic, align 8
18078ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
18178ae2de4Sgonzalobg  ; CHECK: st.volatile.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
18278ae2de4Sgonzalobg  store atomic volatile i64 %d.add, ptr %d syncscope("cluster") monotonic, align 8
18378ae2de4Sgonzalobg
18478ae2de4Sgonzalobg  ; CHECK: ld.volatile.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
18578ae2de4Sgonzalobg  %e.load = load atomic volatile float, ptr %e syncscope("cluster") monotonic, align 4
18678ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
18778ae2de4Sgonzalobg  ; CHECK: st.volatile.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
18878ae2de4Sgonzalobg  store atomic volatile float %e.add, ptr %e syncscope("cluster") monotonic, align 4
18978ae2de4Sgonzalobg
19078ae2de4Sgonzalobg  ; CHECK: ld.volatile.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
19178ae2de4Sgonzalobg  %f.load = load atomic volatile double, ptr %e syncscope("cluster") monotonic, align 8
19278ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
19378ae2de4Sgonzalobg  ; CHECK: st.volatile.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
19478ae2de4Sgonzalobg  store atomic volatile double %f.add, ptr %e syncscope("cluster") monotonic, align 8
19578ae2de4Sgonzalobg
19678ae2de4Sgonzalobg  ret void
19778ae2de4Sgonzalobg}
19878ae2de4Sgonzalobg
19978ae2de4Sgonzalobg; CHECK-LABEL: generic_acq_rel_cluster
20078ae2de4Sgonzalobgdefine void @generic_acq_rel_cluster(ptr %a, ptr %b, ptr %c, ptr %d, ptr %e) local_unnamed_addr {
20178ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
20278ae2de4Sgonzalobg  %a.load = load atomic i8, ptr %a syncscope("cluster") acquire, align 1
20378ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
20478ae2de4Sgonzalobg  ; CHECK: st.release.cluster.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
20578ae2de4Sgonzalobg  store atomic i8 %a.add, ptr %a syncscope("cluster") release, align 1
20678ae2de4Sgonzalobg
20778ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
20878ae2de4Sgonzalobg  %b.load = load atomic i16, ptr %b syncscope("cluster") acquire, align 2
20978ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
21078ae2de4Sgonzalobg  ; CHECK: st.release.cluster.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
21178ae2de4Sgonzalobg  store atomic i16 %b.add, ptr %b syncscope("cluster") release, align 2
21278ae2de4Sgonzalobg
21378ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
21478ae2de4Sgonzalobg  %c.load = load atomic i32, ptr %c syncscope("cluster") acquire, align 4
21578ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
21678ae2de4Sgonzalobg  ; CHECK: st.release.cluster.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
21778ae2de4Sgonzalobg  store atomic i32 %c.add, ptr %c syncscope("cluster") release, align 4
21878ae2de4Sgonzalobg
21978ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
22078ae2de4Sgonzalobg  %d.load = load atomic i64, ptr %d syncscope("cluster") acquire, align 8
22178ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
22278ae2de4Sgonzalobg  ; CHECK: st.release.cluster.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
22378ae2de4Sgonzalobg  store atomic i64 %d.add, ptr %d syncscope("cluster") release, align 8
22478ae2de4Sgonzalobg
22578ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
22678ae2de4Sgonzalobg  %e.load = load atomic float, ptr %e syncscope("cluster") acquire, align 4
22778ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
22878ae2de4Sgonzalobg  ; CHECK: st.release.cluster.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
22978ae2de4Sgonzalobg  store atomic float %e.add, ptr %e syncscope("cluster") release, align 4
23078ae2de4Sgonzalobg
23178ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
23278ae2de4Sgonzalobg  %f.load = load atomic double, ptr %e syncscope("cluster") acquire, align 8
23378ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
23478ae2de4Sgonzalobg  ; CHECK: st.release.cluster.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
23578ae2de4Sgonzalobg  store atomic double %f.add, ptr %e syncscope("cluster") release, align 8
23678ae2de4Sgonzalobg
23778ae2de4Sgonzalobg  ret void
23878ae2de4Sgonzalobg}
23978ae2de4Sgonzalobg
24078ae2de4Sgonzalobg; CHECK-LABEL: generic_acq_rel_volatile_cluster
24178ae2de4Sgonzalobgdefine void @generic_acq_rel_volatile_cluster(ptr %a, ptr %b, ptr %c, ptr %d, ptr %e) local_unnamed_addr {
24278ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
24378ae2de4Sgonzalobg  %a.load = load atomic volatile i8, ptr %a syncscope("cluster") acquire, align 1
24478ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
24578ae2de4Sgonzalobg  ; CHECK: st.release.sys.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
24678ae2de4Sgonzalobg  store atomic volatile i8 %a.add, ptr %a syncscope("cluster") release, align 1
24778ae2de4Sgonzalobg
24878ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
24978ae2de4Sgonzalobg  %b.load = load atomic volatile i16, ptr %b syncscope("cluster") acquire, align 2
25078ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
25178ae2de4Sgonzalobg  ; CHECK: st.release.sys.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
25278ae2de4Sgonzalobg  store atomic volatile i16 %b.add, ptr %b syncscope("cluster") release, align 2
25378ae2de4Sgonzalobg
25478ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
25578ae2de4Sgonzalobg  %c.load = load atomic volatile i32, ptr %c syncscope("cluster") acquire, align 4
25678ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
25778ae2de4Sgonzalobg  ; CHECK: st.release.sys.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
25878ae2de4Sgonzalobg  store atomic volatile i32 %c.add, ptr %c syncscope("cluster") release, align 4
25978ae2de4Sgonzalobg
26078ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
26178ae2de4Sgonzalobg  %d.load = load atomic volatile i64, ptr %d syncscope("cluster") acquire, align 8
26278ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
26378ae2de4Sgonzalobg  ; CHECK: st.release.sys.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
26478ae2de4Sgonzalobg  store atomic volatile i64 %d.add, ptr %d syncscope("cluster") release, align 8
26578ae2de4Sgonzalobg
26678ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
26778ae2de4Sgonzalobg  %e.load = load atomic volatile float, ptr %e syncscope("cluster") acquire, align 4
26878ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
26978ae2de4Sgonzalobg  ; CHECK: st.release.sys.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
27078ae2de4Sgonzalobg  store atomic volatile float %e.add, ptr %e syncscope("cluster") release, align 4
27178ae2de4Sgonzalobg
27278ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
27378ae2de4Sgonzalobg  %f.load = load atomic volatile double, ptr %e syncscope("cluster") acquire, align 8
27478ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
27578ae2de4Sgonzalobg  ; CHECK: st.release.sys.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
27678ae2de4Sgonzalobg  store atomic volatile double %f.add, ptr %e syncscope("cluster") release, align 8
27778ae2de4Sgonzalobg
27878ae2de4Sgonzalobg  ret void
27978ae2de4Sgonzalobg}
28078ae2de4Sgonzalobg
28178ae2de4Sgonzalobg; CHECK-LABEL: generic_sc_cluster
28278ae2de4Sgonzalobgdefine void @generic_sc_cluster(ptr %a, ptr %b, ptr %c, ptr %d, ptr %e) local_unnamed_addr {
28378ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
28478ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
28578ae2de4Sgonzalobg  %a.load = load atomic i8, ptr %a syncscope("cluster") seq_cst, align 1
28678ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
28778ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
28878ae2de4Sgonzalobg  ; CHECK: st.release.cluster.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
28978ae2de4Sgonzalobg  store atomic i8 %a.add, ptr %a syncscope("cluster") seq_cst, align 1
29078ae2de4Sgonzalobg
29178ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
29278ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
29378ae2de4Sgonzalobg  %b.load = load atomic i16, ptr %b syncscope("cluster") seq_cst, align 2
29478ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
29578ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
29678ae2de4Sgonzalobg  ; CHECK: st.release.cluster.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
29778ae2de4Sgonzalobg  store atomic i16 %b.add, ptr %b syncscope("cluster") seq_cst, align 2
29878ae2de4Sgonzalobg
29978ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
30078ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
30178ae2de4Sgonzalobg  %c.load = load atomic i32, ptr %c syncscope("cluster") seq_cst, align 4
30278ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
30378ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
30478ae2de4Sgonzalobg  ; CHECK: st.release.cluster.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
30578ae2de4Sgonzalobg  store atomic i32 %c.add, ptr %c syncscope("cluster") seq_cst, align 4
30678ae2de4Sgonzalobg
30778ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
30878ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
30978ae2de4Sgonzalobg  %d.load = load atomic i64, ptr %d syncscope("cluster") seq_cst, align 8
31078ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
31178ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
31278ae2de4Sgonzalobg  ; CHECK: st.release.cluster.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
31378ae2de4Sgonzalobg  store atomic i64 %d.add, ptr %d syncscope("cluster") seq_cst, align 8
31478ae2de4Sgonzalobg
31578ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
31678ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
31778ae2de4Sgonzalobg  %e.load = load atomic float, ptr %e syncscope("cluster") seq_cst, align 4
31878ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
31978ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
32078ae2de4Sgonzalobg  ; CHECK: st.release.cluster.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
32178ae2de4Sgonzalobg  store atomic float %e.add, ptr %e syncscope("cluster") seq_cst, align 4
32278ae2de4Sgonzalobg
32378ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
32478ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
32578ae2de4Sgonzalobg  %f.load = load atomic double, ptr %e syncscope("cluster") seq_cst, align 8
32678ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
32778ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
32878ae2de4Sgonzalobg  ; CHECK: st.release.cluster.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
32978ae2de4Sgonzalobg  store atomic double %f.add, ptr %e syncscope("cluster") seq_cst, align 8
33078ae2de4Sgonzalobg
33178ae2de4Sgonzalobg  ret void
33278ae2de4Sgonzalobg}
33378ae2de4Sgonzalobg
33478ae2de4Sgonzalobg; CHECK-LABEL: generic_sc_volatile_cluster
33578ae2de4Sgonzalobgdefine void @generic_sc_volatile_cluster(ptr %a, ptr %b, ptr %c, ptr %d, ptr %e) local_unnamed_addr {
33678ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
33778ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
33878ae2de4Sgonzalobg  %a.load = load atomic volatile i8, ptr %a syncscope("cluster") seq_cst, align 1
33978ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
34078ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
34178ae2de4Sgonzalobg  ; CHECK: st.release.sys.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
34278ae2de4Sgonzalobg  store atomic volatile i8 %a.add, ptr %a syncscope("cluster") seq_cst, align 1
34378ae2de4Sgonzalobg
34478ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
34578ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
34678ae2de4Sgonzalobg  %b.load = load atomic volatile i16, ptr %b syncscope("cluster") seq_cst, align 2
34778ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
34878ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
34978ae2de4Sgonzalobg  ; CHECK: st.release.sys.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
35078ae2de4Sgonzalobg  store atomic volatile i16 %b.add, ptr %b syncscope("cluster") seq_cst, align 2
35178ae2de4Sgonzalobg
35278ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
35378ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
35478ae2de4Sgonzalobg  %c.load = load atomic volatile i32, ptr %c syncscope("cluster") seq_cst, align 4
35578ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
35678ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
35778ae2de4Sgonzalobg  ; CHECK: st.release.sys.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
35878ae2de4Sgonzalobg  store atomic volatile i32 %c.add, ptr %c syncscope("cluster") seq_cst, align 4
35978ae2de4Sgonzalobg
36078ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
36178ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
36278ae2de4Sgonzalobg  %d.load = load atomic volatile i64, ptr %d syncscope("cluster") seq_cst, align 8
36378ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
36478ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
36578ae2de4Sgonzalobg  ; CHECK: st.release.sys.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
36678ae2de4Sgonzalobg  store atomic volatile i64 %d.add, ptr %d syncscope("cluster") seq_cst, align 8
36778ae2de4Sgonzalobg
36878ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
36978ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
37078ae2de4Sgonzalobg  %e.load = load atomic volatile float, ptr %e syncscope("cluster") seq_cst, align 4
37178ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
37278ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
37378ae2de4Sgonzalobg  ; CHECK: st.release.sys.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
37478ae2de4Sgonzalobg  store atomic volatile float %e.add, ptr %e syncscope("cluster") seq_cst, align 4
37578ae2de4Sgonzalobg
37678ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
37778ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
37878ae2de4Sgonzalobg  %f.load = load atomic volatile double, ptr %e syncscope("cluster") seq_cst, align 8
37978ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
38078ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
38178ae2de4Sgonzalobg  ; CHECK: st.release.sys.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
38278ae2de4Sgonzalobg  store atomic volatile double %f.add, ptr %e syncscope("cluster") seq_cst, align 8
38378ae2de4Sgonzalobg
38478ae2de4Sgonzalobg  ret void
38578ae2de4Sgonzalobg}
38678ae2de4Sgonzalobg
38778ae2de4Sgonzalobg;; global statespace
38878ae2de4Sgonzalobg
38978ae2de4Sgonzalobg; CHECK-LABEL: global_unordered_cluster
39078ae2de4Sgonzalobgdefine void @global_unordered_cluster(ptr addrspace(1) %a, ptr addrspace(1) %b, ptr addrspace(1) %c, ptr addrspace(1) %d, ptr addrspace(1) %e) local_unnamed_addr {
39178ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.global.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
39278ae2de4Sgonzalobg  %a.load = load atomic i8, ptr addrspace(1) %a syncscope("cluster") unordered, align 1
39378ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
39478ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.global.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
39578ae2de4Sgonzalobg  store atomic i8 %a.add, ptr addrspace(1) %a syncscope("cluster") unordered, align 1
39678ae2de4Sgonzalobg
39778ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.global.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
39878ae2de4Sgonzalobg  %b.load = load atomic i16, ptr addrspace(1) %b syncscope("cluster") unordered, align 2
39978ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
40078ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.global.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
40178ae2de4Sgonzalobg  store atomic i16 %b.add, ptr addrspace(1) %b syncscope("cluster") unordered, align 2
40278ae2de4Sgonzalobg
40378ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.global.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
40478ae2de4Sgonzalobg  %c.load = load atomic i32, ptr addrspace(1) %c syncscope("cluster") unordered, align 4
40578ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
40678ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.global.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
40778ae2de4Sgonzalobg  store atomic i32 %c.add, ptr addrspace(1) %c syncscope("cluster") unordered, align 4
40878ae2de4Sgonzalobg
40978ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.global.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
41078ae2de4Sgonzalobg  %d.load = load atomic i64, ptr addrspace(1) %d syncscope("cluster") unordered, align 8
41178ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
41278ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.global.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
41378ae2de4Sgonzalobg  store atomic i64 %d.add, ptr addrspace(1) %d syncscope("cluster") unordered, align 8
41478ae2de4Sgonzalobg
41578ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.global.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
41678ae2de4Sgonzalobg  %e.load = load atomic float, ptr addrspace(1) %e syncscope("cluster") unordered, align 4
41778ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
41878ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.global.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
41978ae2de4Sgonzalobg  store atomic float %e.add, ptr addrspace(1) %e syncscope("cluster") unordered, align 4
42078ae2de4Sgonzalobg
42178ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.global.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
42278ae2de4Sgonzalobg  %f.load = load atomic double, ptr addrspace(1) %e syncscope("cluster") unordered, align 8
42378ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
42478ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.global.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
42578ae2de4Sgonzalobg  store atomic double %f.add, ptr addrspace(1) %e syncscope("cluster") unordered, align 8
42678ae2de4Sgonzalobg
42778ae2de4Sgonzalobg  ret void
42878ae2de4Sgonzalobg}
42978ae2de4Sgonzalobg
43078ae2de4Sgonzalobg; CHECK-LABEL: global_unordered_volatile_cluster
43178ae2de4Sgonzalobgdefine void @global_unordered_volatile_cluster(ptr addrspace(1) %a, ptr addrspace(1) %b, ptr addrspace(1) %c, ptr addrspace(1) %d, ptr addrspace(1) %e) local_unnamed_addr {
43278ae2de4Sgonzalobg  ; CHECK: ld.volatile.global.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
43378ae2de4Sgonzalobg  %a.load = load atomic volatile i8, ptr addrspace(1) %a syncscope("cluster") unordered, align 1
43478ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
43578ae2de4Sgonzalobg  ; CHECK: st.volatile.global.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
43678ae2de4Sgonzalobg  store atomic volatile i8 %a.add, ptr addrspace(1) %a syncscope("cluster") unordered, align 1
43778ae2de4Sgonzalobg
43878ae2de4Sgonzalobg  ; CHECK: ld.volatile.global.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
43978ae2de4Sgonzalobg  %b.load = load atomic volatile i16, ptr addrspace(1) %b syncscope("cluster") unordered, align 2
44078ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
44178ae2de4Sgonzalobg  ; CHECK: st.volatile.global.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
44278ae2de4Sgonzalobg  store atomic volatile i16 %b.add, ptr addrspace(1) %b syncscope("cluster") unordered, align 2
44378ae2de4Sgonzalobg
44478ae2de4Sgonzalobg  ; CHECK: ld.volatile.global.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
44578ae2de4Sgonzalobg  %c.load = load atomic volatile i32, ptr addrspace(1) %c syncscope("cluster") unordered, align 4
44678ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
44778ae2de4Sgonzalobg  ; CHECK: st.volatile.global.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
44878ae2de4Sgonzalobg  store atomic volatile i32 %c.add, ptr addrspace(1) %c syncscope("cluster") unordered, align 4
44978ae2de4Sgonzalobg
45078ae2de4Sgonzalobg  ; CHECK: ld.volatile.global.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
45178ae2de4Sgonzalobg  %d.load = load atomic volatile i64, ptr addrspace(1) %d syncscope("cluster") unordered, align 8
45278ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
45378ae2de4Sgonzalobg  ; CHECK: st.volatile.global.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
45478ae2de4Sgonzalobg  store atomic volatile i64 %d.add, ptr addrspace(1) %d syncscope("cluster") unordered, align 8
45578ae2de4Sgonzalobg
45678ae2de4Sgonzalobg  ; CHECK: ld.volatile.global.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
45778ae2de4Sgonzalobg  %e.load = load atomic volatile float, ptr addrspace(1) %e syncscope("cluster") unordered, align 4
45878ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
45978ae2de4Sgonzalobg  ; CHECK: st.volatile.global.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
46078ae2de4Sgonzalobg  store atomic volatile float %e.add, ptr addrspace(1) %e syncscope("cluster") unordered, align 4
46178ae2de4Sgonzalobg
46278ae2de4Sgonzalobg  ; CHECK: ld.volatile.global.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
46378ae2de4Sgonzalobg  %f.load = load atomic volatile double, ptr addrspace(1) %e syncscope("cluster") unordered, align 8
46478ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
46578ae2de4Sgonzalobg  ; CHECK: st.volatile.global.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
46678ae2de4Sgonzalobg  store atomic volatile double %f.add, ptr addrspace(1) %e syncscope("cluster") unordered, align 8
46778ae2de4Sgonzalobg
46878ae2de4Sgonzalobg  ret void
46978ae2de4Sgonzalobg}
47078ae2de4Sgonzalobg
47178ae2de4Sgonzalobg; CHECK-LABEL: global_monotonic_cluster
47278ae2de4Sgonzalobgdefine void @global_monotonic_cluster(ptr addrspace(1) %a, ptr addrspace(1) %b, ptr addrspace(1) %c, ptr addrspace(1) %d, ptr addrspace(1) %e) local_unnamed_addr {
47378ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.global.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
47478ae2de4Sgonzalobg  %a.load = load atomic i8, ptr addrspace(1) %a syncscope("cluster") monotonic, align 1
47578ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
47678ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.global.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
47778ae2de4Sgonzalobg  store atomic i8 %a.add, ptr addrspace(1) %a syncscope("cluster") monotonic, align 1
47878ae2de4Sgonzalobg
47978ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.global.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
48078ae2de4Sgonzalobg  %b.load = load atomic i16, ptr addrspace(1) %b syncscope("cluster") monotonic, align 2
48178ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
48278ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.global.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
48378ae2de4Sgonzalobg  store atomic i16 %b.add, ptr addrspace(1) %b syncscope("cluster") monotonic, align 2
48478ae2de4Sgonzalobg
48578ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.global.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
48678ae2de4Sgonzalobg  %c.load = load atomic i32, ptr addrspace(1) %c syncscope("cluster") monotonic, align 4
48778ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
48878ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.global.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
48978ae2de4Sgonzalobg  store atomic i32 %c.add, ptr addrspace(1) %c syncscope("cluster") monotonic, align 4
49078ae2de4Sgonzalobg
49178ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.global.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
49278ae2de4Sgonzalobg  %d.load = load atomic i64, ptr addrspace(1) %d syncscope("cluster") monotonic, align 8
49378ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
49478ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.global.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
49578ae2de4Sgonzalobg  store atomic i64 %d.add, ptr addrspace(1) %d syncscope("cluster") monotonic, align 8
49678ae2de4Sgonzalobg
49778ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.global.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
49878ae2de4Sgonzalobg  %e.load = load atomic float, ptr addrspace(1) %e syncscope("cluster") monotonic, align 4
49978ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
50078ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.global.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
50178ae2de4Sgonzalobg  store atomic float %e.add, ptr addrspace(1) %e syncscope("cluster") monotonic, align 4
50278ae2de4Sgonzalobg
50378ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.global.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
50478ae2de4Sgonzalobg  %f.load = load atomic double, ptr addrspace(1) %e syncscope("cluster") monotonic, align 8
50578ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
50678ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.global.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
50778ae2de4Sgonzalobg  store atomic double %f.add, ptr addrspace(1) %e syncscope("cluster") monotonic, align 8
50878ae2de4Sgonzalobg
50978ae2de4Sgonzalobg  ret void
51078ae2de4Sgonzalobg}
51178ae2de4Sgonzalobg
51278ae2de4Sgonzalobg; CHECK-LABEL: global_monotonic_volatile_cluster
51378ae2de4Sgonzalobgdefine void @global_monotonic_volatile_cluster(ptr addrspace(1) %a, ptr addrspace(1) %b, ptr addrspace(1) %c, ptr addrspace(1) %d, ptr addrspace(1) %e) local_unnamed_addr {
51478ae2de4Sgonzalobg  ; CHECK: ld.volatile.global.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
51578ae2de4Sgonzalobg  %a.load = load atomic volatile i8, ptr addrspace(1) %a syncscope("cluster") monotonic, align 1
51678ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
51778ae2de4Sgonzalobg  ; CHECK: st.volatile.global.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
51878ae2de4Sgonzalobg  store atomic volatile i8 %a.add, ptr addrspace(1) %a syncscope("cluster") monotonic, align 1
51978ae2de4Sgonzalobg
52078ae2de4Sgonzalobg  ; CHECK: ld.volatile.global.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
52178ae2de4Sgonzalobg  %b.load = load atomic volatile i16, ptr addrspace(1) %b syncscope("cluster") monotonic, align 2
52278ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
52378ae2de4Sgonzalobg  ; CHECK: st.volatile.global.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
52478ae2de4Sgonzalobg  store atomic volatile i16 %b.add, ptr addrspace(1) %b syncscope("cluster") monotonic, align 2
52578ae2de4Sgonzalobg
52678ae2de4Sgonzalobg  ; CHECK: ld.volatile.global.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
52778ae2de4Sgonzalobg  %c.load = load atomic volatile i32, ptr addrspace(1) %c syncscope("cluster") monotonic, align 4
52878ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
52978ae2de4Sgonzalobg  ; CHECK: st.volatile.global.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
53078ae2de4Sgonzalobg  store atomic volatile i32 %c.add, ptr addrspace(1) %c syncscope("cluster") monotonic, align 4
53178ae2de4Sgonzalobg
53278ae2de4Sgonzalobg  ; CHECK: ld.volatile.global.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
53378ae2de4Sgonzalobg  %d.load = load atomic volatile i64, ptr addrspace(1) %d syncscope("cluster") monotonic, align 8
53478ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
53578ae2de4Sgonzalobg  ; CHECK: st.volatile.global.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
53678ae2de4Sgonzalobg  store atomic volatile i64 %d.add, ptr addrspace(1) %d syncscope("cluster") monotonic, align 8
53778ae2de4Sgonzalobg
53878ae2de4Sgonzalobg  ; CHECK: ld.volatile.global.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
53978ae2de4Sgonzalobg  %e.load = load atomic volatile float, ptr addrspace(1) %e syncscope("cluster") monotonic, align 4
54078ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
54178ae2de4Sgonzalobg  ; CHECK: st.volatile.global.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
54278ae2de4Sgonzalobg  store atomic volatile float %e.add, ptr addrspace(1) %e syncscope("cluster") monotonic, align 4
54378ae2de4Sgonzalobg
54478ae2de4Sgonzalobg  ; CHECK: ld.volatile.global.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
54578ae2de4Sgonzalobg  %f.load = load atomic volatile double, ptr addrspace(1) %e syncscope("cluster") monotonic, align 8
54678ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
54778ae2de4Sgonzalobg  ; CHECK: st.volatile.global.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
54878ae2de4Sgonzalobg  store atomic volatile double %f.add, ptr addrspace(1) %e syncscope("cluster") monotonic, align 8
54978ae2de4Sgonzalobg
55078ae2de4Sgonzalobg  ret void
55178ae2de4Sgonzalobg}
55278ae2de4Sgonzalobg
55378ae2de4Sgonzalobg; CHECK-LABEL: global_acq_rel_cluster
55478ae2de4Sgonzalobgdefine void @global_acq_rel_cluster(ptr addrspace(1) %a, ptr addrspace(1) %b, ptr addrspace(1) %c, ptr addrspace(1) %d, ptr addrspace(1) %e) local_unnamed_addr {
55578ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.global.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
55678ae2de4Sgonzalobg  %a.load = load atomic i8, ptr addrspace(1) %a syncscope("cluster") acquire, align 1
55778ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
55878ae2de4Sgonzalobg  ; CHECK: st.release.cluster.global.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
55978ae2de4Sgonzalobg  store atomic i8 %a.add, ptr addrspace(1) %a syncscope("cluster") release, align 1
56078ae2de4Sgonzalobg
56178ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.global.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
56278ae2de4Sgonzalobg  %b.load = load atomic i16, ptr addrspace(1) %b syncscope("cluster") acquire, align 2
56378ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
56478ae2de4Sgonzalobg  ; CHECK: st.release.cluster.global.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
56578ae2de4Sgonzalobg  store atomic i16 %b.add, ptr addrspace(1) %b syncscope("cluster") release, align 2
56678ae2de4Sgonzalobg
56778ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.global.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
56878ae2de4Sgonzalobg  %c.load = load atomic i32, ptr addrspace(1) %c syncscope("cluster") acquire, align 4
56978ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
57078ae2de4Sgonzalobg  ; CHECK: st.release.cluster.global.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
57178ae2de4Sgonzalobg  store atomic i32 %c.add, ptr addrspace(1) %c syncscope("cluster") release, align 4
57278ae2de4Sgonzalobg
57378ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.global.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
57478ae2de4Sgonzalobg  %d.load = load atomic i64, ptr addrspace(1) %d syncscope("cluster") acquire, align 8
57578ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
57678ae2de4Sgonzalobg  ; CHECK: st.release.cluster.global.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
57778ae2de4Sgonzalobg  store atomic i64 %d.add, ptr addrspace(1) %d syncscope("cluster") release, align 8
57878ae2de4Sgonzalobg
57978ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.global.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
58078ae2de4Sgonzalobg  %e.load = load atomic float, ptr addrspace(1) %e syncscope("cluster") acquire, align 4
58178ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
58278ae2de4Sgonzalobg  ; CHECK: st.release.cluster.global.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
58378ae2de4Sgonzalobg  store atomic float %e.add, ptr addrspace(1) %e syncscope("cluster") release, align 4
58478ae2de4Sgonzalobg
58578ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.global.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
58678ae2de4Sgonzalobg  %f.load = load atomic double, ptr addrspace(1) %e syncscope("cluster") acquire, align 8
58778ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
58878ae2de4Sgonzalobg  ; CHECK: st.release.cluster.global.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
58978ae2de4Sgonzalobg  store atomic double %f.add, ptr addrspace(1) %e syncscope("cluster") release, align 8
59078ae2de4Sgonzalobg
59178ae2de4Sgonzalobg  ret void
59278ae2de4Sgonzalobg}
59378ae2de4Sgonzalobg
59478ae2de4Sgonzalobg; CHECK-LABEL: global_acq_rel_volatile_cluster
59578ae2de4Sgonzalobgdefine void @global_acq_rel_volatile_cluster(ptr addrspace(1) %a, ptr addrspace(1) %b, ptr addrspace(1) %c, ptr addrspace(1) %d, ptr addrspace(1) %e) local_unnamed_addr {
59678ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.global.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
59778ae2de4Sgonzalobg  %a.load = load atomic volatile i8, ptr addrspace(1) %a syncscope("cluster") acquire, align 1
59878ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
59978ae2de4Sgonzalobg  ; CHECK: st.release.sys.global.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
60078ae2de4Sgonzalobg  store atomic volatile i8 %a.add, ptr addrspace(1) %a syncscope("cluster") release, align 1
60178ae2de4Sgonzalobg
60278ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.global.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
60378ae2de4Sgonzalobg  %b.load = load atomic volatile i16, ptr addrspace(1) %b syncscope("cluster") acquire, align 2
60478ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
60578ae2de4Sgonzalobg  ; CHECK: st.release.sys.global.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
60678ae2de4Sgonzalobg  store atomic volatile i16 %b.add, ptr addrspace(1) %b syncscope("cluster") release, align 2
60778ae2de4Sgonzalobg
60878ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.global.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
60978ae2de4Sgonzalobg  %c.load = load atomic volatile i32, ptr addrspace(1) %c syncscope("cluster") acquire, align 4
61078ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
61178ae2de4Sgonzalobg  ; CHECK: st.release.sys.global.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
61278ae2de4Sgonzalobg  store atomic volatile i32 %c.add, ptr addrspace(1) %c syncscope("cluster") release, align 4
61378ae2de4Sgonzalobg
61478ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.global.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
61578ae2de4Sgonzalobg  %d.load = load atomic volatile i64, ptr addrspace(1) %d syncscope("cluster") acquire, align 8
61678ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
61778ae2de4Sgonzalobg  ; CHECK: st.release.sys.global.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
61878ae2de4Sgonzalobg  store atomic volatile i64 %d.add, ptr addrspace(1) %d syncscope("cluster") release, align 8
61978ae2de4Sgonzalobg
62078ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.global.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
62178ae2de4Sgonzalobg  %e.load = load atomic volatile float, ptr addrspace(1) %e syncscope("cluster") acquire, align 4
62278ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
62378ae2de4Sgonzalobg  ; CHECK: st.release.sys.global.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
62478ae2de4Sgonzalobg  store atomic volatile float %e.add, ptr addrspace(1) %e syncscope("cluster") release, align 4
62578ae2de4Sgonzalobg
62678ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.global.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
62778ae2de4Sgonzalobg  %f.load = load atomic volatile double, ptr addrspace(1) %e syncscope("cluster") acquire, align 8
62878ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
62978ae2de4Sgonzalobg  ; CHECK: st.release.sys.global.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
63078ae2de4Sgonzalobg  store atomic volatile double %f.add, ptr addrspace(1) %e syncscope("cluster") release, align 8
63178ae2de4Sgonzalobg
63278ae2de4Sgonzalobg  ret void
63378ae2de4Sgonzalobg}
63478ae2de4Sgonzalobg
63578ae2de4Sgonzalobg; CHECK-LABEL: global_seq_cst_cluster
63678ae2de4Sgonzalobgdefine void @global_seq_cst_cluster(ptr addrspace(1) %a, ptr addrspace(1) %b, ptr addrspace(1) %c, ptr addrspace(1) %d, ptr addrspace(1) %e) local_unnamed_addr {
63778ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
63878ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.global.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
63978ae2de4Sgonzalobg  %a.load = load atomic i8, ptr addrspace(1) %a syncscope("cluster") seq_cst, align 1
64078ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
64178ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
64278ae2de4Sgonzalobg  ; CHECK: st.release.cluster.global.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
64378ae2de4Sgonzalobg  store atomic i8 %a.add, ptr addrspace(1) %a syncscope("cluster") seq_cst, align 1
64478ae2de4Sgonzalobg
64578ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
64678ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.global.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
64778ae2de4Sgonzalobg  %b.load = load atomic i16, ptr addrspace(1) %b syncscope("cluster") seq_cst, align 2
64878ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
64978ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
65078ae2de4Sgonzalobg  ; CHECK: st.release.cluster.global.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
65178ae2de4Sgonzalobg  store atomic i16 %b.add, ptr addrspace(1) %b syncscope("cluster") seq_cst, align 2
65278ae2de4Sgonzalobg
65378ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
65478ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.global.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
65578ae2de4Sgonzalobg  %c.load = load atomic i32, ptr addrspace(1) %c syncscope("cluster") seq_cst, align 4
65678ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
65778ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
65878ae2de4Sgonzalobg  ; CHECK: st.release.cluster.global.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
65978ae2de4Sgonzalobg  store atomic i32 %c.add, ptr addrspace(1) %c syncscope("cluster") seq_cst, align 4
66078ae2de4Sgonzalobg
66178ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
66278ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.global.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
66378ae2de4Sgonzalobg  %d.load = load atomic i64, ptr addrspace(1) %d syncscope("cluster") seq_cst, align 8
66478ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
66578ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
66678ae2de4Sgonzalobg  ; CHECK: st.release.cluster.global.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
66778ae2de4Sgonzalobg  store atomic i64 %d.add, ptr addrspace(1) %d syncscope("cluster") seq_cst, align 8
66878ae2de4Sgonzalobg
66978ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
67078ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.global.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
67178ae2de4Sgonzalobg  %e.load = load atomic float, ptr addrspace(1) %e syncscope("cluster") seq_cst, align 4
67278ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
67378ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
67478ae2de4Sgonzalobg  ; CHECK: st.release.cluster.global.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
67578ae2de4Sgonzalobg  store atomic float %e.add, ptr addrspace(1) %e syncscope("cluster") seq_cst, align 4
67678ae2de4Sgonzalobg
67778ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
67878ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.global.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
67978ae2de4Sgonzalobg  %f.load = load atomic double, ptr addrspace(1) %e syncscope("cluster") seq_cst, align 8
68078ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
68178ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
68278ae2de4Sgonzalobg  ; CHECK: st.release.cluster.global.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
68378ae2de4Sgonzalobg  store atomic double %f.add, ptr addrspace(1) %e syncscope("cluster") seq_cst, align 8
68478ae2de4Sgonzalobg
68578ae2de4Sgonzalobg  ret void
68678ae2de4Sgonzalobg}
68778ae2de4Sgonzalobg
68878ae2de4Sgonzalobg; CHECK-LABEL: global_seq_cst_volatile_cluster
68978ae2de4Sgonzalobgdefine void @global_seq_cst_volatile_cluster(ptr addrspace(1) %a, ptr addrspace(1) %b, ptr addrspace(1) %c, ptr addrspace(1) %d, ptr addrspace(1) %e) local_unnamed_addr {
69078ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
69178ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.global.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
69278ae2de4Sgonzalobg  %a.load = load atomic volatile i8, ptr addrspace(1) %a syncscope("cluster") seq_cst, align 1
69378ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
69478ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
69578ae2de4Sgonzalobg  ; CHECK: st.release.sys.global.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
69678ae2de4Sgonzalobg  store atomic volatile i8 %a.add, ptr addrspace(1) %a syncscope("cluster") seq_cst, align 1
69778ae2de4Sgonzalobg
69878ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
69978ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.global.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
70078ae2de4Sgonzalobg  %b.load = load atomic volatile i16, ptr addrspace(1) %b syncscope("cluster") seq_cst, align 2
70178ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
70278ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
70378ae2de4Sgonzalobg  ; CHECK: st.release.sys.global.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
70478ae2de4Sgonzalobg  store atomic volatile i16 %b.add, ptr addrspace(1) %b syncscope("cluster") seq_cst, align 2
70578ae2de4Sgonzalobg
70678ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
70778ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.global.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
70878ae2de4Sgonzalobg  %c.load = load atomic volatile i32, ptr addrspace(1) %c syncscope("cluster") seq_cst, align 4
70978ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
71078ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
71178ae2de4Sgonzalobg  ; CHECK: st.release.sys.global.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
71278ae2de4Sgonzalobg  store atomic volatile i32 %c.add, ptr addrspace(1) %c syncscope("cluster") seq_cst, align 4
71378ae2de4Sgonzalobg
71478ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
71578ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.global.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
71678ae2de4Sgonzalobg  %d.load = load atomic volatile i64, ptr addrspace(1) %d syncscope("cluster") seq_cst, align 8
71778ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
71878ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
71978ae2de4Sgonzalobg  ; CHECK: st.release.sys.global.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
72078ae2de4Sgonzalobg  store atomic volatile i64 %d.add, ptr addrspace(1) %d syncscope("cluster") seq_cst, align 8
72178ae2de4Sgonzalobg
72278ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
72378ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.global.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
72478ae2de4Sgonzalobg  %e.load = load atomic volatile float, ptr addrspace(1) %e syncscope("cluster") seq_cst, align 4
72578ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
72678ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
72778ae2de4Sgonzalobg  ; CHECK: st.release.sys.global.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
72878ae2de4Sgonzalobg  store atomic volatile float %e.add, ptr addrspace(1) %e syncscope("cluster") seq_cst, align 4
72978ae2de4Sgonzalobg
73078ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
73178ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.global.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
73278ae2de4Sgonzalobg  %f.load = load atomic volatile double, ptr addrspace(1) %e syncscope("cluster") seq_cst, align 8
73378ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
73478ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
73578ae2de4Sgonzalobg  ; CHECK: st.release.sys.global.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
73678ae2de4Sgonzalobg  store atomic volatile double %f.add, ptr addrspace(1) %e syncscope("cluster") seq_cst, align 8
73778ae2de4Sgonzalobg
73878ae2de4Sgonzalobg  ret void
73978ae2de4Sgonzalobg}
74078ae2de4Sgonzalobg
74178ae2de4Sgonzalobg;; shared
74278ae2de4Sgonzalobg
74378ae2de4Sgonzalobg; CHECK-LABEL: shared_unordered_cluster
74478ae2de4Sgonzalobgdefine void @shared_unordered_cluster(ptr addrspace(3) %a, ptr addrspace(3) %b, ptr addrspace(3) %c, ptr addrspace(3) %d, ptr addrspace(3) %e) local_unnamed_addr {
74578ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.shared.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
74678ae2de4Sgonzalobg  %a.load = load atomic i8, ptr addrspace(3) %a syncscope("cluster") unordered, align 1
74778ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
74878ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.shared.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
74978ae2de4Sgonzalobg  store atomic i8 %a.add, ptr addrspace(3) %a syncscope("cluster") unordered, align 1
75078ae2de4Sgonzalobg
75178ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.shared.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
75278ae2de4Sgonzalobg  %b.load = load atomic i16, ptr addrspace(3) %b syncscope("cluster") unordered, align 2
75378ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
75478ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.shared.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
75578ae2de4Sgonzalobg  store atomic i16 %b.add, ptr addrspace(3) %b syncscope("cluster") unordered, align 2
75678ae2de4Sgonzalobg
75778ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.shared.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
75878ae2de4Sgonzalobg  %c.load = load atomic i32, ptr addrspace(3) %c syncscope("cluster") unordered, align 4
75978ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
76078ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.shared.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
76178ae2de4Sgonzalobg  store atomic i32 %c.add, ptr addrspace(3) %c syncscope("cluster") unordered, align 4
76278ae2de4Sgonzalobg
76378ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.shared.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
76478ae2de4Sgonzalobg  %d.load = load atomic i64, ptr addrspace(3) %d syncscope("cluster") unordered, align 8
76578ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
76678ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.shared.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
76778ae2de4Sgonzalobg  store atomic i64 %d.add, ptr addrspace(3) %d syncscope("cluster") unordered, align 8
76878ae2de4Sgonzalobg
76978ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.shared.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
77078ae2de4Sgonzalobg  %e.load = load atomic float, ptr addrspace(3) %e syncscope("cluster") unordered, align 4
77178ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
77278ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.shared.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
77378ae2de4Sgonzalobg  store atomic float %e.add, ptr addrspace(3) %e syncscope("cluster") unordered, align 4
77478ae2de4Sgonzalobg
77578ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.shared.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
77678ae2de4Sgonzalobg  %f.load = load atomic double, ptr addrspace(3) %e syncscope("cluster") unordered, align 8
77778ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
77878ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.shared.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
77978ae2de4Sgonzalobg  store atomic double %f.add, ptr addrspace(3) %e syncscope("cluster") unordered, align 8
78078ae2de4Sgonzalobg
78178ae2de4Sgonzalobg  ret void
78278ae2de4Sgonzalobg}
78378ae2de4Sgonzalobg
78478ae2de4Sgonzalobg; CHECK-LABEL: shared_unordered_volatile_cluster
78578ae2de4Sgonzalobgdefine void @shared_unordered_volatile_cluster(ptr addrspace(3) %a, ptr addrspace(3) %b, ptr addrspace(3) %c, ptr addrspace(3) %d, ptr addrspace(3) %e) local_unnamed_addr {
78678ae2de4Sgonzalobg  ; CHECK: ld.volatile.shared.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
78778ae2de4Sgonzalobg  %a.load = load atomic volatile i8, ptr addrspace(3) %a syncscope("cluster") unordered, align 1
78878ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
78978ae2de4Sgonzalobg  ; CHECK: st.volatile.shared.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
79078ae2de4Sgonzalobg  store atomic volatile i8 %a.add, ptr addrspace(3) %a syncscope("cluster") unordered, align 1
79178ae2de4Sgonzalobg
79278ae2de4Sgonzalobg  ; CHECK: ld.volatile.shared.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
79378ae2de4Sgonzalobg  %b.load = load atomic volatile i16, ptr addrspace(3) %b syncscope("cluster") unordered, align 2
79478ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
79578ae2de4Sgonzalobg  ; CHECK: st.volatile.shared.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
79678ae2de4Sgonzalobg  store atomic volatile i16 %b.add, ptr addrspace(3) %b syncscope("cluster") unordered, align 2
79778ae2de4Sgonzalobg
79878ae2de4Sgonzalobg  ; CHECK: ld.volatile.shared.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
79978ae2de4Sgonzalobg  %c.load = load atomic volatile i32, ptr addrspace(3) %c syncscope("cluster") unordered, align 4
80078ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
80178ae2de4Sgonzalobg  ; CHECK: st.volatile.shared.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
80278ae2de4Sgonzalobg  store atomic volatile i32 %c.add, ptr addrspace(3) %c syncscope("cluster") unordered, align 4
80378ae2de4Sgonzalobg
80478ae2de4Sgonzalobg  ; CHECK: ld.volatile.shared.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
80578ae2de4Sgonzalobg  %d.load = load atomic volatile i64, ptr addrspace(3) %d syncscope("cluster") unordered, align 8
80678ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
80778ae2de4Sgonzalobg  ; CHECK: st.volatile.shared.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
80878ae2de4Sgonzalobg  store atomic volatile i64 %d.add, ptr addrspace(3) %d syncscope("cluster") unordered, align 8
80978ae2de4Sgonzalobg
81078ae2de4Sgonzalobg  ; CHECK: ld.volatile.shared.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
81178ae2de4Sgonzalobg  %e.load = load atomic volatile float, ptr addrspace(3) %e syncscope("cluster") unordered, align 4
81278ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
81378ae2de4Sgonzalobg  ; CHECK: st.volatile.shared.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
81478ae2de4Sgonzalobg  store atomic volatile float %e.add, ptr addrspace(3) %e syncscope("cluster") unordered, align 4
81578ae2de4Sgonzalobg
81678ae2de4Sgonzalobg  ; CHECK: ld.volatile.shared.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
81778ae2de4Sgonzalobg  %f.load = load atomic volatile double, ptr addrspace(3) %e syncscope("cluster") unordered, align 8
81878ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
81978ae2de4Sgonzalobg  ; CHECK: st.volatile.shared.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
82078ae2de4Sgonzalobg  store atomic volatile double %f.add, ptr addrspace(3) %e syncscope("cluster") unordered, align 8
82178ae2de4Sgonzalobg
82278ae2de4Sgonzalobg  ret void
82378ae2de4Sgonzalobg}
82478ae2de4Sgonzalobg
82578ae2de4Sgonzalobg; CHECK-LABEL: shared_monotonic_cluster
82678ae2de4Sgonzalobgdefine void @shared_monotonic_cluster(ptr addrspace(3) %a, ptr addrspace(3) %b, ptr addrspace(3) %c, ptr addrspace(3) %d, ptr addrspace(3) %e) local_unnamed_addr {
82778ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.shared.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
82878ae2de4Sgonzalobg  %a.load = load atomic i8, ptr addrspace(3) %a syncscope("cluster") monotonic, align 1
82978ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
83078ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.shared.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
83178ae2de4Sgonzalobg  store atomic i8 %a.add, ptr addrspace(3) %a syncscope("cluster") monotonic, align 1
83278ae2de4Sgonzalobg
83378ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.shared.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
83478ae2de4Sgonzalobg  %b.load = load atomic i16, ptr addrspace(3) %b syncscope("cluster") monotonic, align 2
83578ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
83678ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.shared.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
83778ae2de4Sgonzalobg  store atomic i16 %b.add, ptr addrspace(3) %b syncscope("cluster") monotonic, align 2
83878ae2de4Sgonzalobg
83978ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.shared.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
84078ae2de4Sgonzalobg  %c.load = load atomic i32, ptr addrspace(3) %c syncscope("cluster") monotonic, align 4
84178ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
84278ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.shared.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
84378ae2de4Sgonzalobg  store atomic i32 %c.add, ptr addrspace(3) %c syncscope("cluster") monotonic, align 4
84478ae2de4Sgonzalobg
84578ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.shared.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
84678ae2de4Sgonzalobg  %d.load = load atomic i64, ptr addrspace(3) %d syncscope("cluster") monotonic, align 8
84778ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
84878ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.shared.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
84978ae2de4Sgonzalobg  store atomic i64 %d.add, ptr addrspace(3) %d syncscope("cluster") monotonic, align 8
85078ae2de4Sgonzalobg
85178ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.shared.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
85278ae2de4Sgonzalobg  %e.load = load atomic float, ptr addrspace(3) %e syncscope("cluster") monotonic, align 4
85378ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
85478ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.shared.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
85578ae2de4Sgonzalobg  store atomic float %e.add, ptr addrspace(3) %e syncscope("cluster") monotonic, align 4
85678ae2de4Sgonzalobg
85778ae2de4Sgonzalobg  ; CHECK: ld.relaxed.cluster.shared.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
85878ae2de4Sgonzalobg  %f.load = load atomic double, ptr addrspace(3) %e syncscope("cluster") monotonic, align 8
85978ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
86078ae2de4Sgonzalobg  ; CHECK: st.relaxed.cluster.shared.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
86178ae2de4Sgonzalobg  store atomic double %f.add, ptr addrspace(3) %e syncscope("cluster") monotonic, align 8
86278ae2de4Sgonzalobg
86378ae2de4Sgonzalobg  ret void
86478ae2de4Sgonzalobg}
86578ae2de4Sgonzalobg
86678ae2de4Sgonzalobg; CHECK-LABEL: shared_monotonic_volatile_cluster
86778ae2de4Sgonzalobgdefine void @shared_monotonic_volatile_cluster(ptr addrspace(3) %a, ptr addrspace(3) %b, ptr addrspace(3) %c, ptr addrspace(3) %d, ptr addrspace(3) %e) local_unnamed_addr {
86878ae2de4Sgonzalobg  ; CHECK: ld.volatile.shared.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
86978ae2de4Sgonzalobg  %a.load = load atomic volatile i8, ptr addrspace(3) %a syncscope("cluster") monotonic, align 1
87078ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
87178ae2de4Sgonzalobg  ; CHECK: st.volatile.shared.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
87278ae2de4Sgonzalobg  store atomic volatile i8 %a.add, ptr addrspace(3) %a syncscope("cluster") monotonic, align 1
87378ae2de4Sgonzalobg
87478ae2de4Sgonzalobg  ; CHECK: ld.volatile.shared.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
87578ae2de4Sgonzalobg  %b.load = load atomic volatile i16, ptr addrspace(3) %b syncscope("cluster") monotonic, align 2
87678ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
87778ae2de4Sgonzalobg  ; CHECK: st.volatile.shared.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
87878ae2de4Sgonzalobg  store atomic volatile i16 %b.add, ptr addrspace(3) %b syncscope("cluster") monotonic, align 2
87978ae2de4Sgonzalobg
88078ae2de4Sgonzalobg  ; CHECK: ld.volatile.shared.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
88178ae2de4Sgonzalobg  %c.load = load atomic volatile i32, ptr addrspace(3) %c syncscope("cluster") monotonic, align 4
88278ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
88378ae2de4Sgonzalobg  ; CHECK: st.volatile.shared.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
88478ae2de4Sgonzalobg  store atomic volatile i32 %c.add, ptr addrspace(3) %c syncscope("cluster") monotonic, align 4
88578ae2de4Sgonzalobg
88678ae2de4Sgonzalobg  ; CHECK: ld.volatile.shared.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
88778ae2de4Sgonzalobg  %d.load = load atomic volatile i64, ptr addrspace(3) %d syncscope("cluster") monotonic, align 8
88878ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
88978ae2de4Sgonzalobg  ; CHECK: st.volatile.shared.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
89078ae2de4Sgonzalobg  store atomic volatile i64 %d.add, ptr addrspace(3) %d syncscope("cluster") monotonic, align 8
89178ae2de4Sgonzalobg
89278ae2de4Sgonzalobg  ; CHECK: ld.volatile.shared.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
89378ae2de4Sgonzalobg  %e.load = load atomic volatile float, ptr addrspace(3) %e syncscope("cluster") monotonic, align 4
89478ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
89578ae2de4Sgonzalobg  ; CHECK: st.volatile.shared.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
89678ae2de4Sgonzalobg  store atomic volatile float %e.add, ptr addrspace(3) %e syncscope("cluster") monotonic, align 4
89778ae2de4Sgonzalobg
89878ae2de4Sgonzalobg  ; CHECK: ld.volatile.shared.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
89978ae2de4Sgonzalobg  %f.load = load atomic volatile double, ptr addrspace(3) %e syncscope("cluster") monotonic, align 8
90078ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
90178ae2de4Sgonzalobg  ; CHECK: st.volatile.shared.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
90278ae2de4Sgonzalobg  store atomic volatile double %f.add, ptr addrspace(3) %e syncscope("cluster") monotonic, align 8
90378ae2de4Sgonzalobg
90478ae2de4Sgonzalobg  ret void
90578ae2de4Sgonzalobg}
90678ae2de4Sgonzalobg
90778ae2de4Sgonzalobg; CHECK-LABEL: shared_acq_rel_cluster
90878ae2de4Sgonzalobgdefine void @shared_acq_rel_cluster(ptr addrspace(3) %a, ptr addrspace(3) %b, ptr addrspace(3) %c, ptr addrspace(3) %d, ptr addrspace(3) %e) local_unnamed_addr {
90978ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.shared.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
91078ae2de4Sgonzalobg  %a.load = load atomic i8, ptr addrspace(3) %a syncscope("cluster") acquire, align 1
91178ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
91278ae2de4Sgonzalobg  ; CHECK: st.release.cluster.shared.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
91378ae2de4Sgonzalobg  store atomic i8 %a.add, ptr addrspace(3) %a syncscope("cluster") release, align 1
91478ae2de4Sgonzalobg
91578ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.shared.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
91678ae2de4Sgonzalobg  %b.load = load atomic i16, ptr addrspace(3) %b syncscope("cluster") acquire, align 2
91778ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
91878ae2de4Sgonzalobg  ; CHECK: st.release.cluster.shared.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
91978ae2de4Sgonzalobg  store atomic i16 %b.add, ptr addrspace(3) %b syncscope("cluster") release, align 2
92078ae2de4Sgonzalobg
92178ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.shared.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
92278ae2de4Sgonzalobg  %c.load = load atomic i32, ptr addrspace(3) %c syncscope("cluster") acquire, align 4
92378ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
92478ae2de4Sgonzalobg  ; CHECK: st.release.cluster.shared.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
92578ae2de4Sgonzalobg  store atomic i32 %c.add, ptr addrspace(3) %c syncscope("cluster") release, align 4
92678ae2de4Sgonzalobg
92778ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.shared.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
92878ae2de4Sgonzalobg  %d.load = load atomic i64, ptr addrspace(3) %d syncscope("cluster") acquire, align 8
92978ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
93078ae2de4Sgonzalobg  ; CHECK: st.release.cluster.shared.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
93178ae2de4Sgonzalobg  store atomic i64 %d.add, ptr addrspace(3) %d syncscope("cluster") release, align 8
93278ae2de4Sgonzalobg
93378ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.shared.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
93478ae2de4Sgonzalobg  %e.load = load atomic float, ptr addrspace(3) %e syncscope("cluster") acquire, align 4
93578ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
93678ae2de4Sgonzalobg  ; CHECK: st.release.cluster.shared.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
93778ae2de4Sgonzalobg  store atomic float %e.add, ptr addrspace(3) %e syncscope("cluster") release, align 4
93878ae2de4Sgonzalobg
93978ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.shared.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
94078ae2de4Sgonzalobg  %f.load = load atomic double, ptr addrspace(3) %e syncscope("cluster") acquire, align 8
94178ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
94278ae2de4Sgonzalobg  ; CHECK: st.release.cluster.shared.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
94378ae2de4Sgonzalobg  store atomic double %f.add, ptr addrspace(3) %e syncscope("cluster") release, align 8
94478ae2de4Sgonzalobg
94578ae2de4Sgonzalobg  ret void
94678ae2de4Sgonzalobg}
94778ae2de4Sgonzalobg
94878ae2de4Sgonzalobg; CHECK-LABEL: shared_acq_rel_volatile_cluster
94978ae2de4Sgonzalobgdefine void @shared_acq_rel_volatile_cluster(ptr addrspace(3) %a, ptr addrspace(3) %b, ptr addrspace(3) %c, ptr addrspace(3) %d, ptr addrspace(3) %e) local_unnamed_addr {
95078ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.shared.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
95178ae2de4Sgonzalobg  %a.load = load atomic volatile i8, ptr addrspace(3) %a syncscope("cluster") acquire, align 1
95278ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
95378ae2de4Sgonzalobg  ; CHECK: st.release.sys.shared.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
95478ae2de4Sgonzalobg  store atomic volatile i8 %a.add, ptr addrspace(3) %a syncscope("cluster") release, align 1
95578ae2de4Sgonzalobg
95678ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.shared.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
95778ae2de4Sgonzalobg  %b.load = load atomic volatile i16, ptr addrspace(3) %b syncscope("cluster") acquire, align 2
95878ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
95978ae2de4Sgonzalobg  ; CHECK: st.release.sys.shared.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
96078ae2de4Sgonzalobg  store atomic volatile i16 %b.add, ptr addrspace(3) %b syncscope("cluster") release, align 2
96178ae2de4Sgonzalobg
96278ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.shared.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
96378ae2de4Sgonzalobg  %c.load = load atomic volatile i32, ptr addrspace(3) %c syncscope("cluster") acquire, align 4
96478ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
96578ae2de4Sgonzalobg  ; CHECK: st.release.sys.shared.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
96678ae2de4Sgonzalobg  store atomic volatile i32 %c.add, ptr addrspace(3) %c syncscope("cluster") release, align 4
96778ae2de4Sgonzalobg
96878ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.shared.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
96978ae2de4Sgonzalobg  %d.load = load atomic volatile i64, ptr addrspace(3) %d syncscope("cluster") acquire, align 8
97078ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
97178ae2de4Sgonzalobg  ; CHECK: st.release.sys.shared.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
97278ae2de4Sgonzalobg  store atomic volatile i64 %d.add, ptr addrspace(3) %d syncscope("cluster") release, align 8
97378ae2de4Sgonzalobg
97478ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.shared.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
97578ae2de4Sgonzalobg  %e.load = load atomic volatile float, ptr addrspace(3) %e syncscope("cluster") acquire, align 4
97678ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
97778ae2de4Sgonzalobg  ; CHECK: st.release.sys.shared.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
97878ae2de4Sgonzalobg  store atomic volatile float %e.add, ptr addrspace(3) %e syncscope("cluster") release, align 4
97978ae2de4Sgonzalobg
98078ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.shared.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
98178ae2de4Sgonzalobg  %f.load = load atomic volatile double, ptr addrspace(3) %e syncscope("cluster") acquire, align 8
98278ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
98378ae2de4Sgonzalobg  ; CHECK: st.release.sys.shared.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
98478ae2de4Sgonzalobg  store atomic volatile double %f.add, ptr addrspace(3) %e syncscope("cluster") release, align 8
98578ae2de4Sgonzalobg
98678ae2de4Sgonzalobg  ret void
98778ae2de4Sgonzalobg}
98878ae2de4Sgonzalobg
98978ae2de4Sgonzalobg; CHECK-LABEL: shared_seq_cst_cluster
99078ae2de4Sgonzalobgdefine void @shared_seq_cst_cluster(ptr addrspace(3) %a, ptr addrspace(3) %b, ptr addrspace(3) %c, ptr addrspace(3) %d, ptr addrspace(3) %e) local_unnamed_addr {
99178ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
99278ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.shared.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
99378ae2de4Sgonzalobg  %a.load = load atomic i8, ptr addrspace(3) %a syncscope("cluster") seq_cst, align 1
99478ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
99578ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
99678ae2de4Sgonzalobg  ; CHECK: st.release.cluster.shared.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
99778ae2de4Sgonzalobg  store atomic i8 %a.add, ptr addrspace(3) %a syncscope("cluster") seq_cst, align 1
99878ae2de4Sgonzalobg
99978ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
100078ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.shared.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
100178ae2de4Sgonzalobg  %b.load = load atomic i16, ptr addrspace(3) %b syncscope("cluster") seq_cst, align 2
100278ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
100378ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
100478ae2de4Sgonzalobg  ; CHECK: st.release.cluster.shared.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
100578ae2de4Sgonzalobg  store atomic i16 %b.add, ptr addrspace(3) %b syncscope("cluster") seq_cst, align 2
100678ae2de4Sgonzalobg
100778ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
100878ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.shared.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
100978ae2de4Sgonzalobg  %c.load = load atomic i32, ptr addrspace(3) %c syncscope("cluster") seq_cst, align 4
101078ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
101178ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
101278ae2de4Sgonzalobg  ; CHECK: st.release.cluster.shared.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
101378ae2de4Sgonzalobg  store atomic i32 %c.add, ptr addrspace(3) %c syncscope("cluster") seq_cst, align 4
101478ae2de4Sgonzalobg
101578ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
101678ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.shared.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
101778ae2de4Sgonzalobg  %d.load = load atomic i64, ptr addrspace(3) %d syncscope("cluster") seq_cst, align 8
101878ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
101978ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
102078ae2de4Sgonzalobg  ; CHECK: st.release.cluster.shared.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
102178ae2de4Sgonzalobg  store atomic i64 %d.add, ptr addrspace(3) %d syncscope("cluster") seq_cst, align 8
102278ae2de4Sgonzalobg
102378ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
102478ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.shared.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
102578ae2de4Sgonzalobg  %e.load = load atomic float, ptr addrspace(3) %e syncscope("cluster") seq_cst, align 4
102678ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
102778ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
102878ae2de4Sgonzalobg  ; CHECK: st.release.cluster.shared.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
102978ae2de4Sgonzalobg  store atomic float %e.add, ptr addrspace(3) %e syncscope("cluster") seq_cst, align 4
103078ae2de4Sgonzalobg
103178ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
103278ae2de4Sgonzalobg  ; CHECK: ld.acquire.cluster.shared.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
103378ae2de4Sgonzalobg  %f.load = load atomic double, ptr addrspace(3) %e syncscope("cluster") seq_cst, align 8
103478ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
103578ae2de4Sgonzalobg  ; CHECK: fence.sc.cluster
103678ae2de4Sgonzalobg  ; CHECK: st.release.cluster.shared.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
103778ae2de4Sgonzalobg  store atomic double %f.add, ptr addrspace(3) %e syncscope("cluster") seq_cst, align 8
103878ae2de4Sgonzalobg
103978ae2de4Sgonzalobg  ret void
104078ae2de4Sgonzalobg}
104178ae2de4Sgonzalobg
104278ae2de4Sgonzalobg; CHECK-LABEL: shared_seq_cst_volatile_cluster
104378ae2de4Sgonzalobgdefine void @shared_seq_cst_volatile_cluster(ptr addrspace(3) %a, ptr addrspace(3) %b, ptr addrspace(3) %c, ptr addrspace(3) %d, ptr addrspace(3) %e) local_unnamed_addr {
104478ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
104578ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.shared.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
104678ae2de4Sgonzalobg  %a.load = load atomic volatile i8, ptr addrspace(3) %a syncscope("cluster") seq_cst, align 1
104778ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
104878ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
104978ae2de4Sgonzalobg  ; CHECK: st.release.sys.shared.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
105078ae2de4Sgonzalobg  store atomic volatile i8 %a.add, ptr addrspace(3) %a syncscope("cluster") seq_cst, align 1
105178ae2de4Sgonzalobg
105278ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
105378ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.shared.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
105478ae2de4Sgonzalobg  %b.load = load atomic volatile i16, ptr addrspace(3) %b syncscope("cluster") seq_cst, align 2
105578ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
105678ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
105778ae2de4Sgonzalobg  ; CHECK: st.release.sys.shared.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
105878ae2de4Sgonzalobg  store atomic volatile i16 %b.add, ptr addrspace(3) %b syncscope("cluster") seq_cst, align 2
105978ae2de4Sgonzalobg
106078ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
106178ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.shared.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
106278ae2de4Sgonzalobg  %c.load = load atomic volatile i32, ptr addrspace(3) %c syncscope("cluster") seq_cst, align 4
106378ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
106478ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
106578ae2de4Sgonzalobg  ; CHECK: st.release.sys.shared.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
106678ae2de4Sgonzalobg  store atomic volatile i32 %c.add, ptr addrspace(3) %c syncscope("cluster") seq_cst, align 4
106778ae2de4Sgonzalobg
106878ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
106978ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.shared.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
107078ae2de4Sgonzalobg  %d.load = load atomic volatile i64, ptr addrspace(3) %d syncscope("cluster") seq_cst, align 8
107178ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
107278ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
107378ae2de4Sgonzalobg  ; CHECK: st.release.sys.shared.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
107478ae2de4Sgonzalobg  store atomic volatile i64 %d.add, ptr addrspace(3) %d syncscope("cluster") seq_cst, align 8
107578ae2de4Sgonzalobg
107678ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
107778ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.shared.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
107878ae2de4Sgonzalobg  %e.load = load atomic volatile float, ptr addrspace(3) %e syncscope("cluster") seq_cst, align 4
107978ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
108078ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
108178ae2de4Sgonzalobg  ; CHECK: st.release.sys.shared.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
108278ae2de4Sgonzalobg  store atomic volatile float %e.add, ptr addrspace(3) %e syncscope("cluster") seq_cst, align 4
108378ae2de4Sgonzalobg
108478ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
108578ae2de4Sgonzalobg  ; CHECK: ld.acquire.sys.shared.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
108678ae2de4Sgonzalobg  %f.load = load atomic volatile double, ptr addrspace(3) %e syncscope("cluster") seq_cst, align 8
108778ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
108878ae2de4Sgonzalobg  ; CHECK: fence.sc.sys
108978ae2de4Sgonzalobg  ; CHECK: st.release.sys.shared.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
109078ae2de4Sgonzalobg  store atomic volatile double %f.add, ptr addrspace(3) %e syncscope("cluster") seq_cst, align 8
109178ae2de4Sgonzalobg
109278ae2de4Sgonzalobg  ret void
109378ae2de4Sgonzalobg}
109478ae2de4Sgonzalobg
109578ae2de4Sgonzalobg;; local statespace
109678ae2de4Sgonzalobg
109778ae2de4Sgonzalobg; CHECK-LABEL: local_unordered_cluster
109878ae2de4Sgonzalobgdefine void @local_unordered_cluster(ptr addrspace(5) %a, ptr addrspace(5) %b, ptr addrspace(5) %c, ptr addrspace(5) %d, ptr addrspace(5) %e) local_unnamed_addr {
109978ae2de4Sgonzalobg  ; CHECK: ld.local.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
110078ae2de4Sgonzalobg  %a.load = load atomic i8, ptr addrspace(5) %a syncscope("cluster") unordered, align 1
110178ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
110278ae2de4Sgonzalobg  ; CHECK: st.local.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
110378ae2de4Sgonzalobg  store atomic i8 %a.add, ptr addrspace(5) %a syncscope("cluster") unordered, align 1
110478ae2de4Sgonzalobg
110578ae2de4Sgonzalobg  ; CHECK: ld.local.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
110678ae2de4Sgonzalobg  %b.load = load atomic i16, ptr addrspace(5) %b syncscope("cluster") unordered, align 2
110778ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
110878ae2de4Sgonzalobg  ; CHECK: st.local.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
110978ae2de4Sgonzalobg  store atomic i16 %b.add, ptr addrspace(5) %b syncscope("cluster") unordered, align 2
111078ae2de4Sgonzalobg
111178ae2de4Sgonzalobg  ; CHECK: ld.local.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
111278ae2de4Sgonzalobg  %c.load = load atomic i32, ptr addrspace(5) %c syncscope("cluster") unordered, align 4
111378ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
111478ae2de4Sgonzalobg  ; CHECK: st.local.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
111578ae2de4Sgonzalobg  store atomic i32 %c.add, ptr addrspace(5) %c syncscope("cluster") unordered, align 4
111678ae2de4Sgonzalobg
111778ae2de4Sgonzalobg  ; CHECK: ld.local.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
111878ae2de4Sgonzalobg  %d.load = load atomic i64, ptr addrspace(5) %d syncscope("cluster") unordered, align 8
111978ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
112078ae2de4Sgonzalobg  ; CHECK: st.local.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
112178ae2de4Sgonzalobg  store atomic i64 %d.add, ptr addrspace(5) %d syncscope("cluster") unordered, align 8
112278ae2de4Sgonzalobg
112378ae2de4Sgonzalobg  ; CHECK: ld.local.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
112478ae2de4Sgonzalobg  %e.load = load atomic float, ptr addrspace(5) %e syncscope("cluster") unordered, align 4
112578ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
112678ae2de4Sgonzalobg  ; CHECK: st.local.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
112778ae2de4Sgonzalobg  store atomic float %e.add, ptr addrspace(5) %e syncscope("cluster") unordered, align 4
112878ae2de4Sgonzalobg
112978ae2de4Sgonzalobg  ; CHECK: ld.local.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
113078ae2de4Sgonzalobg  %f.load = load atomic double, ptr addrspace(5) %e syncscope("cluster") unordered, align 8
113178ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
113278ae2de4Sgonzalobg  ; CHECK: st.local.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
113378ae2de4Sgonzalobg  store atomic double %f.add, ptr addrspace(5) %e syncscope("cluster") unordered, align 8
113478ae2de4Sgonzalobg
113578ae2de4Sgonzalobg  ret void
113678ae2de4Sgonzalobg}
113778ae2de4Sgonzalobg
113878ae2de4Sgonzalobg; CHECK-LABEL: local_unordered_volatile_cluster
113978ae2de4Sgonzalobgdefine void @local_unordered_volatile_cluster(ptr addrspace(5) %a, ptr addrspace(5) %b, ptr addrspace(5) %c, ptr addrspace(5) %d, ptr addrspace(5) %e) local_unnamed_addr {
114078ae2de4Sgonzalobg  ; CHECK: ld.local.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
114178ae2de4Sgonzalobg  %a.load = load atomic volatile i8, ptr addrspace(5) %a syncscope("cluster") unordered, align 1
114278ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
114378ae2de4Sgonzalobg  ; CHECK: st.local.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
114478ae2de4Sgonzalobg  store atomic volatile i8 %a.add, ptr addrspace(5) %a syncscope("cluster") unordered, align 1
114578ae2de4Sgonzalobg
114678ae2de4Sgonzalobg  ; CHECK: ld.local.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
114778ae2de4Sgonzalobg  %b.load = load atomic volatile i16, ptr addrspace(5) %b syncscope("cluster") unordered, align 2
114878ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
114978ae2de4Sgonzalobg  ; CHECK: st.local.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
115078ae2de4Sgonzalobg  store atomic volatile i16 %b.add, ptr addrspace(5) %b syncscope("cluster") unordered, align 2
115178ae2de4Sgonzalobg
115278ae2de4Sgonzalobg  ; CHECK: ld.local.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
115378ae2de4Sgonzalobg  %c.load = load atomic volatile i32, ptr addrspace(5) %c syncscope("cluster") unordered, align 4
115478ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
115578ae2de4Sgonzalobg  ; CHECK: st.local.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
115678ae2de4Sgonzalobg  store atomic volatile i32 %c.add, ptr addrspace(5) %c syncscope("cluster") unordered, align 4
115778ae2de4Sgonzalobg
115878ae2de4Sgonzalobg  ; CHECK: ld.local.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
115978ae2de4Sgonzalobg  %d.load = load atomic volatile i64, ptr addrspace(5) %d syncscope("cluster") unordered, align 8
116078ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
116178ae2de4Sgonzalobg  ; CHECK: st.local.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
116278ae2de4Sgonzalobg  store atomic volatile i64 %d.add, ptr addrspace(5) %d syncscope("cluster") unordered, align 8
116378ae2de4Sgonzalobg
116478ae2de4Sgonzalobg  ; CHECK: ld.local.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
116578ae2de4Sgonzalobg  %e.load = load atomic volatile float, ptr addrspace(5) %e syncscope("cluster") unordered, align 4
116678ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
116778ae2de4Sgonzalobg  ; CHECK: st.local.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
116878ae2de4Sgonzalobg  store atomic volatile float %e.add, ptr addrspace(5) %e syncscope("cluster") unordered, align 4
116978ae2de4Sgonzalobg
117078ae2de4Sgonzalobg  ; CHECK: ld.local.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
117178ae2de4Sgonzalobg  %f.load = load atomic volatile double, ptr addrspace(5) %e syncscope("cluster") unordered, align 8
117278ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
117378ae2de4Sgonzalobg  ; CHECK: st.local.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
117478ae2de4Sgonzalobg  store atomic volatile double %f.add, ptr addrspace(5) %e syncscope("cluster") unordered, align 8
117578ae2de4Sgonzalobg
117678ae2de4Sgonzalobg  ret void
117778ae2de4Sgonzalobg}
117878ae2de4Sgonzalobg
117978ae2de4Sgonzalobg; CHECK-LABEL: local_monotonic_cluster
118078ae2de4Sgonzalobgdefine void @local_monotonic_cluster(ptr addrspace(5) %a, ptr addrspace(5) %b, ptr addrspace(5) %c, ptr addrspace(5) %d, ptr addrspace(5) %e) local_unnamed_addr {
118178ae2de4Sgonzalobg  ; CHECK: ld.local.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
118278ae2de4Sgonzalobg  %a.load = load atomic i8, ptr addrspace(5) %a syncscope("cluster") monotonic, align 1
118378ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
118478ae2de4Sgonzalobg  ; CHECK: st.local.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
118578ae2de4Sgonzalobg  store atomic i8 %a.add, ptr addrspace(5) %a syncscope("cluster") monotonic, align 1
118678ae2de4Sgonzalobg
118778ae2de4Sgonzalobg  ; CHECK: ld.local.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
118878ae2de4Sgonzalobg  %b.load = load atomic i16, ptr addrspace(5) %b syncscope("cluster") monotonic, align 2
118978ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
119078ae2de4Sgonzalobg  ; CHECK: st.local.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
119178ae2de4Sgonzalobg  store atomic i16 %b.add, ptr addrspace(5) %b syncscope("cluster") monotonic, align 2
119278ae2de4Sgonzalobg
119378ae2de4Sgonzalobg  ; CHECK: ld.local.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
119478ae2de4Sgonzalobg  %c.load = load atomic i32, ptr addrspace(5) %c syncscope("cluster") monotonic, align 4
119578ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
119678ae2de4Sgonzalobg  ; CHECK: st.local.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
119778ae2de4Sgonzalobg  store atomic i32 %c.add, ptr addrspace(5) %c syncscope("cluster") monotonic, align 4
119878ae2de4Sgonzalobg
119978ae2de4Sgonzalobg  ; CHECK: ld.local.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
120078ae2de4Sgonzalobg  %d.load = load atomic i64, ptr addrspace(5) %d syncscope("cluster") monotonic, align 8
120178ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
120278ae2de4Sgonzalobg  ; CHECK: st.local.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
120378ae2de4Sgonzalobg  store atomic i64 %d.add, ptr addrspace(5) %d syncscope("cluster") monotonic, align 8
120478ae2de4Sgonzalobg
120578ae2de4Sgonzalobg  ; CHECK: ld.local.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
120678ae2de4Sgonzalobg  %e.load = load atomic float, ptr addrspace(5) %e syncscope("cluster") monotonic, align 4
120778ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
120878ae2de4Sgonzalobg  ; CHECK: st.local.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
120978ae2de4Sgonzalobg  store atomic float %e.add, ptr addrspace(5) %e syncscope("cluster") monotonic, align 4
121078ae2de4Sgonzalobg
121178ae2de4Sgonzalobg  ; CHECK: ld.local.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
121278ae2de4Sgonzalobg  %f.load = load atomic double, ptr addrspace(5) %e syncscope("cluster") monotonic, align 8
121378ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
121478ae2de4Sgonzalobg  ; CHECK: st.local.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
121578ae2de4Sgonzalobg  store atomic double %f.add, ptr addrspace(5) %e syncscope("cluster") monotonic, align 8
121678ae2de4Sgonzalobg
121778ae2de4Sgonzalobg  ret void
121878ae2de4Sgonzalobg}
121978ae2de4Sgonzalobg
122078ae2de4Sgonzalobg; CHECK-LABEL: local_monotonic_volatile_cluster
122178ae2de4Sgonzalobgdefine void @local_monotonic_volatile_cluster(ptr addrspace(5) %a, ptr addrspace(5) %b, ptr addrspace(5) %c, ptr addrspace(5) %d, ptr addrspace(5) %e) local_unnamed_addr {
122278ae2de4Sgonzalobg  ; CHECK: ld.local.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
122378ae2de4Sgonzalobg  %a.load = load atomic volatile i8, ptr addrspace(5) %a syncscope("cluster") monotonic, align 1
122478ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
122578ae2de4Sgonzalobg  ; CHECK: st.local.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
122678ae2de4Sgonzalobg  store atomic volatile i8 %a.add, ptr addrspace(5) %a syncscope("cluster") monotonic, align 1
122778ae2de4Sgonzalobg
122878ae2de4Sgonzalobg  ; CHECK: ld.local.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
122978ae2de4Sgonzalobg  %b.load = load atomic volatile i16, ptr addrspace(5) %b syncscope("cluster") monotonic, align 2
123078ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
123178ae2de4Sgonzalobg  ; CHECK: st.local.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
123278ae2de4Sgonzalobg  store atomic volatile i16 %b.add, ptr addrspace(5) %b syncscope("cluster") monotonic, align 2
123378ae2de4Sgonzalobg
123478ae2de4Sgonzalobg  ; CHECK: ld.local.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
123578ae2de4Sgonzalobg  %c.load = load atomic volatile i32, ptr addrspace(5) %c syncscope("cluster") monotonic, align 4
123678ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
123778ae2de4Sgonzalobg  ; CHECK: st.local.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
123878ae2de4Sgonzalobg  store atomic volatile i32 %c.add, ptr addrspace(5) %c syncscope("cluster") monotonic, align 4
123978ae2de4Sgonzalobg
124078ae2de4Sgonzalobg  ; CHECK: ld.local.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
124178ae2de4Sgonzalobg  %d.load = load atomic volatile i64, ptr addrspace(5) %d syncscope("cluster") monotonic, align 8
124278ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
124378ae2de4Sgonzalobg  ; CHECK: st.local.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
124478ae2de4Sgonzalobg  store atomic volatile i64 %d.add, ptr addrspace(5) %d syncscope("cluster") monotonic, align 8
124578ae2de4Sgonzalobg
124678ae2de4Sgonzalobg  ; CHECK: ld.local.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
124778ae2de4Sgonzalobg  %e.load = load atomic volatile float, ptr addrspace(5) %e syncscope("cluster") monotonic, align 4
124878ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
124978ae2de4Sgonzalobg  ; CHECK: st.local.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
125078ae2de4Sgonzalobg  store atomic volatile float %e.add, ptr addrspace(5) %e syncscope("cluster") monotonic, align 4
125178ae2de4Sgonzalobg
125278ae2de4Sgonzalobg  ; CHECK: ld.local.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
125378ae2de4Sgonzalobg  %f.load = load atomic volatile double, ptr addrspace(5) %e syncscope("cluster") monotonic, align 8
125478ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
125578ae2de4Sgonzalobg  ; CHECK: st.local.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
125678ae2de4Sgonzalobg  store atomic volatile double %f.add, ptr addrspace(5) %e syncscope("cluster") monotonic, align 8
125778ae2de4Sgonzalobg
125878ae2de4Sgonzalobg  ret void
125978ae2de4Sgonzalobg}
126078ae2de4Sgonzalobg
126178ae2de4Sgonzalobg; CHECK-LABEL: local_acq_rel_cluster
126278ae2de4Sgonzalobgdefine void @local_acq_rel_cluster(ptr addrspace(5) %a, ptr addrspace(5) %b, ptr addrspace(5) %c, ptr addrspace(5) %d, ptr addrspace(5) %e) local_unnamed_addr {
126378ae2de4Sgonzalobg  ; CHECK: ld.local.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
126478ae2de4Sgonzalobg  %a.load = load atomic i8, ptr addrspace(5) %a syncscope("cluster") acquire, align 1
126578ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
126678ae2de4Sgonzalobg  ; CHECK: st.local.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
126778ae2de4Sgonzalobg  store atomic i8 %a.add, ptr addrspace(5) %a syncscope("cluster") release, align 1
126878ae2de4Sgonzalobg
126978ae2de4Sgonzalobg  ; CHECK: ld.local.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
127078ae2de4Sgonzalobg  %b.load = load atomic i16, ptr addrspace(5) %b syncscope("cluster") acquire, align 2
127178ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
127278ae2de4Sgonzalobg  ; CHECK: st.local.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
127378ae2de4Sgonzalobg  store atomic i16 %b.add, ptr addrspace(5) %b syncscope("cluster") release, align 2
127478ae2de4Sgonzalobg
127578ae2de4Sgonzalobg  ; CHECK: ld.local.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
127678ae2de4Sgonzalobg  %c.load = load atomic i32, ptr addrspace(5) %c syncscope("cluster") acquire, align 4
127778ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
127878ae2de4Sgonzalobg  ; CHECK: st.local.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
127978ae2de4Sgonzalobg  store atomic i32 %c.add, ptr addrspace(5) %c syncscope("cluster") release, align 4
128078ae2de4Sgonzalobg
128178ae2de4Sgonzalobg  ; CHECK: ld.local.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
128278ae2de4Sgonzalobg  %d.load = load atomic i64, ptr addrspace(5) %d syncscope("cluster") acquire, align 8
128378ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
128478ae2de4Sgonzalobg  ; CHECK: st.local.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
128578ae2de4Sgonzalobg  store atomic i64 %d.add, ptr addrspace(5) %d syncscope("cluster") release, align 8
128678ae2de4Sgonzalobg
128778ae2de4Sgonzalobg  ; CHECK: ld.local.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
128878ae2de4Sgonzalobg  %e.load = load atomic float, ptr addrspace(5) %e syncscope("cluster") acquire, align 4
128978ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
129078ae2de4Sgonzalobg  ; CHECK: st.local.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
129178ae2de4Sgonzalobg  store atomic float %e.add, ptr addrspace(5) %e syncscope("cluster") release, align 4
129278ae2de4Sgonzalobg
129378ae2de4Sgonzalobg  ; CHECK: ld.local.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
129478ae2de4Sgonzalobg  %f.load = load atomic double, ptr addrspace(5) %e syncscope("cluster") acquire, align 8
129578ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
129678ae2de4Sgonzalobg  ; CHECK: st.local.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
129778ae2de4Sgonzalobg  store atomic double %f.add, ptr addrspace(5) %e syncscope("cluster") release, align 8
129878ae2de4Sgonzalobg
129978ae2de4Sgonzalobg  ret void
130078ae2de4Sgonzalobg}
130178ae2de4Sgonzalobg
130278ae2de4Sgonzalobg; CHECK-LABEL: local_acq_rel_volatile_cluster
130378ae2de4Sgonzalobgdefine void @local_acq_rel_volatile_cluster(ptr addrspace(5) %a, ptr addrspace(5) %b, ptr addrspace(5) %c, ptr addrspace(5) %d, ptr addrspace(5) %e) local_unnamed_addr {
130478ae2de4Sgonzalobg  ; CHECK: ld.local.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
130578ae2de4Sgonzalobg  %a.load = load atomic volatile i8, ptr addrspace(5) %a syncscope("cluster") acquire, align 1
130678ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
130778ae2de4Sgonzalobg  ; CHECK: st.local.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
130878ae2de4Sgonzalobg  store atomic volatile i8 %a.add, ptr addrspace(5) %a syncscope("cluster") release, align 1
130978ae2de4Sgonzalobg
131078ae2de4Sgonzalobg  ; CHECK: ld.local.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
131178ae2de4Sgonzalobg  %b.load = load atomic volatile i16, ptr addrspace(5) %b syncscope("cluster") acquire, align 2
131278ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
131378ae2de4Sgonzalobg  ; CHECK: st.local.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
131478ae2de4Sgonzalobg  store atomic volatile i16 %b.add, ptr addrspace(5) %b syncscope("cluster") release, align 2
131578ae2de4Sgonzalobg
131678ae2de4Sgonzalobg  ; CHECK: ld.local.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
131778ae2de4Sgonzalobg  %c.load = load atomic volatile i32, ptr addrspace(5) %c syncscope("cluster") acquire, align 4
131878ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
131978ae2de4Sgonzalobg  ; CHECK: st.local.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
132078ae2de4Sgonzalobg  store atomic volatile i32 %c.add, ptr addrspace(5) %c syncscope("cluster") release, align 4
132178ae2de4Sgonzalobg
132278ae2de4Sgonzalobg  ; CHECK: ld.local.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
132378ae2de4Sgonzalobg  %d.load = load atomic volatile i64, ptr addrspace(5) %d syncscope("cluster") acquire, align 8
132478ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
132578ae2de4Sgonzalobg  ; CHECK: st.local.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
132678ae2de4Sgonzalobg  store atomic volatile i64 %d.add, ptr addrspace(5) %d syncscope("cluster") release, align 8
132778ae2de4Sgonzalobg
132878ae2de4Sgonzalobg  ; CHECK: ld.local.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
132978ae2de4Sgonzalobg  %e.load = load atomic volatile float, ptr addrspace(5) %e syncscope("cluster") acquire, align 4
133078ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
133178ae2de4Sgonzalobg  ; CHECK: st.local.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
133278ae2de4Sgonzalobg  store atomic volatile float %e.add, ptr addrspace(5) %e syncscope("cluster") release, align 4
133378ae2de4Sgonzalobg
133478ae2de4Sgonzalobg  ; CHECK: ld.local.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
133578ae2de4Sgonzalobg  %f.load = load atomic volatile double, ptr addrspace(5) %e syncscope("cluster") acquire, align 8
133678ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
133778ae2de4Sgonzalobg  ; CHECK: st.local.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
133878ae2de4Sgonzalobg  store atomic volatile double %f.add, ptr addrspace(5) %e syncscope("cluster") release, align 8
133978ae2de4Sgonzalobg
134078ae2de4Sgonzalobg  ret void
134178ae2de4Sgonzalobg}
134278ae2de4Sgonzalobg
134378ae2de4Sgonzalobg; CHECK-LABEL: local_seq_cst_cluster
134478ae2de4Sgonzalobgdefine void @local_seq_cst_cluster(ptr addrspace(5) %a, ptr addrspace(5) %b, ptr addrspace(5) %c, ptr addrspace(5) %d, ptr addrspace(5) %e) local_unnamed_addr {
134578ae2de4Sgonzalobg  ; CHECK: ld.local.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
134678ae2de4Sgonzalobg  %a.load = load atomic i8, ptr addrspace(5) %a syncscope("cluster") seq_cst, align 1
134778ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
134878ae2de4Sgonzalobg  ; CHECK: st.local.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
134978ae2de4Sgonzalobg  store atomic i8 %a.add, ptr addrspace(5) %a syncscope("cluster") seq_cst, align 1
135078ae2de4Sgonzalobg
135178ae2de4Sgonzalobg  ; CHECK: ld.local.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
135278ae2de4Sgonzalobg  %b.load = load atomic i16, ptr addrspace(5) %b syncscope("cluster") seq_cst, align 2
135378ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
135478ae2de4Sgonzalobg  ; CHECK: st.local.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
135578ae2de4Sgonzalobg  store atomic i16 %b.add, ptr addrspace(5) %b syncscope("cluster") seq_cst, align 2
135678ae2de4Sgonzalobg
135778ae2de4Sgonzalobg  ; CHECK: ld.local.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
135878ae2de4Sgonzalobg  %c.load = load atomic i32, ptr addrspace(5) %c syncscope("cluster") seq_cst, align 4
135978ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
136078ae2de4Sgonzalobg  ; CHECK: st.local.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
136178ae2de4Sgonzalobg  store atomic i32 %c.add, ptr addrspace(5) %c syncscope("cluster") seq_cst, align 4
136278ae2de4Sgonzalobg
136378ae2de4Sgonzalobg  ; CHECK: ld.local.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
136478ae2de4Sgonzalobg  %d.load = load atomic i64, ptr addrspace(5) %d syncscope("cluster") seq_cst, align 8
136578ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
136678ae2de4Sgonzalobg  ; CHECK: st.local.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
136778ae2de4Sgonzalobg  store atomic i64 %d.add, ptr addrspace(5) %d syncscope("cluster") seq_cst, align 8
136878ae2de4Sgonzalobg
136978ae2de4Sgonzalobg  ; CHECK: ld.local.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
137078ae2de4Sgonzalobg  %e.load = load atomic float, ptr addrspace(5) %e syncscope("cluster") seq_cst, align 4
137178ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
137278ae2de4Sgonzalobg  ; CHECK: st.local.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
137378ae2de4Sgonzalobg  store atomic float %e.add, ptr addrspace(5) %e syncscope("cluster") seq_cst, align 4
137478ae2de4Sgonzalobg
137578ae2de4Sgonzalobg  ; CHECK: ld.local.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
137678ae2de4Sgonzalobg  %f.load = load atomic double, ptr addrspace(5) %e syncscope("cluster") seq_cst, align 8
137778ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
137878ae2de4Sgonzalobg  ; CHECK: st.local.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
137978ae2de4Sgonzalobg  store atomic double %f.add, ptr addrspace(5) %e syncscope("cluster") seq_cst, align 8
138078ae2de4Sgonzalobg
138178ae2de4Sgonzalobg  ret void
138278ae2de4Sgonzalobg}
138378ae2de4Sgonzalobg
138478ae2de4Sgonzalobg; CHECK-LABEL: local_seq_cst_volatile_cluster
138578ae2de4Sgonzalobgdefine void @local_seq_cst_volatile_cluster(ptr addrspace(5) %a, ptr addrspace(5) %b, ptr addrspace(5) %c, ptr addrspace(5) %d, ptr addrspace(5) %e) local_unnamed_addr {
138678ae2de4Sgonzalobg  ; CHECK: ld.local.u8 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
138778ae2de4Sgonzalobg  %a.load = load atomic volatile i8, ptr addrspace(5) %a syncscope("cluster") seq_cst, align 1
138878ae2de4Sgonzalobg  %a.add = add i8 %a.load, 1
138978ae2de4Sgonzalobg  ; CHECK: st.local.u8 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
139078ae2de4Sgonzalobg  store atomic volatile i8 %a.add, ptr addrspace(5) %a syncscope("cluster") seq_cst, align 1
139178ae2de4Sgonzalobg
139278ae2de4Sgonzalobg  ; CHECK: ld.local.u16 %rs{{[0-9]+}}, [%rd{{[0-9]+}}]
139378ae2de4Sgonzalobg  %b.load = load atomic volatile i16, ptr addrspace(5) %b syncscope("cluster") seq_cst, align 2
139478ae2de4Sgonzalobg  %b.add = add i16 %b.load, 1
139578ae2de4Sgonzalobg  ; CHECK: st.local.u16 [%rd{{[0-9]+}}], %rs{{[0-9]+}}
139678ae2de4Sgonzalobg  store atomic volatile i16 %b.add, ptr addrspace(5) %b syncscope("cluster") seq_cst, align 2
139778ae2de4Sgonzalobg
139878ae2de4Sgonzalobg  ; CHECK: ld.local.u32 %r{{[0-9]+}}, [%rd{{[0-9]+}}]
139978ae2de4Sgonzalobg  %c.load = load atomic volatile i32, ptr addrspace(5) %c syncscope("cluster") seq_cst, align 4
140078ae2de4Sgonzalobg  %c.add = add i32 %c.load, 1
140178ae2de4Sgonzalobg  ; CHECK: st.local.u32 [%rd{{[0-9]+}}], %r{{[0-9]+}}
140278ae2de4Sgonzalobg  store atomic volatile i32 %c.add, ptr addrspace(5) %c syncscope("cluster") seq_cst, align 4
140378ae2de4Sgonzalobg
140478ae2de4Sgonzalobg  ; CHECK: ld.local.u64 %rd{{[0-9]+}}, [%rd{{[0-9]+}}]
140578ae2de4Sgonzalobg  %d.load = load atomic volatile i64, ptr addrspace(5) %d syncscope("cluster") seq_cst, align 8
140678ae2de4Sgonzalobg  %d.add = add i64 %d.load, 1
140778ae2de4Sgonzalobg  ; CHECK: st.local.u64 [%rd{{[0-9]+}}], %rd{{[0-9]+}}
140878ae2de4Sgonzalobg  store atomic volatile i64 %d.add, ptr addrspace(5) %d syncscope("cluster") seq_cst, align 8
140978ae2de4Sgonzalobg
141078ae2de4Sgonzalobg  ; CHECK: ld.local.f32 %f{{[0-9]+}}, [%rd{{[0-9]+}}]
141178ae2de4Sgonzalobg  %e.load = load atomic volatile float, ptr addrspace(5) %e syncscope("cluster") seq_cst, align 4
141278ae2de4Sgonzalobg  %e.add = fadd float %e.load, 1.
141378ae2de4Sgonzalobg  ; CHECK: st.local.f32 [%rd{{[0-9]+}}], %f{{[0-9]+}}
141478ae2de4Sgonzalobg  store atomic volatile float %e.add, ptr addrspace(5) %e syncscope("cluster") seq_cst, align 4
141578ae2de4Sgonzalobg
141678ae2de4Sgonzalobg  ; CHECK: ld.local.f64 %fd{{[0-9]+}}, [%rd{{[0-9]+}}]
141778ae2de4Sgonzalobg  %f.load = load atomic volatile double, ptr addrspace(5) %e syncscope("cluster") seq_cst, align 8
141878ae2de4Sgonzalobg  %f.add = fadd double %f.load, 1.
141978ae2de4Sgonzalobg  ; CHECK: st.local.f64 [%rd{{[0-9]+}}], %fd{{[0-9]+}}
142078ae2de4Sgonzalobg  store atomic volatile double %f.add, ptr addrspace(5) %e syncscope("cluster") seq_cst, align 8
142178ae2de4Sgonzalobg
142278ae2de4Sgonzalobg  ret void
142378ae2de4Sgonzalobg}
1424