@@ -221,11 +221,13 @@ namespace {
221
221
// / \param IsWeak true if atomic operation is weak, false otherwise.
222
222
// / \returns Pair of values: previous value from storage (value type) and
223
223
// / boolean flag (i1 type) with true if success and false otherwise.
224
- std::pair<RValue, llvm::Value *> EmitAtomicCompareExchange (
225
- RValue Expected, RValue Desired,
226
- llvm::AtomicOrdering Success = llvm::SequentiallyConsistent,
227
- llvm::AtomicOrdering Failure = llvm::SequentiallyConsistent,
228
- bool IsWeak = false );
224
+ std::pair<RValue, llvm::Value *>
225
+ EmitAtomicCompareExchange (RValue Expected, RValue Desired,
226
+ llvm::AtomicOrdering Success =
227
+ llvm::AtomicOrdering::SequentiallyConsistent,
228
+ llvm::AtomicOrdering Failure =
229
+ llvm::AtomicOrdering::SequentiallyConsistent,
230
+ bool IsWeak = false );
229
231
230
232
// / \brief Emits atomic update.
231
233
// / \param AO Atomic ordering.
@@ -260,13 +262,17 @@ namespace {
260
262
// / \brief Emits atomic compare-and-exchange op as a libcall.
261
263
llvm::Value *EmitAtomicCompareExchangeLibcall (
262
264
llvm::Value *ExpectedAddr, llvm::Value *DesiredAddr,
263
- llvm::AtomicOrdering Success = llvm::SequentiallyConsistent,
264
- llvm::AtomicOrdering Failure = llvm::SequentiallyConsistent);
265
+ llvm::AtomicOrdering Success =
266
+ llvm::AtomicOrdering::SequentiallyConsistent,
267
+ llvm::AtomicOrdering Failure =
268
+ llvm::AtomicOrdering::SequentiallyConsistent);
265
269
// / \brief Emits atomic compare-and-exchange op as LLVM instruction.
266
270
std::pair<llvm::Value *, llvm::Value *> EmitAtomicCompareExchangeOp (
267
271
llvm::Value *ExpectedVal, llvm::Value *DesiredVal,
268
- llvm::AtomicOrdering Success = llvm::SequentiallyConsistent,
269
- llvm::AtomicOrdering Failure = llvm::SequentiallyConsistent,
272
+ llvm::AtomicOrdering Success =
273
+ llvm::AtomicOrdering::SequentiallyConsistent,
274
+ llvm::AtomicOrdering Failure =
275
+ llvm::AtomicOrdering::SequentiallyConsistent,
270
276
bool IsWeak = false );
271
277
// / \brief Emit atomic update as libcalls.
272
278
void
@@ -289,17 +295,17 @@ namespace {
289
295
AtomicExpr::AtomicOrderingKind
290
296
AtomicInfo::translateAtomicOrdering (const llvm::AtomicOrdering AO) {
291
297
switch (AO) {
292
- case llvm::Unordered:
293
- case llvm::NotAtomic:
294
- case llvm::Monotonic:
298
+ case llvm::AtomicOrdering:: Unordered:
299
+ case llvm::AtomicOrdering:: NotAtomic:
300
+ case llvm::AtomicOrdering:: Monotonic:
295
301
return AtomicExpr::AO_ABI_memory_order_relaxed;
296
- case llvm::Acquire:
302
+ case llvm::AtomicOrdering:: Acquire:
297
303
return AtomicExpr::AO_ABI_memory_order_acquire;
298
- case llvm::Release:
304
+ case llvm::AtomicOrdering:: Release:
299
305
return AtomicExpr::AO_ABI_memory_order_release;
300
- case llvm::AcquireRelease:
306
+ case llvm::AtomicOrdering:: AcquireRelease:
301
307
return AtomicExpr::AO_ABI_memory_order_acq_rel;
302
- case llvm::SequentiallyConsistent:
308
+ case llvm::AtomicOrdering:: SequentiallyConsistent:
303
309
return AtomicExpr::AO_ABI_memory_order_seq_cst;
304
310
}
305
311
llvm_unreachable (" Unhandled AtomicOrdering" );
@@ -431,14 +437,14 @@ static void emitAtomicCmpXchgFailureSet(CodeGenFunction &CGF, AtomicExpr *E,
431
437
if (llvm::ConstantInt *FO = dyn_cast<llvm::ConstantInt>(FailureOrderVal)) {
432
438
switch (FO->getSExtValue ()) {
433
439
default :
434
- FailureOrder = llvm::Monotonic;
440
+ FailureOrder = llvm::AtomicOrdering:: Monotonic;
435
441
break ;
436
442
case AtomicExpr::AO_ABI_memory_order_consume:
437
443
case AtomicExpr::AO_ABI_memory_order_acquire:
438
- FailureOrder = llvm::Acquire;
444
+ FailureOrder = llvm::AtomicOrdering:: Acquire;
439
445
break ;
440
446
case AtomicExpr::AO_ABI_memory_order_seq_cst:
441
- FailureOrder = llvm::SequentiallyConsistent;
447
+ FailureOrder = llvm::AtomicOrdering:: SequentiallyConsistent;
442
448
break ;
443
449
}
444
450
if (FailureOrder >= SuccessOrder) {
@@ -455,9 +461,10 @@ static void emitAtomicCmpXchgFailureSet(CodeGenFunction &CGF, AtomicExpr *E,
455
461
llvm::BasicBlock *MonotonicBB = nullptr , *AcquireBB = nullptr ,
456
462
*SeqCstBB = nullptr ;
457
463
MonotonicBB = CGF.createBasicBlock (" monotonic_fail" , CGF.CurFn );
458
- if (SuccessOrder != llvm::Monotonic && SuccessOrder != llvm::Release)
464
+ if (SuccessOrder != llvm::AtomicOrdering::Monotonic &&
465
+ SuccessOrder != llvm::AtomicOrdering::Release)
459
466
AcquireBB = CGF.createBasicBlock (" acquire_fail" , CGF.CurFn );
460
- if (SuccessOrder == llvm::SequentiallyConsistent)
467
+ if (SuccessOrder == llvm::AtomicOrdering:: SequentiallyConsistent)
461
468
SeqCstBB = CGF.createBasicBlock (" seqcst_fail" , CGF.CurFn );
462
469
463
470
llvm::BasicBlock *ContBB = CGF.createBasicBlock (" atomic.continue" , CGF.CurFn );
@@ -471,13 +478,13 @@ static void emitAtomicCmpXchgFailureSet(CodeGenFunction &CGF, AtomicExpr *E,
471
478
// doesn't fold to a constant for the ordering.
472
479
CGF.Builder .SetInsertPoint (MonotonicBB);
473
480
emitAtomicCmpXchg (CGF, E, IsWeak, Dest, Ptr , Val1, Val2,
474
- Size , SuccessOrder, llvm::Monotonic);
481
+ Size , SuccessOrder, llvm::AtomicOrdering:: Monotonic);
475
482
CGF.Builder .CreateBr (ContBB);
476
483
477
484
if (AcquireBB) {
478
485
CGF.Builder .SetInsertPoint (AcquireBB);
479
486
emitAtomicCmpXchg (CGF, E, IsWeak, Dest, Ptr , Val1, Val2,
480
- Size , SuccessOrder, llvm::Acquire);
487
+ Size , SuccessOrder, llvm::AtomicOrdering:: Acquire);
481
488
CGF.Builder .CreateBr (ContBB);
482
489
SI->addCase (CGF.Builder .getInt32 (AtomicExpr::AO_ABI_memory_order_consume),
483
490
AcquireBB);
@@ -486,8 +493,8 @@ static void emitAtomicCmpXchgFailureSet(CodeGenFunction &CGF, AtomicExpr *E,
486
493
}
487
494
if (SeqCstBB) {
488
495
CGF.Builder .SetInsertPoint (SeqCstBB);
489
- emitAtomicCmpXchg (CGF, E, IsWeak, Dest, Ptr , Val1, Val2,
490
- Size , SuccessOrder, llvm::SequentiallyConsistent);
496
+ emitAtomicCmpXchg (CGF, E, IsWeak, Dest, Ptr , Val1, Val2, Size , SuccessOrder,
497
+ llvm::AtomicOrdering ::SequentiallyConsistent);
491
498
CGF.Builder .CreateBr (ContBB);
492
499
SI->addCase (CGF.Builder .getInt32 (AtomicExpr::AO_ABI_memory_order_seq_cst),
493
500
SeqCstBB);
@@ -1040,30 +1047,30 @@ RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {
1040
1047
switch (ord) {
1041
1048
case AtomicExpr::AO_ABI_memory_order_relaxed:
1042
1049
EmitAtomicOp (*this , E, Dest, Ptr , Val1, Val2, IsWeak, OrderFail,
1043
- Size , llvm::Monotonic);
1050
+ Size , llvm::AtomicOrdering:: Monotonic);
1044
1051
break ;
1045
1052
case AtomicExpr::AO_ABI_memory_order_consume:
1046
1053
case AtomicExpr::AO_ABI_memory_order_acquire:
1047
1054
if (IsStore)
1048
1055
break ; // Avoid crashing on code with undefined behavior
1049
1056
EmitAtomicOp (*this , E, Dest, Ptr , Val1, Val2, IsWeak, OrderFail,
1050
- Size , llvm::Acquire);
1057
+ Size , llvm::AtomicOrdering:: Acquire);
1051
1058
break ;
1052
1059
case AtomicExpr::AO_ABI_memory_order_release:
1053
1060
if (IsLoad)
1054
1061
break ; // Avoid crashing on code with undefined behavior
1055
1062
EmitAtomicOp (*this , E, Dest, Ptr , Val1, Val2, IsWeak, OrderFail,
1056
- Size , llvm::Release);
1063
+ Size , llvm::AtomicOrdering:: Release);
1057
1064
break ;
1058
1065
case AtomicExpr::AO_ABI_memory_order_acq_rel:
1059
1066
if (IsLoad || IsStore)
1060
1067
break ; // Avoid crashing on code with undefined behavior
1061
1068
EmitAtomicOp (*this , E, Dest, Ptr , Val1, Val2, IsWeak, OrderFail,
1062
- Size , llvm::AcquireRelease);
1069
+ Size , llvm::AtomicOrdering:: AcquireRelease);
1063
1070
break ;
1064
1071
case AtomicExpr::AO_ABI_memory_order_seq_cst:
1065
1072
EmitAtomicOp (*this , E, Dest, Ptr , Val1, Val2, IsWeak, OrderFail,
1066
- Size , llvm::SequentiallyConsistent);
1073
+ Size , llvm::AtomicOrdering:: SequentiallyConsistent);
1067
1074
break ;
1068
1075
default : // invalid order
1069
1076
// We should not ever get here normally, but it's hard to
@@ -1104,12 +1111,12 @@ RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {
1104
1111
// Emit all the different atomics
1105
1112
Builder.SetInsertPoint (MonotonicBB);
1106
1113
EmitAtomicOp (*this , E, Dest, Ptr , Val1, Val2, IsWeak, OrderFail,
1107
- Size , llvm::Monotonic);
1114
+ Size , llvm::AtomicOrdering:: Monotonic);
1108
1115
Builder.CreateBr (ContBB);
1109
1116
if (!IsStore) {
1110
1117
Builder.SetInsertPoint (AcquireBB);
1111
1118
EmitAtomicOp (*this , E, Dest, Ptr , Val1, Val2, IsWeak, OrderFail,
1112
- Size , llvm::Acquire);
1119
+ Size , llvm::AtomicOrdering:: Acquire);
1113
1120
Builder.CreateBr (ContBB);
1114
1121
SI->addCase (Builder.getInt32 (AtomicExpr::AO_ABI_memory_order_consume),
1115
1122
AcquireBB);
@@ -1119,22 +1126,22 @@ RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {
1119
1126
if (!IsLoad) {
1120
1127
Builder.SetInsertPoint (ReleaseBB);
1121
1128
EmitAtomicOp (*this , E, Dest, Ptr , Val1, Val2, IsWeak, OrderFail,
1122
- Size , llvm::Release);
1129
+ Size , llvm::AtomicOrdering:: Release);
1123
1130
Builder.CreateBr (ContBB);
1124
1131
SI->addCase (Builder.getInt32 (AtomicExpr::AO_ABI_memory_order_release),
1125
1132
ReleaseBB);
1126
1133
}
1127
1134
if (!IsLoad && !IsStore) {
1128
1135
Builder.SetInsertPoint (AcqRelBB);
1129
1136
EmitAtomicOp (*this , E, Dest, Ptr , Val1, Val2, IsWeak, OrderFail,
1130
- Size , llvm::AcquireRelease);
1137
+ Size , llvm::AtomicOrdering:: AcquireRelease);
1131
1138
Builder.CreateBr (ContBB);
1132
1139
SI->addCase (Builder.getInt32 (AtomicExpr::AO_ABI_memory_order_acq_rel),
1133
1140
AcqRelBB);
1134
1141
}
1135
1142
Builder.SetInsertPoint (SeqCstBB);
1136
1143
EmitAtomicOp (*this , E, Dest, Ptr , Val1, Val2, IsWeak, OrderFail,
1137
- Size , llvm::SequentiallyConsistent);
1144
+ Size , llvm::AtomicOrdering:: SequentiallyConsistent);
1138
1145
Builder.CreateBr (ContBB);
1139
1146
SI->addCase (Builder.getInt32 (AtomicExpr::AO_ABI_memory_order_seq_cst),
1140
1147
SeqCstBB);
@@ -1318,9 +1325,9 @@ RValue CodeGenFunction::EmitAtomicLoad(LValue LV, SourceLocation SL,
1318
1325
llvm::AtomicOrdering AO;
1319
1326
bool IsVolatile = LV.isVolatileQualified ();
1320
1327
if (LV.getType ()->isAtomicType ()) {
1321
- AO = llvm::SequentiallyConsistent;
1328
+ AO = llvm::AtomicOrdering:: SequentiallyConsistent;
1322
1329
} else {
1323
- AO = llvm::Acquire;
1330
+ AO = llvm::AtomicOrdering:: Acquire;
1324
1331
IsVolatile = true ;
1325
1332
}
1326
1333
return EmitAtomicLoad (LV, SL, AO, IsVolatile, Slot);
@@ -1739,9 +1746,9 @@ void CodeGenFunction::EmitAtomicStore(RValue rvalue, LValue lvalue,
1739
1746
bool IsVolatile = lvalue.isVolatileQualified ();
1740
1747
llvm::AtomicOrdering AO;
1741
1748
if (lvalue.getType ()->isAtomicType ()) {
1742
- AO = llvm::SequentiallyConsistent;
1749
+ AO = llvm::AtomicOrdering:: SequentiallyConsistent;
1743
1750
} else {
1744
- AO = llvm::Release;
1751
+ AO = llvm::AtomicOrdering:: Release;
1745
1752
IsVolatile = true ;
1746
1753
}
1747
1754
return EmitAtomicStore (rvalue, lvalue, AO, IsVolatile, isInit);
0 commit comments