Skip to content

Commit 96960e3

Browse files
committed
Comments
1 parent 65f5c16 commit 96960e3

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
@@ -5179,13 +5179,12 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
51795179

51805180
Value *Order = EmitScalarExpr(E->getArg(0));
51815181
Value *Scope = EmitScalarExpr(E->getArg(1));
5182-
if (isa<llvm::ConstantInt>(Order) && isa<llvm::ConstantInt>(Scope)) {
5183-
int Ord = cast<llvm::ConstantInt>(Order)->getZExtValue();
5184-
int Scp = cast<llvm::ConstantInt>(Scope)->getZExtValue();
5185-
SyncScope SS = ScopeModel->isValid(Scp)
5186-
? ScopeModel->map(Scp)
5182+
if (auto Ord = dyn_cast<llvm::ConstantInt>(Order);
5183+
auto Scp = dyn_cast<llvm::ConstantInt>(Scope)) {
5184+
SyncScope SS = ScopeModel->isValid(Scp->getZExtValue())
5185+
? ScopeModel->map(Scp->getZExtValue())
51875186
: ScopeModel->map(ScopeModel->getFallBackValue());
5188-
switch (Ord) {
5187+
switch (Ord->getZExtValue()) {
51895188
case 0: // memory_order_relaxed
51905189
default: // invalid order
51915190
break;
@@ -5224,7 +5223,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
52245223

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

5227-
llvm::DenseMap<llvm::BasicBlock *, llvm::AtomicOrdering> OrderBBs;
5226+
llvm::SmallVector<std::pair<llvm::BasicBlock *, llvm::AtomicOrdering>>
5227+
OrderBBs;
52285228
if (auto Ord = dyn_cast<llvm::ConstantInt>(Order)) {
52295229
switch (Ord->getZExtValue()) {
52305230
case 0: // memory_order_relaxed
@@ -5233,18 +5233,20 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
52335233
return RValue::get(nullptr);
52345234
case 1: // memory_order_consume
52355235
case 2: // memory_order_acquire
5236-
OrderBBs[Builder.GetInsertBlock()] = llvm::AtomicOrdering::Acquire;
5236+
OrderBBs.emplace_back(Builder.GetInsertBlock(),
5237+
llvm::AtomicOrdering::Acquire);
52375238
break;
52385239
case 3: // memory_order_release
5239-
OrderBBs[Builder.GetInsertBlock()] = llvm::AtomicOrdering::Release;
5240+
OrderBBs.emplace_back(Builder.GetInsertBlock(),
5241+
llvm::AtomicOrdering::Release);
52405242
break;
52415243
case 4: // memory_order_acq_rel
5242-
OrderBBs[Builder.GetInsertBlock()] =
5243-
llvm::AtomicOrdering::AcquireRelease;
5244+
OrderBBs.emplace_back(Builder.GetInsertBlock(),
5245+
llvm::AtomicOrdering::AcquireRelease);
52445246
break;
52455247
case 5: // memory_order_seq_cst
5246-
OrderBBs[Builder.GetInsertBlock()] =
5247-
llvm::AtomicOrdering::SequentiallyConsistent;
5248+
OrderBBs.emplace_back(Builder.GetInsertBlock(),
5249+
llvm::AtomicOrdering::SequentiallyConsistent);
52485250
break;
52495251
}
52505252
} else {
@@ -5261,10 +5263,11 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
52615263
SI->addCase(Builder.getInt32(4), AcqRelBB);
52625264
SI->addCase(Builder.getInt32(5), SeqCstBB);
52635265

5264-
OrderBBs[AcquireBB] = llvm::AtomicOrdering::Acquire;
5265-
OrderBBs[ReleaseBB] = llvm::AtomicOrdering::Release;
5266-
OrderBBs[AcqRelBB] = llvm::AtomicOrdering::AcquireRelease;
5267-
OrderBBs[SeqCstBB] = llvm::AtomicOrdering::SequentiallyConsistent;
5266+
OrderBBs.emplace_back(AcquireBB, llvm::AtomicOrdering::Acquire);
5267+
OrderBBs.emplace_back(ReleaseBB, llvm::AtomicOrdering::Release);
5268+
OrderBBs.emplace_back(AcqRelBB, llvm::AtomicOrdering::AcquireRelease);
5269+
OrderBBs.emplace_back(SeqCstBB,
5270+
llvm::AtomicOrdering::SequentiallyConsistent);
52685271
}
52695272

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

0 commit comments

Comments
 (0)