[clang] [CIR] Correct 2 lowering bugs of atomic cmp-xchng builtins (PR #227054)
Erich Keane via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 28 10:48:22 PDT 2026
================
@@ -506,30 +506,41 @@ static void emitAtomicCmpXchg(CIRGenFunction &cgf, AtomicExpr *e, bool isWeak,
cmpxchg.setWeak(isWeak);
mlir::Value failed = builder.createNot(cmpxchg.getSuccess());
- cir::IfOp::create(builder, loc, failed, /*withElseRegion=*/false,
- [&](mlir::OpBuilder &, mlir::Location) {
- auto ptrTy = mlir::cast<cir::PointerType>(
- val1.getPointer().getType());
- if (val1.getElementType() != ptrTy.getPointee()) {
- val1 = val1.withPointer(builder.createPtrBitcast(
- val1.getPointer(), val1.getElementType()));
- }
- builder.createStore(loc, cmpxchg.getOld(), val1);
- builder.createYield(loc);
- });
+ cir::IfOp::create(
+ builder, loc, failed, /*withElseRegion=*/false,
+ [&](mlir::OpBuilder &, mlir::Location) {
+ uint64_t expectedSizeInBytes = cgf.cgm.getDataLayout().getTypeStoreSize(
+ expectedResult.getElementType());
+
+ if (expectedSizeInBytes == size) {
+ Address storeAddr = expectedResult.withElementType(
+ builder, cmpxchg.getOld().getType());
+ builder.createStore(loc, cmpxchg.getOld(), storeAddr);
----------------
erichkeane wrote:
OH! Thats what that was about! I'll add a couple of missing-features marks.
https://github.com/llvm/llvm-project/pull/227054
More information about the cfe-commits
mailing list