Skip to content

Commit a6e71cb

Browse files
committed
Comments
1 parent e8896fd commit a6e71cb

File tree

1 file changed

+20
-17
lines changed

1 file changed

+20
-17
lines changed

clang/lib/CodeGen/CGBuiltin.cpp

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5167,13 +5167,12 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
51675167

51685168
Value *Order = EmitScalarExpr(E->getArg(0));
51695169
Value *Scope = EmitScalarExpr(E->getArg(1));
5170-
if (isa<llvm::ConstantInt>(Order) && isa<llvm::ConstantInt>(Scope)) {
5171-
int Ord = cast<llvm::ConstantInt>(Order)->getZExtValue();
5172-
int Scp = cast<llvm::ConstantInt>(Scope)->getZExtValue();
5173-
SyncScope SS = ScopeModel->isValid(Scp)
5174-
? ScopeModel->map(Scp)
5170+
if (auto Ord = dyn_cast<llvm::ConstantInt>(Order);
5171+
auto Scp = dyn_cast<llvm::ConstantInt>(Scope)) {
5172+
SyncScope SS = ScopeModel->isValid(Scp->getZExtValue())
5173+
? ScopeModel->map(Scp->getZExtValue())
51755174
: ScopeModel->map(ScopeModel->getFallBackValue());
5176-
switch (Ord) {
5175+
switch (Ord->getZExtValue()) {
51775176
case 0: // memory_order_relaxed
51785177
default: // invalid order
51795178
break;
@@ -5212,7 +5211,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
52125211

52135212
llvm::BasicBlock *ContBB = createBasicBlock("atomic.scope.continue", CurFn);
52145213

5215-
llvm::DenseMap<llvm::BasicBlock *, llvm::AtomicOrdering> OrderBBs;
5214+
llvm::SmallVector<std::pair<llvm::BasicBlock *, llvm::AtomicOrdering>>
5215+
OrderBBs;
52165216
if (auto Ord = dyn_cast<llvm::ConstantInt>(Order)) {
52175217
switch (Ord->getZExtValue()) {
52185218
case 0: // memory_order_relaxed
@@ -5221,18 +5221,20 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
52215221
return RValue::get(nullptr);
52225222
case 1: // memory_order_consume
52235223
case 2: // memory_order_acquire
5224-
OrderBBs[Builder.GetInsertBlock()] = llvm::AtomicOrdering::Acquire;
5224+
OrderBBs.emplace_back(Builder.GetInsertBlock(),
5225+
llvm::AtomicOrdering::Acquire);
52255226
break;
52265227
case 3: // memory_order_release
5227-
OrderBBs[Builder.GetInsertBlock()] = llvm::AtomicOrdering::Release;
5228+
OrderBBs.emplace_back(Builder.GetInsertBlock(),
5229+
llvm::AtomicOrdering::Release);
52285230
break;
52295231
case 4: // memory_order_acq_rel
5230-
OrderBBs[Builder.GetInsertBlock()] =
5231-
llvm::AtomicOrdering::AcquireRelease;
5232+
OrderBBs.emplace_back(Builder.GetInsertBlock(),
5233+
llvm::AtomicOrdering::AcquireRelease);
52325234
break;
52335235
case 5: // memory_order_seq_cst
5234-
OrderBBs[Builder.GetInsertBlock()] =
5235-
llvm::AtomicOrdering::SequentiallyConsistent;
5236+
OrderBBs.emplace_back(Builder.GetInsertBlock(),
5237+
llvm::AtomicOrdering::SequentiallyConsistent);
52365238
break;
52375239
}
52385240
} else {
@@ -5249,10 +5251,11 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
52495251
SI->addCase(Builder.getInt32(4), AcqRelBB);
52505252
SI->addCase(Builder.getInt32(5), SeqCstBB);
52515253

5252-
OrderBBs[AcquireBB] = llvm::AtomicOrdering::Acquire;
5253-
OrderBBs[ReleaseBB] = llvm::AtomicOrdering::Release;
5254-
OrderBBs[AcqRelBB] = llvm::AtomicOrdering::AcquireRelease;
5255-
OrderBBs[SeqCstBB] = llvm::AtomicOrdering::SequentiallyConsistent;
5254+
OrderBBs.emplace_back(AcquireBB, llvm::AtomicOrdering::Acquire);
5255+
OrderBBs.emplace_back(ReleaseBB, llvm::AtomicOrdering::Release);
5256+
OrderBBs.emplace_back(AcqRelBB, llvm::AtomicOrdering::AcquireRelease);
5257+
OrderBBs.emplace_back(SeqCstBB,
5258+
llvm::AtomicOrdering::SequentiallyConsistent);
52565259
}
52575260

52585261
for (auto &[OrderBB, Ordering] : OrderBBs) {

0 commit comments

Comments
 (0)