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