Skip to content

Commit 36ec970

Browse files
Feedback
1 parent 24e3f1a commit 36ec970

File tree

1 file changed

+16
-10
lines changed

1 file changed

+16
-10
lines changed

clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -61,22 +61,28 @@ static RValue emitBuiltinBitOp(CIRGenFunction &cgf, const CallExpr *e,
6161
static mlir::Value makeAtomicFenceValue(CIRGenFunction &cgf,
6262
const CallExpr *expr,
6363
cir::SyncScopeKind syncScope) {
64-
auto &builder = cgf.getBuilder();
64+
CIRGenBuilderTy &builder = cgf.getBuilder();
6565
mlir::Value orderingVal = cgf.emitScalarExpr(expr->getArg(0));
6666

6767
auto constOrdering = orderingVal.getDefiningOp<cir::ConstantOp>();
68-
if (!constOrdering)
69-
llvm_unreachable("NYI: variable ordering not supported");
70-
71-
if (auto constOrderingAttr = constOrdering.getValueAttr<cir::IntAttr>()) {
72-
cir::MemOrder ordering =
73-
static_cast<cir::MemOrder>(constOrderingAttr.getUInt());
7468

75-
cir::AtomicFence::create(
76-
builder, cgf.getLoc(expr->getSourceRange()), ordering,
77-
cir::SyncScopeKindAttr::get(&cgf.getMLIRContext(), syncScope));
69+
if (!constOrdering) {
70+
// TODO(cir): Emit code to switch on `orderingVal`,
71+
// and creating the fence op for valid values.
72+
cgf.cgm.errorNYI("Variable atomic fence ordering");
73+
return {};
7874
}
7975

76+
auto constOrderingAttr = constOrdering.getValueAttr<cir::IntAttr>();
77+
assert(constOrderingAttr && "Expected integer constant for ordering");
78+
79+
auto ordering =
80+
static_cast<cir::MemOrder>(constOrderingAttr.getUInt());
81+
82+
cir::AtomicFence::create(
83+
builder, cgf.getLoc(expr->getSourceRange()), ordering,
84+
cir::SyncScopeKindAttr::get(&cgf.getMLIRContext(), syncScope));
85+
8086
return {};
8187
}
8288

0 commit comments

Comments
 (0)