From 2c2f10bdab7798532e1b52ab0e6c18e5726932e9 Mon Sep 17 00:00:00 2001 From: Haocong Lu Date: Tue, 9 Dec 2025 11:23:51 +0800 Subject: [PATCH 1/2] [CIR][NFC] Rename AtomicFence to AtomicFenceOp This fixes missed suffix `Op` of `CIR_AtomicFence` defination --- clang/include/clang/CIR/Dialect/IR/CIROps.td | 2 +- clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp | 12 ++++++------ clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/clang/include/clang/CIR/Dialect/IR/CIROps.td b/clang/include/clang/CIR/Dialect/IR/CIROps.td index fcc7585cf81a5..e39bc31c3eafa 100644 --- a/clang/include/clang/CIR/Dialect/IR/CIROps.td +++ b/clang/include/clang/CIR/Dialect/IR/CIROps.td @@ -5493,7 +5493,7 @@ def CIR_AtomicClearOp : CIR_Op<"atomic.clear"> { }]; } -def CIR_AtomicFence : CIR_Op<"atomic.fence"> { +def CIR_AtomicFenceOp : CIR_Op<"atomic.fence"> { let summary = "Atomic thread fence"; let description = [{ C/C++ Atomic thread fence synchronization primitive. Implements the builtin diff --git a/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp b/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp index 16c006df6853e..c7040b14f5ef1 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp @@ -60,9 +60,9 @@ static RValue emitBuiltinBitOp(CIRGenFunction &cgf, const CallExpr *e, return RValue::get(result); } -static mlir::Value makeAtomicFenceValue(CIRGenFunction &cgf, - const CallExpr *expr, - cir::SyncScopeKind syncScope) { +static mlir::Value makeAtomicFenceOpValue(CIRGenFunction &cgf, + const CallExpr *expr, + cir::SyncScopeKind syncScope) { CIRGenBuilderTy &builder = cgf.getBuilder(); mlir::Value orderingVal = cgf.emitScalarExpr(expr->getArg(0)); @@ -80,7 +80,7 @@ static mlir::Value makeAtomicFenceValue(CIRGenFunction &cgf, auto ordering = static_cast(constOrderingAttr.getUInt()); - cir::AtomicFence::create( + cir::AtomicFenceOp::create( builder, cgf.getLoc(expr->getSourceRange()), ordering, cir::SyncScopeKindAttr::get(&cgf.getMLIRContext(), syncScope)); @@ -1012,10 +1012,10 @@ RValue CIRGenFunction::emitBuiltinExpr(const GlobalDecl &gd, unsigned builtinID, return errorBuiltinNYI(*this, e, builtinID); case Builtin::BI__atomic_thread_fence: return RValue::get( - makeAtomicFenceValue(*this, e, cir::SyncScopeKind::System)); + makeAtomicFenceOpValue(*this, e, cir::SyncScopeKind::System)); case Builtin::BI__atomic_signal_fence: return RValue::get( - makeAtomicFenceValue(*this, e, cir::SyncScopeKind::SingleThread)); + makeAtomicFenceOpValue(*this, e, cir::SyncScopeKind::SingleThread)); case Builtin::BI__c11_atomic_thread_fence: case Builtin::BI__c11_atomic_signal_fence: case Builtin::BI__scoped_atomic_thread_fence: diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp index 97bd3cf850daa..c8b395b1feb93 100644 --- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp +++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp @@ -860,8 +860,8 @@ mlir::LogicalResult CIRToLLVMAtomicClearOpLowering::matchAndRewrite( return mlir::success(); } -mlir::LogicalResult CIRToLLVMAtomicFenceLowering::matchAndRewrite( - cir::AtomicFence op, OpAdaptor adaptor, +mlir::LogicalResult CIRToLLVMAtomicFenceOpLowering::matchAndRewrite( + cir::AtomicFenceOp op, OpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter) const { mlir::LLVM::AtomicOrdering llvmOrder = getLLVMMemOrder(adaptor.getOrdering()); From 8a7d85827d116aff8a80f111040211415a1a8d47 Mon Sep 17 00:00:00 2001 From: Haocong Lu Date: Wed, 10 Dec 2025 10:12:43 +0800 Subject: [PATCH 2/2] [CIR][NFC] Refactor makeAtomicFenceValue --- clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp b/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp index c7040b14f5ef1..bc7f2e59edadd 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp @@ -60,9 +60,8 @@ static RValue emitBuiltinBitOp(CIRGenFunction &cgf, const CallExpr *e, return RValue::get(result); } -static mlir::Value makeAtomicFenceOpValue(CIRGenFunction &cgf, - const CallExpr *expr, - cir::SyncScopeKind syncScope) { +static void emitAtomicFenceOp(CIRGenFunction &cgf, const CallExpr *expr, + cir::SyncScopeKind syncScope) { CIRGenBuilderTy &builder = cgf.getBuilder(); mlir::Value orderingVal = cgf.emitScalarExpr(expr->getArg(0)); @@ -72,7 +71,7 @@ static mlir::Value makeAtomicFenceOpValue(CIRGenFunction &cgf, // TODO(cir): Emit code to switch on `orderingVal`, // and creating the fence op for valid values. cgf.cgm.errorNYI("Variable atomic fence ordering"); - return {}; + return; } auto constOrderingAttr = constOrdering.getValueAttr(); @@ -84,7 +83,7 @@ static mlir::Value makeAtomicFenceOpValue(CIRGenFunction &cgf, builder, cgf.getLoc(expr->getSourceRange()), ordering, cir::SyncScopeKindAttr::get(&cgf.getMLIRContext(), syncScope)); - return {}; + return; } namespace { @@ -1010,12 +1009,14 @@ RValue CIRGenFunction::emitBuiltinExpr(const GlobalDecl &gd, unsigned builtinID, case Builtin::BI__atomic_test_and_set: case Builtin::BI__atomic_clear: return errorBuiltinNYI(*this, e, builtinID); - case Builtin::BI__atomic_thread_fence: - return RValue::get( - makeAtomicFenceOpValue(*this, e, cir::SyncScopeKind::System)); - case Builtin::BI__atomic_signal_fence: - return RValue::get( - makeAtomicFenceOpValue(*this, e, cir::SyncScopeKind::SingleThread)); + case Builtin::BI__atomic_thread_fence: { + emitAtomicFenceOp(*this, e, cir::SyncScopeKind::System); + return RValue::get(nullptr); + } + case Builtin::BI__atomic_signal_fence: { + emitAtomicFenceOp(*this, e, cir::SyncScopeKind::SingleThread); + return RValue::get(nullptr); + } case Builtin::BI__c11_atomic_thread_fence: case Builtin::BI__c11_atomic_signal_fence: case Builtin::BI__scoped_atomic_thread_fence: