[clang] [CIR] Add scoped atomic load operation (PR #171134)

Andy Kaylor via cfe-commits cfe-commits at lists.llvm.org
Mon Dec 8 12:46:48 PST 2025


================
@@ -0,0 +1,40 @@
+// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -Wno-unused-value -fclangir -emit-cir %s -o %t.cir
+// RUN: FileCheck --input-file=%t.cir %s -check-prefix=CIR
+// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -Wno-unused-value -fclangir -emit-llvm %s -o %t-cir.ll
+// RUN: FileCheck --input-file=%t-cir.ll %s -check-prefix=LLVM
+// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -Wno-unused-value -emit-llvm %s -o %t.ll
+// RUN: FileCheck --input-file=%t.ll %s -check-prefix=OGCG
+
+void scoped_atomic_load(int *ptr) {
+  // CIR-LABEL: @scoped_atomic_load
+  // LLVM-LABEL: @scoped_atomic_load
+  // OGCG-LABEL: @scoped_atomic_load
+
+  int x;
+  __scoped_atomic_load(ptr, &x, __ATOMIC_RELAXED, __MEMORY_SCOPE_SINGLE);
+  // CIR: %{{.+}} = cir.load align(4) syncscope(single_thread) atomic(relaxed) %{{.+}} : !cir.ptr<!s32i>, !s32i
+  // LLVM: %{{.+}} = load atomic i32, ptr %{{.+}} syncscope("singlethread") monotonic, align 4
----------------
andykaylor wrote:

Why do we have this difference from OGCG?

https://github.com/llvm/llvm-project/pull/171134


More information about the cfe-commits mailing list