Skip to content

Commit f455898

Browse files
committed
IRGen: Remove calls to ProtocolConformanceRef::getAssociatedType()
1 parent ba6ff41 commit f455898

File tree

1 file changed

+11
-27
lines changed

1 file changed

+11
-27
lines changed

lib/IRGen/GenProto.cpp

Lines changed: 11 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1468,12 +1468,10 @@ class AccessorConformanceInfo : public ConformanceInfo {
14681468

14691469
void defineAssociatedTypeWitnessTableAccessFunction(
14701470
AssociatedConformance requirement,
1471-
CanType associatedType,
14721471
ProtocolConformanceRef conformance);
14731472

14741473
llvm::Constant *getAssociatedConformanceWitness(
14751474
AssociatedConformance requirement,
1476-
CanType associatedType,
14771475
ProtocolConformanceRef conformance);
14781476

14791477
const FulfillmentMap &getFulfillmentMap() {
@@ -1765,10 +1763,6 @@ class AccessorConformanceInfo : public ConformanceInfo {
17651763
return;
17661764
}
17671765

1768-
auto associate =
1769-
ConformanceInContext.getAssociatedType(
1770-
requirement.getAssociation())->getCanonicalType();
1771-
17721766
ProtocolConformanceRef associatedConformance =
17731767
ConformanceInContext.getAssociatedConformance(
17741768
requirement.getAssociation(),
@@ -1802,8 +1796,7 @@ class AccessorConformanceInfo : public ConformanceInfo {
18021796
}
18031797

18041798
llvm::Constant *witnessEntry =
1805-
getAssociatedConformanceWitness(requirement, associate,
1806-
associatedConformance);
1799+
getAssociatedConformanceWitness(requirement, associatedConformance);
18071800

18081801
if (isRelative) {
18091802
Table.addRelativeAddress(witnessEntry);
@@ -1869,19 +1862,17 @@ static void buildAssociatedTypeValueName(CanType depAssociatedType,
18691862

18701863
llvm::Constant *WitnessTableBuilderBase::getAssociatedConformanceWitness(
18711864
AssociatedConformance requirement,
1872-
CanType associatedType,
18731865
ProtocolConformanceRef conformance) {
1874-
defineAssociatedTypeWitnessTableAccessFunction(requirement, associatedType,
1875-
conformance);
1866+
defineAssociatedTypeWitnessTableAccessFunction(requirement, conformance);
18761867
assert(isa<NormalProtocolConformance>(Conformance) && "has associated type");
18771868
auto conf = cast<NormalProtocolConformance>(&Conformance);
18781869
return IGM.getMangledAssociatedConformance(conf, requirement);
18791870
}
18801871

18811872
void WitnessTableBuilderBase::defineAssociatedTypeWitnessTableAccessFunction(
18821873
AssociatedConformance requirement,
1883-
CanType associatedType,
18841874
ProtocolConformanceRef associatedConformance) {
1875+
auto associatedType = associatedConformance.getType()->getCanonicalType();
18851876
bool hasArchetype = associatedType->hasArchetype();
18861877
bool isOpaqueArchetype = isa<OpaqueTypeArchetypeType>(associatedType);
18871878

@@ -1926,8 +1917,6 @@ void WitnessTableBuilderBase::defineAssociatedTypeWitnessTableAccessFunction(
19261917
const ConformanceInfo *conformanceI = nullptr;
19271918

19281919
if (associatedConformance.isConcrete()) {
1929-
assert(associatedType->isEqual(associatedConformance.getConcrete()->getType()));
1930-
19311920
conformanceI = &IGM.getConformanceInfo(associatedProtocol,
19321921
associatedConformance.getConcrete());
19331922

@@ -2023,10 +2012,6 @@ void ResilientWitnessTableBuilder::collectResilientWitnesses(
20232012
if (entry.getKind() == SILWitnessTable::AssociatedConformance) {
20242013
const auto &witness = entry.getAssociatedConformanceWitness();
20252014

2026-
auto associate =
2027-
ConformanceInContext.getAssociatedType(
2028-
witness.Requirement)->getCanonicalType();
2029-
20302015
ProtocolConformanceRef associatedConformance =
20312016
ConformanceInContext.getAssociatedConformance(witness.Requirement,
20322017
witness.Witness.getProtocol());
@@ -2036,8 +2021,7 @@ void ResilientWitnessTableBuilder::collectResilientWitnesses(
20362021
witness.Witness.getProtocol());
20372022

20382023
llvm::Constant *witnessEntry =
2039-
getAssociatedConformanceWitness(requirement, associate,
2040-
associatedConformance);
2024+
getAssociatedConformanceWitness(requirement, associatedConformance);
20412025
resilientWitnesses.push_back(witnessEntry);
20422026
continue;
20432027
}
@@ -2052,8 +2036,7 @@ void ResilientWitnessTableBuilder::collectResilientWitnesses(
20522036
ProtocolConformanceRef inheritedConformance =
20532037
ConformanceInContext.getAssociatedConformance(selfType, baseProto);
20542038
llvm::Constant *witnessEntry =
2055-
getAssociatedConformanceWitness(requirement, ConcreteType,
2056-
inheritedConformance);
2039+
getAssociatedConformanceWitness(requirement, inheritedConformance);
20572040
resilientWitnesses.push_back(witnessEntry);
20582041
continue;
20592042
}
@@ -3448,12 +3431,12 @@ MetadataResponse MetadataPath::followComponent(IRGenFunction &IGF,
34483431
auto association = entry.getAssociatedConformancePath();
34493432
auto associatedRequirement = entry.getAssociatedConformanceRequirement();
34503433

3451-
CanType associatedType = sourceConformance.getAssociatedType(association)
3452-
->getCanonicalType();
3453-
sourceKey.Type = associatedType;
34543434

34553435
auto associatedConformance =
34563436
sourceConformance.getAssociatedConformance(association, associatedRequirement);
3437+
auto associatedType = associatedConformance.getType()->getCanonicalType();
3438+
3439+
sourceKey.Type = associatedType;
34573440
sourceKey.Kind =
34583441
LocalTypeDataKind::forProtocolWitnessTable(associatedConformance);
34593442

@@ -3526,8 +3509,9 @@ MetadataResponse MetadataPath::followComponent(IRGenFunction &IGF,
35263509
// type directly.
35273510
auto depMemType = cast<DependentMemberType>(association);
35283511
CanType baseSubstType =
3529-
sourceConformance.getAssociatedType(depMemType.getBase())
3530-
->getCanonicalType();
3512+
depMemType.getBase().subst(
3513+
SubstitutionMap::getProtocolSubstitutions(sourceConformance))
3514+
->getCanonicalType();
35313515
if (auto archetypeType = dyn_cast<ArchetypeType>(baseSubstType)) {
35323516
AssociatedType baseAssocType(depMemType->getAssocType());
35333517

0 commit comments

Comments
 (0)