Skip to content

Commit a8cef44

Browse files
authored
Merge pull request #84513 from aidan-hall/pack-opt
Optimize Specializations of Variadic Generics by Eliminating Parameter Packs
2 parents 94949f3 + 8632e58 commit a8cef44

File tree

29 files changed

+2353
-50
lines changed

29 files changed

+2353
-50
lines changed

SwiftCompilerSources/Sources/AST/Type.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,8 @@ extension TypeProperties {
146146
public var isExistentialMetatype: Bool { rawType.bridged.isExistentialMetatypeType() }
147147
public var isDynamicSelf: Bool { rawType.bridged.isDynamicSelf()}
148148
public var isBox: Bool { rawType.bridged.isBox() }
149+
public var isPack: Bool { rawType.bridged.isPack() }
150+
public var isSILPack: Bool { rawType.bridged.isSILPack() }
149151

150152
public var canBeClass: Type.TraitResult { rawType.bridged.canBeClass().result }
151153

@@ -263,6 +265,14 @@ extension TypeProperties {
263265
public func checkConformance(to protocol: ProtocolDecl) -> Conformance {
264266
return Conformance(bridged: rawType.bridged.checkConformance(`protocol`.bridged))
265267
}
268+
269+
public var containsSILPackExpansionType: Bool {
270+
return rawType.bridged.containsSILPackExpansionType()
271+
}
272+
273+
public var isSILPackElementAddress: Bool {
274+
return rawType.bridged.isSILPackElementAddress()
275+
}
266276
}
267277

268278
public struct TypeArray : RandomAccessCollection, CustomReflectable {

SwiftCompilerSources/Sources/Optimizer/FunctionPasses/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,5 @@ swift_compiler_sources(Optimizer
3838
StripObjectHeaders.swift
3939
TempLValueElimination.swift
4040
TempRValueElimination.swift
41+
PackSpecialization.swift
4142
)

SwiftCompilerSources/Sources/Optimizer/FunctionPasses/ConstantCapturePropagation.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,8 @@ private func specializeClosure(specializedName: String,
152152
newParams.append(contentsOf: nonConstantArguments.map { partialApply.parameter(for: $0)! })
153153

154154
let isGeneric = newParams.contains { $0.type.hasTypeParameter } ||
155-
callee.convention.results.contains { $0.type.hasTypeParameter() } ||
156-
callee.convention.errorResult?.type.hasTypeParameter() ?? false
155+
callee.convention.results.contains { $0.type.hasTypeParameter } ||
156+
callee.convention.errorResult?.type.hasTypeParameter ?? false
157157

158158
let specializedClosure = context.createSpecializedFunctionDeclaration(from: callee,
159159
withName: specializedName,

0 commit comments

Comments
 (0)