Skip to content

Commit 8e86b5c

Browse files
committed
Optimizer: add a preserveGenericSignature flag to FunctionPassContext.createSpecializedFunctionDeclaration
1 parent 45b1a21 commit 8e86b5c

File tree

3 files changed

+14
-8
lines changed

3 files changed

+14
-8
lines changed

SwiftCompilerSources/Sources/Optimizer/PassManager/FunctionPassContext.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,14 +137,16 @@ struct FunctionPassContext : MutatingContext {
137137
func createSpecializedFunctionDeclaration(from original: Function, withName specializedFunctionName: String,
138138
withParams specializedParameters: [ParameterInfo],
139139
makeThin: Bool = false,
140-
makeBare: Bool = false) -> Function
140+
makeBare: Bool = false,
141+
preserveGenericSignature: Bool = true) -> Function
141142
{
142143
return specializedFunctionName._withBridgedStringRef { nameRef in
143144
let bridgedParamInfos = specializedParameters.map { $0._bridged }
144145

145146
return bridgedParamInfos.withUnsafeBufferPointer { paramBuf in
146147
bridgedPassContext.createSpecializedFunctionDeclaration(nameRef, paramBuf.baseAddress, paramBuf.count,
147-
original.bridged, makeThin, makeBare).function
148+
original.bridged, makeThin, makeBare,
149+
preserveGenericSignature).function
148150
}
149151
}
150152
}

include/swift/SILOptimizer/OptimizerBridging.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,8 @@ struct BridgedPassContext {
265265
SwiftInt paramCount,
266266
BridgedFunction bridgedOriginal,
267267
bool makeThin,
268-
bool makeBare) const;
268+
bool makeBare,
269+
bool preserveGenericSignature) const;
269270

270271
bool completeLifetime(BridgedValue value) const;
271272
};

lib/SILOptimizer/Utils/OptimizerBridging.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,8 @@ createSpecializedFunctionDeclaration(BridgedStringRef specializedName,
385385
SwiftInt paramCount,
386386
BridgedFunction bridgedOriginal,
387387
bool makeThin,
388-
bool makeBare) const {
388+
bool makeBare,
389+
bool preserveGenericSignature) const {
389390
auto *original = bridgedOriginal.getFunction();
390391
auto originalType = original->getLoweredFunctionType();
391392

@@ -402,13 +403,14 @@ createSpecializedFunctionDeclaration(BridgedStringRef specializedName,
402403
extInfo = extInfo.withRepresentation(SILFunctionTypeRepresentation::Thin);
403404

404405
auto ClonedTy = SILFunctionType::get(
405-
originalType->getInvocationGenericSignature(), extInfo,
406+
preserveGenericSignature ? originalType->getInvocationGenericSignature() : GenericSignature(),
407+
extInfo,
406408
originalType->getCoroutineKind(),
407409
originalType->getCalleeConvention(), specializedParams,
408410
originalType->getYields(), originalType->getResults(),
409411
originalType->getOptionalErrorResult(),
410-
originalType->getPatternSubstitutions(),
411-
originalType->getInvocationSubstitutions(),
412+
preserveGenericSignature ? originalType->getPatternSubstitutions() : SubstitutionMap(),
413+
preserveGenericSignature ? originalType->getInvocationSubstitutions() : SubstitutionMap(),
412414
original->getModule().getASTContext());
413415

414416
SILOptFunctionBuilder functionBuilder(*invocation->getTransform());
@@ -424,7 +426,8 @@ createSpecializedFunctionDeclaration(BridgedStringRef specializedName,
424426
// classes (the classSubclassScope), because that may incorrectly
425427
// influence the linkage.
426428
getSpecializedLinkage(original, original->getLinkage()), specializedName.unbridged(),
427-
ClonedTy, original->getGenericEnvironment(),
429+
ClonedTy,
430+
preserveGenericSignature ? original->getGenericEnvironment() : nullptr,
428431
original->getLocation(), makeBare ? IsBare : original->isBare(), original->isTransparent(),
429432
original->getSerializedKind(), IsNotDynamic, IsNotDistributed,
430433
IsNotRuntimeAccessible, original->getEntryCount(),

0 commit comments

Comments
 (0)