Skip to content

Commit 43fcb6c

Browse files
committed
More refactoring in FSO. NFC
1 parent 71c591b commit 43fcb6c

File tree

1 file changed

+40
-19
lines changed

1 file changed

+40
-19
lines changed

lib/SILOptimizer/IPO/FunctionSignatureOpts.cpp

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -842,11 +842,40 @@ SILFunction *SignatureOptimizer::createEmptyFunctionWithOptimizedSig(
842842
return NewF;
843843
}
844844

845-
static void addRetainsForConvertedDirectResults(SILBuilder &Builder,
846-
SILLocation Loc,
847-
SILValue ReturnValue,
848-
SILInstruction *AI,
849-
ArrayRef<ResultDescriptor> DirectResults) {
845+
static void
846+
addReleasesForConvertedOwnedParameter(SILBuilder &Builder,
847+
SILLocation Loc,
848+
ArrayRef<SILArgument*> Parameters,
849+
ArrayRef<ArgumentDescriptor> &ArgDescs) {
850+
// If we have any arguments that were consumed but are now guaranteed,
851+
// insert a release_value.
852+
for (auto &ArgDesc : ArgDescs) {
853+
if (ArgDesc.CalleeRelease.empty())
854+
continue;
855+
Builder.createReleaseValue(Loc, Parameters[ArgDesc.Index]);
856+
}
857+
}
858+
859+
static void
860+
addReleasesForConvertedOwnedParameter(SILBuilder &Builder,
861+
SILLocation Loc,
862+
OperandValueArrayRef Parameters,
863+
ArrayRef<ArgumentDescriptor> &ArgDescs) {
864+
// If we have any arguments that were consumed but are now guaranteed,
865+
// insert a release_value.
866+
for (auto &ArgDesc : ArgDescs) {
867+
if (ArgDesc.CalleeRelease.empty())
868+
continue;
869+
Builder.createReleaseValue(Loc, Parameters[ArgDesc.Index]);
870+
}
871+
}
872+
873+
static void
874+
addRetainsForConvertedDirectResults(SILBuilder &Builder,
875+
SILLocation Loc,
876+
SILValue ReturnValue,
877+
SILInstruction *AI,
878+
ArrayRef<ResultDescriptor> DirectResults) {
850879
for (auto I : indices(DirectResults)) {
851880
auto &RV = DirectResults[I];
852881
if (RV.CalleeRetain.empty()) continue;
@@ -930,13 +959,9 @@ static void rewriteApplyInstToCallNewFunction(SignatureOptimizer &Optimizer,
930959
TAI->getNormalBB()->begin());
931960
}
932961

933-
// If we have any arguments that were consumed but are now guaranteed,
934-
// insert a release_value.
935-
for (auto &ArgDesc : ArgDescs) {
936-
if (ArgDesc.CalleeRelease.empty())
937-
continue;
938-
Builder.createReleaseValue(Loc, FAS.getArgument(ArgDesc.Index));
939-
}
962+
// Add releases for the converted @owned to @guaranteed parameter.
963+
addReleasesForConvertedOwnedParameter(Builder, Loc, FAS.getArguments(),
964+
ArgDescs);
940965

941966
// If we have converted the return value from @owned to @guaranteed,
942967
// insert a retain_value at the callsite.
@@ -1008,13 +1033,9 @@ static void createThunkBody(SILBasicBlock *BB, SILFunction *NewF,
10081033
ArrayRef<Substitution>(), ThunkArgs, false);
10091034
}
10101035

1011-
// If we have any arguments that were consumed but are now guaranteed,
1012-
// insert a release_value.
1013-
for (auto &ArgDesc : ArgDescs) {
1014-
if (ArgDesc.CalleeRelease.empty())
1015-
continue;
1016-
Builder.createReleaseValue(Loc, BB->getBBArg(ArgDesc.Index));
1017-
}
1036+
// Add releases for the converted @owned to @guaranteed parameter.
1037+
addReleasesForConvertedOwnedParameter(Builder, Loc, BB->getBBArgs(),
1038+
ArgDescs);
10181039

10191040
// Handle @owned to @unowned return value conversion.
10201041
addRetainsForConvertedDirectResults(Builder, Loc, ReturnValue, nullptr,

0 commit comments

Comments
 (0)