Skip to content

Commit 3e99d11

Browse files
committed
SILGen: Stop forcing lazy conformances in SILGenSILBuilder
1 parent 891594a commit 3e99d11

File tree

2 files changed

+0
-136
lines changed

2 files changed

+0
-136
lines changed

lib/SILGen/SILGenSILBuilder.cpp

Lines changed: 0 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -47,128 +47,29 @@ SILGenSILBuilder::SILGenSILBuilder(SILGenFunction &SGF, SILBasicBlock *insertBB,
4747
// SILBuilder APIs directly.
4848
//
4949

50-
MetatypeInst *SILGenSILBuilder::createMetatype(SILLocation loc,
51-
SILType metatype) {
52-
auto theMetatype = metatype.castTo<MetatypeType>();
53-
// Getting a nontrivial metatype requires forcing any conformances necessary
54-
// to instantiate the type.
55-
switch (theMetatype->getRepresentation()) {
56-
case MetatypeRepresentation::Thin:
57-
break;
58-
case MetatypeRepresentation::Thick:
59-
case MetatypeRepresentation::ObjC: {
60-
// Walk the type recursively to look for substitutions we may need.
61-
theMetatype.getInstanceType().findIf([&](Type t) -> bool {
62-
auto *decl = t->getAnyNominal();
63-
if (!decl)
64-
return false;
65-
66-
if (isa<ProtocolDecl>(decl))
67-
return false;
68-
69-
auto *genericSig = decl->getGenericSignature();
70-
if (!genericSig)
71-
return false;
72-
73-
auto subMap =
74-
t->getContextSubstitutionMap(getSILGenModule().SwiftModule, decl);
75-
getSILGenModule().useConformancesFromSubstitutions(subMap);
76-
return false;
77-
});
78-
79-
break;
80-
}
81-
}
82-
83-
return SILBuilder::createMetatype(loc, metatype);
84-
}
85-
8650
ApplyInst *SILGenSILBuilder::createApply(SILLocation loc, SILValue fn,
8751
SILType substFnTy, SILType result,
8852
SubstitutionMap subs,
8953
ArrayRef<SILValue> args) {
90-
getSILGenModule().useConformancesFromSubstitutions(subs);
9154
return SILBuilder::createApply(loc, fn, subs, args, false);
9255
}
9356

9457
TryApplyInst *SILGenSILBuilder::createTryApply(
9558
SILLocation loc, SILValue fn, SILType substFnTy, SubstitutionMap subs,
9659
ArrayRef<SILValue> args, SILBasicBlock *normalBB, SILBasicBlock *errorBB) {
97-
getSILGenModule().useConformancesFromSubstitutions(subs);
9860
return SILBuilder::createTryApply(loc, fn, subs, args, normalBB, errorBB);
9961
}
10062

10163
BeginApplyInst *SILGenSILBuilder::createBeginApply(SILLocation loc, SILValue fn,
10264
SubstitutionMap subs,
10365
ArrayRef<SILValue> args) {
104-
getSILGenModule().useConformancesFromSubstitutions(subs);
10566
return SILBuilder::createBeginApply(loc, fn, subs, args, false);
10667
}
10768

10869
PartialApplyInst *SILGenSILBuilder::createPartialApply(
10970
SILLocation loc, SILValue fn, SILType substFnTy, SubstitutionMap subs,
11071
ArrayRef<SILValue> args, SILType closureTy) {
111-
getSILGenModule().useConformancesFromSubstitutions(subs);
11272
return SILBuilder::createPartialApply(
11373
loc, fn, subs, args,
11474
closureTy.getAs<SILFunctionType>()->getCalleeConvention());
11575
}
116-
117-
BuiltinInst *SILGenSILBuilder::createBuiltin(SILLocation loc, Identifier name,
118-
SILType resultTy,
119-
SubstitutionMap subs,
120-
ArrayRef<SILValue> args) {
121-
getSILGenModule().useConformancesFromSubstitutions(subs);
122-
return SILBuilder::createBuiltin(loc, name, resultTy, subs, args);
123-
}
124-
125-
InitExistentialAddrInst *SILGenSILBuilder::createInitExistentialAddr(
126-
SILLocation loc, SILValue existential, CanType formalConcreteType,
127-
SILType loweredConcreteType,
128-
ArrayRef<ProtocolConformanceRef> conformances) {
129-
for (auto conformance : conformances)
130-
getSILGenModule().useConformance(conformance);
131-
132-
return SILBuilder::createInitExistentialAddr(
133-
loc, existential, formalConcreteType, loweredConcreteType, conformances);
134-
}
135-
136-
InitExistentialValueInst *SILGenSILBuilder::createInitExistentialValue(
137-
SILLocation Loc, SILType ExistentialType, CanType FormalConcreteType,
138-
SILValue Concrete, ArrayRef<ProtocolConformanceRef> Conformances) {
139-
for (auto conformance : Conformances)
140-
getSILGenModule().useConformance(conformance);
141-
142-
return SILBuilder::createInitExistentialValue(
143-
Loc, ExistentialType, FormalConcreteType, Concrete, Conformances);
144-
}
145-
146-
InitExistentialMetatypeInst *SILGenSILBuilder::createInitExistentialMetatype(
147-
SILLocation loc, SILValue metatype, SILType existentialType,
148-
ArrayRef<ProtocolConformanceRef> conformances) {
149-
for (auto conformance : conformances)
150-
getSILGenModule().useConformance(conformance);
151-
152-
return SILBuilder::createInitExistentialMetatype(
153-
loc, metatype, existentialType, conformances);
154-
}
155-
156-
InitExistentialRefInst *SILGenSILBuilder::createInitExistentialRef(
157-
SILLocation loc, SILType existentialType, CanType formalConcreteType,
158-
SILValue concreteValue, ArrayRef<ProtocolConformanceRef> conformances) {
159-
for (auto conformance : conformances)
160-
getSILGenModule().useConformance(conformance);
161-
162-
return SILBuilder::createInitExistentialRef(
163-
loc, existentialType, formalConcreteType, concreteValue, conformances);
164-
}
165-
166-
AllocExistentialBoxInst *SILGenSILBuilder::createAllocExistentialBox(
167-
SILLocation loc, SILType existentialType, CanType concreteType,
168-
ArrayRef<ProtocolConformanceRef> conformances) {
169-
for (auto conformance : conformances)
170-
getSILGenModule().useConformance(conformance);
171-
172-
return SILBuilder::createAllocExistentialBox(loc, existentialType,
173-
concreteType, conformances);
174-
}

lib/SILGen/SILGenSILBuilder.h

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,6 @@ class SILGenSILBuilder : public SILBuilder {
3939

4040
SILGenModule &getSILGenModule() const;
4141

42-
// Metatype instructions use the conformances necessary to instantiate the
43-
// type.
44-
45-
MetatypeInst *createMetatype(SILLocation loc, SILType metatype);
46-
// Generic apply instructions use the conformances necessary to form the call.
47-
4842
using SILBuilder::createApply;
4943

5044
ApplyInst *createApply(SILLocation loc, SILValue fn, SILType SubstFnTy,
@@ -63,37 +57,6 @@ class SILGenSILBuilder : public SILBuilder {
6357
SILType substFnTy, SubstitutionMap subs,
6458
ArrayRef<SILValue> args,
6559
SILType closureTy);
66-
BuiltinInst *createBuiltin(SILLocation loc, Identifier name, SILType resultTy,
67-
SubstitutionMap subs, ArrayRef<SILValue> args);
68-
69-
// Existential containers use the conformances needed by the existential
70-
// box.
71-
72-
InitExistentialAddrInst *
73-
createInitExistentialAddr(SILLocation loc, SILValue existential,
74-
CanType formalConcreteType,
75-
SILType loweredConcreteType,
76-
ArrayRef<ProtocolConformanceRef> conformances);
77-
78-
InitExistentialValueInst *
79-
createInitExistentialValue(SILLocation loc, SILType existentialType,
80-
CanType formalConcreteType, SILValue concrete,
81-
ArrayRef<ProtocolConformanceRef> conformances);
82-
83-
InitExistentialMetatypeInst *
84-
createInitExistentialMetatype(SILLocation loc, SILValue metatype,
85-
SILType existentialType,
86-
ArrayRef<ProtocolConformanceRef> conformances);
87-
88-
InitExistentialRefInst *
89-
createInitExistentialRef(SILLocation loc, SILType existentialType,
90-
CanType formalConcreteType, SILValue concreteValue,
91-
ArrayRef<ProtocolConformanceRef> conformances);
92-
93-
AllocExistentialBoxInst *
94-
createAllocExistentialBox(SILLocation loc, SILType existentialType,
95-
CanType concreteType,
96-
ArrayRef<ProtocolConformanceRef> conformances);
9760
};
9861

9962
} // namespace Lowering

0 commit comments

Comments
 (0)