Skip to content

Commit a9db867

Browse files
committed
Implement partial specialization behind a flag.
Partial specialization is disabled by default. Use -sil-partial-specialization to enable it. Use -sil-partial-specialization-with-generic-substitutions to enable the partial specialization even in cases of substitutions containing generic replacement types.
1 parent 335a6c3 commit a9db867

File tree

3 files changed

+466
-92
lines changed

3 files changed

+466
-92
lines changed

include/swift/SILOptimizer/Utils/Generics.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,15 @@ class ReabstractionInfo {
115115
bool HasUnboundGenericParams);
116116

117117
void createSubstitutedAndSpecializedTypes();
118+
bool prepareAndCheck(ApplySite Apply, SILFunction *Callee,
119+
SubstitutionList ParamSubs);
120+
void specializeConcreteAndGenericSubstitutions(ApplySite Apply,
121+
SILFunction *Callee,
122+
SubstitutionList ParamSubs);
123+
void specializeConcreteSubstitutions(ApplySite Apply, SILFunction *Callee,
124+
SubstitutionList ParamSubs);
125+
126+
ReabstractionInfo() {}
118127
public:
119128
/// Constructs the ReabstractionInfo for generic function \p Orig with
120129
/// substitutions \p ParamSubs.
@@ -219,6 +228,10 @@ class ReabstractionInfo {
219228

220229
/// Returns true if it is a partial generic specialization.
221230
bool isPartialSpecialization() const;
231+
232+
/// Returns true if a given apply can be specialized.
233+
static bool canBeSpecialized(ApplySite Apply, SILFunction *Callee,
234+
SubstitutionList ParamSubs);
222235
};
223236

224237
/// Helper class for specializing a generic function given a list of

lib/SILOptimizer/Transforms/PerformanceInliner.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -316,8 +316,7 @@ SILFunction *SILPerformanceInliner::getEligibleFunction(FullApplySite AI) {
316316
// specialization for a given call.
317317
static bool canSpecializeGeneric(ApplySite AI, SILFunction *F,
318318
SubstitutionList Subs) {
319-
ReabstractionInfo ReInfo(AI, F, Subs);
320-
return ReInfo.canBeSpecialized();
319+
return ReabstractionInfo::canBeSpecialized(AI, F, Subs);
321320
}
322321

323322
bool SILPerformanceInliner::isProfitableToInline(FullApplySite AI,

0 commit comments

Comments
 (0)