Skip to content

Commit ea293c0

Browse files
committed
IRGen: Move getTypeRef() to a method on IRGenModule and clean up
1 parent 11dfc1c commit ea293c0

File tree

5 files changed

+16
-31
lines changed

5 files changed

+16
-31
lines changed

lib/IRGen/GenMeta.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -365,8 +365,8 @@ namespace {
365365
}
366366

367367
void addExtendedContext() {
368-
auto string = getTypeRef(IGM,
369-
E->getSelfInterfaceType()->getCanonicalType());
368+
auto string = IGM.getTypeRef(
369+
E->getSelfInterfaceType()->getCanonicalType());
370370
B.addRelativeAddress(string);
371371
}
372372

@@ -3841,7 +3841,7 @@ GenericRequirementsMetadata irgen::addGenericRequirements(
38413841

38423842
auto flags = GenericRequirementFlags(abiKind, false, false);
38433843
auto typeName =
3844-
getTypeRef(IGM, requirement.getSecondType()->getCanonicalType());
3844+
IGM.getTypeRef(requirement.getSecondType()->getCanonicalType());
38453845

38463846
addGenericRequirement(IGM, B, metadata, sig, flags,
38473847
requirement.getFirstType(),

lib/IRGen/GenReflection.cpp

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,12 @@ class PrintMetadataSource
164164
}
165165
};
166166

167+
llvm::Constant *IRGenModule::getTypeRef(CanType type) {
168+
IRGenMangler Mangler;
169+
auto SymbolicName = Mangler.mangleTypeForReflection(*this, type);
170+
return getAddrOfStringForTypeRef(SymbolicName);
171+
}
172+
167173
class ReflectionMetadataBuilder {
168174
protected:
169175
IRGenModule &IGM;
@@ -204,32 +210,22 @@ class ReflectionMetadataBuilder {
204210
/// Add a 32-bit relative offset to a mangled typeref string
205211
/// in the typeref reflection section.
206212
void addTypeRef(CanType type) {
207-
assert(type);
208-
209-
// Generic parameters should be written in terms of interface types
210-
// for the purposes of reflection metadata
211-
assert(!type->hasArchetype() && "Forgot to map typeref out of context");
212-
213-
IRGenMangler mangler;
214-
auto MangledStr = mangler.mangleTypeForReflection(IGM, type);
215-
auto mangledName = IGM.getAddrOfStringForTypeRef(MangledStr);
216-
B.addRelativeAddress(mangledName);
213+
B.addRelativeAddress(IGM.getTypeRef(type));
217214
}
218215

219216
/// Add a 32-bit relative offset to a mangled nominal type string
220217
/// in the typeref reflection section.
221218
void addNominalRef(const NominalTypeDecl *nominal) {
222-
IRGenMangler mangler;
223-
SymbolicMangling mangledStr;
224219
if (auto proto = dyn_cast<ProtocolDecl>(nominal)) {
220+
IRGenMangler mangler;
221+
SymbolicMangling mangledStr;
225222
mangledStr.String = mangler.mangleBareProtocol(proto);
223+
auto mangledName = IGM.getAddrOfStringForTypeRef(mangledStr);
224+
B.addRelativeAddress(mangledName);
226225
} else {
227226
CanType type = nominal->getDeclaredType()->getCanonicalType();
228-
mangledStr =
229-
mangler.mangleTypeForReflection(IGM, type);
227+
B.addRelativeAddress(IGM.getTypeRef(type));
230228
}
231-
auto mangledName = IGM.getAddrOfStringForTypeRef(mangledStr);
232-
B.addRelativeAddress(mangledName);
233229
}
234230

235231
llvm::GlobalVariable *emit(Optional<LinkEntity> entity,

lib/IRGen/IRGenModule.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -970,6 +970,7 @@ class IRGenModule {
970970
/// reflection metadata.
971971
llvm::SetVector<const StructDecl *> ImportedStructs;
972972

973+
llvm::Constant *getTypeRef(CanType type);
973974
llvm::Constant *getAddrOfStringForTypeRef(StringRef mangling);
974975
llvm::Constant *getAddrOfStringForTypeRef(const SymbolicMangling &mangling);
975976
llvm::Constant *getAddrOfFieldName(StringRef Name);

lib/IRGen/MetadataRequest.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -297,16 +297,6 @@ llvm::Constant *IRGenModule::getAddrOfStringForTypeRef(
297297
return addr;
298298
}
299299

300-
// FIXME: willBeRelativelyAddressed is only needed to work around an ld64 bug
301-
// resolving relative references to coalesceable symbols.
302-
// It should be removed when fixed. rdar://problem/22674524
303-
llvm::Constant *irgen::getTypeRef(IRGenModule &IGM, CanType type) {
304-
IRGenMangler Mangler;
305-
auto SymbolicName = Mangler.mangleTypeForReflection(IGM, type);
306-
307-
return IGM.getAddrOfStringForTypeRef(SymbolicName);
308-
}
309-
310300
llvm::Value *irgen::emitObjCMetadataRefForMetadata(IRGenFunction &IGF,
311301
llvm::Value *classPtr) {
312302
assert(IGF.IGM.Context.LangOpts.EnableObjCInterop);

lib/IRGen/MetadataRequest.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -503,8 +503,6 @@ emitInPlaceTypeMetadataAccessFunctionBody(IRGenFunction &IGF,
503503
llvm::Value *uniqueForeignTypeMetadataRef(IRGenFunction &IGF,
504504
llvm::Value *candidate);
505505

506-
llvm::Constant *getTypeRef(IRGenModule &IGM, CanType type);
507-
508506
using LazyCacheEmitter =
509507
llvm::function_ref<MetadataResponse(IRGenFunction &IGF, Explosion &params)>;
510508

0 commit comments

Comments
 (0)