Skip to content

Commit afde159

Browse files
authored
Drop assert(Atomicity::Atomic) from visitRetainValueAddrInst+visitReleaseValueAddrInst (swiftlang#33913)
1 parent 31edc6c commit afde159

File tree

3 files changed

+13
-12
lines changed

3 files changed

+13
-12
lines changed

lib/IRGen/IRGenModule.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,10 +1020,10 @@ class IRGenModule {
10201020
bool setIsNoInline = false);
10211021

10221022
llvm::Constant *getOrCreateRetainFunction(const TypeInfo &objectTI, SILType t,
1023-
llvm::Type *llvmType);
1023+
llvm::Type *llvmType, Atomicity atomicity);
10241024

10251025
llvm::Constant *getOrCreateReleaseFunction(const TypeInfo &objectTI, SILType t,
1026-
llvm::Type *llvmType);
1026+
llvm::Type *llvmType, Atomicity atomicity);
10271027

10281028
llvm::Constant *getOrCreateOutlinedInitializeWithTakeFunction(
10291029
SILType objectType, const TypeInfo &objectTI,

lib/IRGen/IRGenSIL.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3629,15 +3629,15 @@ void IRGenSILFunction::visitRetainValueInst(swift::RetainValueInst *i) {
36293629
}
36303630

36313631
void IRGenSILFunction::visitRetainValueAddrInst(swift::RetainValueAddrInst *i) {
3632-
assert(i->getAtomicity() == RefCountingInst::Atomicity::Atomic &&
3633-
"Non atomic retains are not supported");
36343632
SILValue operandValue = i->getOperand();
36353633
Address addr = getLoweredAddress(operandValue);
36363634
SILType addrTy = operandValue->getType();
36373635
SILType objectT = addrTy.getObjectType();
36383636
llvm::Type *llvmType = addr.getAddress()->getType();
36393637
const TypeInfo &addrTI = getTypeInfo(addrTy);
3640-
auto *outlinedF = IGM.getOrCreateRetainFunction(addrTI, objectT, llvmType);
3638+
auto atomicity = i->isAtomic() ? Atomicity::Atomic : Atomicity::NonAtomic;
3639+
auto *outlinedF = IGM.getOrCreateRetainFunction(
3640+
addrTI, objectT, llvmType, atomicity);
36413641
llvm::Value *args[] = {addr.getAddress()};
36423642
llvm::CallInst *call = Builder.CreateCall(outlinedF, args);
36433643
call->setCallingConv(IGM.DefaultCC);
@@ -3704,16 +3704,15 @@ void IRGenSILFunction::visitReleaseValueInst(swift::ReleaseValueInst *i) {
37043704

37053705
void IRGenSILFunction::visitReleaseValueAddrInst(
37063706
swift::ReleaseValueAddrInst *i) {
3707-
assert(i->getAtomicity() == RefCountingInst::Atomicity::Atomic &&
3708-
"Non atomic retains are not supported");
37093707
SILValue operandValue = i->getOperand();
37103708
Address addr = getLoweredAddress(operandValue);
37113709
SILType addrTy = operandValue->getType();
37123710
SILType objectT = addrTy.getObjectType();
37133711
llvm::Type *llvmType = addr.getAddress()->getType();
37143712
const TypeInfo &addrTI = getTypeInfo(addrTy);
3713+
auto atomicity = i->isAtomic() ? Atomicity::Atomic : Atomicity::NonAtomic;
37153714
auto *outlinedF = IGM.getOrCreateReleaseFunction(
3716-
addrTI, objectT, llvmType);
3715+
addrTI, objectT, llvmType, atomicity);
37173716
llvm::Value *args[] = {addr.getAddress()};
37183717
llvm::CallInst *call = Builder.CreateCall(outlinedF, args);
37193718
call->setCallingConv(IGM.DefaultCC);

lib/IRGen/Outlining.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,8 @@ llvm::Constant *IRGenModule::getOrCreateOutlinedDestroyFunction(
396396

397397
llvm::Constant *IRGenModule::getOrCreateRetainFunction(const TypeInfo &ti,
398398
SILType t,
399-
llvm::Type *llvmType) {
399+
llvm::Type *llvmType,
400+
Atomicity atomicity) {
400401
auto *loadableTI = cast<LoadableTypeInfo>(&ti);
401402
IRGenMangler mangler;
402403
auto manglingBits =
@@ -412,7 +413,7 @@ llvm::Constant *IRGenModule::getOrCreateRetainFunction(const TypeInfo &ti,
412413
Explosion loaded;
413414
loadableTI->loadAsTake(IGF, addr, loaded);
414415
Explosion out;
415-
loadableTI->copy(IGF, loaded, out, irgen::Atomicity::Atomic);
416+
loadableTI->copy(IGF, loaded, out, atomicity);
416417
(void)out.claimAll();
417418
IGF.Builder.CreateRet(addr.getAddress());
418419
},
@@ -422,7 +423,8 @@ llvm::Constant *IRGenModule::getOrCreateRetainFunction(const TypeInfo &ti,
422423
llvm::Constant *
423424
IRGenModule::getOrCreateReleaseFunction(const TypeInfo &ti,
424425
SILType t,
425-
llvm::Type *llvmType) {
426+
llvm::Type *llvmType,
427+
Atomicity atomicity) {
426428
auto *loadableTI = cast<LoadableTypeInfo>(&ti);
427429
IRGenMangler mangler;
428430
auto manglingBits =
@@ -437,7 +439,7 @@ IRGenModule::getOrCreateReleaseFunction(const TypeInfo &ti,
437439
Address addr(&*it++, loadableTI->getFixedAlignment());
438440
Explosion loaded;
439441
loadableTI->loadAsTake(IGF, addr, loaded);
440-
loadableTI->consume(IGF, loaded, irgen::Atomicity::Atomic);
442+
loadableTI->consume(IGF, loaded, atomicity);
441443
IGF.Builder.CreateRet(addr.getAddress());
442444
},
443445
true /*setIsNoInline*/);

0 commit comments

Comments
 (0)