[clang] [CIR] Upstream __sync_<OP>_and_fetch builtins (PR #168347)
Andy Kaylor via cfe-commits
cfe-commits at lists.llvm.org
Mon Nov 17 12:58:26 PST 2025
================
@@ -1133,3 +1133,494 @@ int c11_atomic_fetch_nand(_Atomic(int) *ptr, int value) {
// OGCG: %[[RES:.+]] = atomicrmw nand ptr %{{.+}}, i32 %{{.+}} seq_cst, align 4
// OGCG-NEXT: store i32 %[[RES]], ptr %{{.+}}, align 4
}
+
+// CHECK-LABEL: @test_op_and_fetch
+// LLVM-LABEL: @test_op_and_fetch
+void test_op_and_fetch() {
+ signed char sc;
+ unsigned char uc;
+ signed short ss;
+ unsigned short us;
+ signed int si;
+ unsigned int ui;
+ signed long long sll;
+ unsigned long long ull;
+
+ // CHECK: [[VAL0:%.*]] = cir.cast integral {{%.*}} : !u8i -> !s8i
+ // CHECK: [[RES0:%.*]] = cir.atomic.fetch(add, {{%.*}} : !cir.ptr<!s8i>, [[VAL0]] : !s8i, seq_cst) fetch_first : !s8i
+ // CHECK: [[RET0:%.*]] = cir.binop(add, [[RES0]], [[VAL0]]) : !s8i
+ // LLVM: [[VAL0:%.*]] = load i8, ptr %{{.*}}, align 1
+ // LLVM: [[RES0:%.*]] = atomicrmw add ptr %{{.*}}, i8 [[VAL0]] seq_cst, align 1
+ // LLVM: [[RET0:%.*]] = add i8 [[RES0]], [[VAL0]]
+ // LLVM: store i8 [[RET0]], ptr %{{.*}}, align 1
+ sc = __sync_add_and_fetch(&sc, uc);
----------------
andykaylor wrote:
Please add OGCG checks.
https://github.com/llvm/llvm-project/pull/168347
More information about the cfe-commits
mailing list