Skip to content

Commit 1bbd0f4

Browse files
committed
[IRGen] Call getCanonicalPrespecializedGenericMetadata.
When emitting the metadata accessor for a generic type for which canonical prespecialized metadata records have been formed, rather than calling getGenericMetadata, instead call getCanonicalPrespecializedGenericMetadata and pass to it the once token which will guard that the canonical prespecialized metadata records attached to the nominal type descriptor are only added to the metadata cache once.
1 parent cda11b9 commit 1bbd0f4

File tree

56 files changed

+143
-85
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+143
-85
lines changed

lib/IRGen/GenDecl.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1176,6 +1176,13 @@ static void
11761176
deleteAndReenqueueForEmissionValuesDependentOnCanonicalPrespecializedMetadataRecords(
11771177
IRGenModule &IGM, CanType typeWithCanonicalMetadataPrespecialization,
11781178
NominalTypeDecl &decl) {
1179+
// The accessor depends on the existence of canonical metadata records
1180+
// because their presence determine which runtime function is called.
1181+
auto *accessor = IGM.getAddrOfTypeMetadataAccessFunction(
1182+
decl.getDeclaredType()->getCanonicalType(), NotForDefinition);
1183+
accessor->deleteBody();
1184+
IGM.IRGen.noteUseOfMetadataAccessor(&decl);
1185+
11791186
IGM.IRGen.noteLazyReemissionOfNominalTypeDescriptor(&decl);
11801187
// The type context descriptor depends on canonical metadata records because
11811188
// pointers to them are attached as trailing objects to it.
@@ -1218,8 +1225,9 @@ void IRGenerator::emitLazyDefinitions() {
12181225
auto &IGM = *IGMPtr.get();
12191226
// A new canonical prespecialized metadata changes both the type
12201227
// descriptor (adding a new entry to the trailing list of metadata) and
1221-
// the metadata accessor (adding a new list of generic arguments against
1222-
// which to compare the arguments to the function). Consequently, it is
1228+
// the metadata accessor (calling the appropriate getGenericMetadata
1229+
// variant depending on whether there are any canonical prespecialized
1230+
// metadata records to add to the metadata cache). Consequently, it is
12231231
// necessary to force these to be reemitted.
12241232
if (canonicality == TypeMetadataCanonicality::Canonical) {
12251233
deleteAndReenqueueForEmissionValuesDependentOnCanonicalPrespecializedMetadataRecords(

lib/IRGen/MetadataRequest.cpp

Lines changed: 70 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2006,6 +2006,9 @@ MetadataResponse irgen::emitGenericTypeMetadataAccessFunction(
20062006

20072007
auto request = params.claimNext();
20082008

2009+
bool checkPrespecialized =
2010+
IGM.IRGen.metadataPrespecializationsForType(nominal).size() > 0;
2011+
20092012
auto numArguments = genericArgs.Types.size();
20102013

20112014
llvm::Value *result;
@@ -2018,8 +2021,17 @@ MetadataResponse irgen::emitGenericTypeMetadataAccessFunction(
20182021
IGF.Builder.CreateBitCast(argsBuffer.getAddress(), IGM.Int8PtrTy);
20192022

20202023
// Make the call.
2021-
auto call = IGF.Builder.CreateCall(IGM.getGetGenericMetadataFn(),
2022-
{request, arguments, descriptor});
2024+
llvm::CallInst *call;
2025+
if (checkPrespecialized) {
2026+
call = IGF.Builder.CreateCall(
2027+
IGM.getGetCanonicalPrespecializedGenericMetadataFn(),
2028+
{request, arguments, descriptor,
2029+
IGM.getAddrOfCanonicalPrespecializedGenericTypeCachingOnceToken(
2030+
nominal)});
2031+
} else {
2032+
call = IGF.Builder.CreateCall(IGM.getGetGenericMetadataFn(),
2033+
{request, arguments, descriptor});
2034+
}
20232035
call->setDoesNotThrow();
20242036
call->setCallingConv(IGM.SwiftCC);
20252037
call->addAttribute(llvm::AttributeList::FunctionIndex,
@@ -2032,7 +2044,8 @@ MetadataResponse irgen::emitGenericTypeMetadataAccessFunction(
20322044
// Factor out the buffer shuffling for metadata accessors that take their
20332045
// arguments directly, so that the accessor function itself only needs to
20342046
// materialize the nominal type descriptor and call this thunk.
2035-
auto generateThunkFn = [&IGM](IRGenFunction &subIGF) {
2047+
auto generateThunkFn = [&IGM,
2048+
checkPrespecialized](IRGenFunction &subIGF) {
20362049
subIGF.CurFn->setDoesNotAccessMemory();
20372050
subIGF.CurFn->setCallingConv(IGM.SwiftCC);
20382051
IGM.setHasNoFramePointer(subIGF.CurFn);
@@ -2043,6 +2056,10 @@ MetadataResponse irgen::emitGenericTypeMetadataAccessFunction(
20432056
auto arg1 = params.claimNext();
20442057
auto arg2 = params.claimNext();
20452058
auto descriptor = params.claimNext();
2059+
llvm::Value *token = nullptr;
2060+
if (checkPrespecialized) {
2061+
token = params.claimNext();
2062+
}
20462063

20472064
// Allocate a buffer with enough storage for the arguments.
20482065
auto argsBufferTy =
@@ -2067,23 +2084,47 @@ MetadataResponse irgen::emitGenericTypeMetadataAccessFunction(
20672084
// Make the call.
20682085
auto argsAddr = subIGF.Builder.CreateBitCast(argsBuffer.getAddress(),
20692086
IGM.Int8PtrTy);
2070-
auto result = subIGF.Builder.CreateCall(IGM.getGetGenericMetadataFn(),
2071-
{request, argsAddr, descriptor});
2087+
2088+
llvm::Value *result;
2089+
if (checkPrespecialized) {
2090+
result = subIGF.Builder.CreateCall(
2091+
IGM.getGetCanonicalPrespecializedGenericMetadataFn(),
2092+
{request, argsAddr, descriptor, token});
2093+
} else {
2094+
result = subIGF.Builder.CreateCall(IGM.getGetGenericMetadataFn(),
2095+
{request, argsAddr, descriptor});
2096+
}
20722097
subIGF.Builder.CreateRet(result);
20732098
};
2074-
auto thunkFn = IGM.getOrCreateHelperFunction(
2075-
"__swift_instantiateGenericMetadata",
2076-
IGM.TypeMetadataResponseTy,
2077-
{
2078-
IGM.SizeTy, // request
2079-
IGM.Int8PtrTy, // arg 0
2080-
IGM.Int8PtrTy, // arg 1
2081-
IGM.Int8PtrTy, // arg 2
2082-
IGM.TypeContextDescriptorPtrTy // type context descriptor
2083-
},
2084-
generateThunkFn,
2085-
/*noinline*/true);
2086-
2099+
llvm::Constant *thunkFn;
2100+
if (checkPrespecialized) {
2101+
thunkFn = IGM.getOrCreateHelperFunction(
2102+
"__swift_instantiateCanonicalPrespecializedGenericMetadata",
2103+
IGM.TypeMetadataResponseTy,
2104+
{
2105+
IGM.SizeTy, // request
2106+
IGM.Int8PtrTy, // arg 0
2107+
IGM.Int8PtrTy, // arg 1
2108+
IGM.Int8PtrTy, // arg 2
2109+
IGM.TypeContextDescriptorPtrTy, // type context descriptor
2110+
IGM.OnceTy->getPointerTo() // token pointer
2111+
},
2112+
generateThunkFn,
2113+
/*noinline*/ true);
2114+
} else {
2115+
thunkFn = IGM.getOrCreateHelperFunction(
2116+
"__swift_instantiateGenericMetadata", IGM.TypeMetadataResponseTy,
2117+
{
2118+
IGM.SizeTy, // request
2119+
IGM.Int8PtrTy, // arg 0
2120+
IGM.Int8PtrTy, // arg 1
2121+
IGM.Int8PtrTy, // arg 2
2122+
IGM.TypeContextDescriptorPtrTy // type context descriptor
2123+
},
2124+
generateThunkFn,
2125+
/*noinline*/ true);
2126+
}
2127+
20872128
// Call out to the helper.
20882129
auto arg0 = numArguments >= 1
20892130
? IGF.Builder.CreateBitCast(params.claimNext(), IGM.Int8PtrTy)
@@ -2095,8 +2136,17 @@ MetadataResponse irgen::emitGenericTypeMetadataAccessFunction(
20952136
? IGF.Builder.CreateBitCast(params.claimNext(), IGM.Int8PtrTy)
20962137
: llvm::UndefValue::get(IGM.Int8PtrTy);
20972138

2098-
auto call = IGF.Builder.CreateCall(thunkFn,
2099-
{request, arg0, arg1, arg2, descriptor});
2139+
llvm::CallInst *call;
2140+
if (checkPrespecialized) {
2141+
auto *token =
2142+
IGM.getAddrOfCanonicalPrespecializedGenericTypeCachingOnceToken(
2143+
nominal);
2144+
call = IGF.Builder.CreateCall(
2145+
thunkFn, {request, arg0, arg1, arg2, descriptor, token});
2146+
} else {
2147+
call = IGF.Builder.CreateCall(thunkFn,
2148+
{request, arg0, arg1, arg2, descriptor});
2149+
}
21002150
call->setDoesNotAccessMemory();
21012151
call->setDoesNotThrow();
21022152
call->setCallingConv(IGM.SwiftCC);

test/IRGen/generic_metatypes_future.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ func makeGenericMetatypes() {
150150
// CHECK-LABEL: define hidden swiftcc %swift.metadata_response @"$s17generic_metatypes6OneArgVMa"
151151
// CHECK-SAME: ([[INT]] %0, %swift.type* %1)
152152
// CHECK: [[BITCAST_1:%.*]] = bitcast {{.*}} %1
153-
// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @__swift_instantiateGenericMetadata([[INT]] %0, i8* [[BITCAST_1]], i8* undef, i8* undef, %swift.type_descriptor* {{.*}} @"$s17generic_metatypes6OneArgVMn" {{.*}})
153+
// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @__swift_instantiateCanonicalPrespecializedGenericMetadata([[INT]] %0, i8* [[BITCAST_1]], i8* undef, i8* undef, %swift.type_descriptor* {{.*}} @"$s17generic_metatypes6OneArgVMn" {{.*}})
154154
// CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
155155

156156
// CHECK-LABEL: define hidden swiftcc %swift.metadata_response @"$s17generic_metatypes7TwoArgsVMa"

test/IRGen/prespecialized-metadata/class-fileprivate-2argument-1_distinct_use-1st_argument_generic_class-2nd_argument_distinct_generic_class.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ doit()
238238
// CHECK: entry:
239239
// CHECK: [[ERASED_ARGUMENT1:%[0-9]+]] = bitcast %swift.type* [[ARGUMENT1_METADATA]] to i8*
240240
// CHECK: [[ERASED_ARGUMENT2:%[0-9]+]] = bitcast %swift.type* [[ARGUMENT2_METADATA]] to i8*
241-
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateGenericMetadata(
241+
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateCanonicalPrespecializedGenericMetadata(
242242
// CHECK: [[INT]] [[METADATA_REQUEST]],
243243
// CHECK: i8* [[ERASED_ARGUMENT1]],
244244
// CHECK: i8* [[ERASED_ARGUMENT2]],

test/IRGen/prespecialized-metadata/class-fileprivate-2argument-1_distinct_use-1st_argument_generic_class-2nd_argument_same_generic_class_different_value.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ doit()
228228
// CHECK: entry:
229229
// CHECK: [[ERASED_ARGUMENT1:%[0-9]+]] = bitcast %swift.type* [[ARGUMENT1_METADATA]] to i8*
230230
// CHECK: [[ERASED_ARGUMENT2:%[0-9]+]] = bitcast %swift.type* [[ARGUMENT2_METADATA]] to i8*
231-
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateGenericMetadata(
231+
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateCanonicalPrespecializedGenericMetadata(
232232
// CHECK: [[INT]] [[METADATA_REQUEST]],
233233
// CHECK: i8* [[ERASED_ARGUMENT1]],
234234
// CHECK: i8* [[ERASED_ARGUMENT2]],

test/IRGen/prespecialized-metadata/class-fileprivate-2argument-1_distinct_use-1st_argument_generic_class-2nd_argument_same_generic_class_same_value.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ doit()
228228
// CHECK: entry:
229229
// CHECK: [[ERASED_ARGUMENT1:%[0-9]+]] = bitcast %swift.type* [[ARGUMENT1_METADATA]] to i8*
230230
// CHECK: [[ERASED_ARGUMENT2:%[0-9]+]] = bitcast %swift.type* [[ARGUMENT2_METADATA]] to i8*
231-
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateGenericMetadata(
231+
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateCanonicalPrespecializedGenericMetadata(
232232
// CHECK: [[INT]] [[METADATA_REQUEST]],
233233
// CHECK: i8* [[ERASED_ARGUMENT1]],
234234
// CHECK: i8* [[ERASED_ARGUMENT2]],

test/IRGen/prespecialized-metadata/class-fileprivate-inmodule-1arg-2ancs-1distinct_use-1st_anc_gen-1arg-1st_arg_con_int-2nd_anc_gen-1st-arg_con_double.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ doit()
239239
// CHECK: define internal swiftcc %swift.metadata_response @"$s4main9Ancestor2[[UNIQUE_ID_1]]CMa"([[INT]] [[METADATA_REQUEST:%[0-9]+]], %swift.type* %1) #{{[0-9]+}} {
240240
// CHECK: entry:
241241
// CHECK: [[ERASED_TYPE:%[0-9]+]] = bitcast %swift.type* %1 to i8*
242-
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateGenericMetadata(
242+
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateCanonicalPrespecializedGenericMetadata(
243243
// CHECK-SAME: [[INT]] [[METADATA_REQUEST]],
244244
// CHECK-SAME: i8* [[ERASED_TYPE]],
245245
// CHECK-SAME: i8* undef,
@@ -256,7 +256,7 @@ doit()
256256
// CHECK: define internal swiftcc %swift.metadata_response @"$s4main9Ancestor1[[UNIQUE_ID_1]]CMa"([[INT]] [[METADATA_REQUEST:%[0-9]+]], %swift.type* %1) #{{[0-9]+}} {
257257
// CHECK: entry:
258258
// CHECK: [[ERASED_TYPE:%[0-9]+]] = bitcast %swift.type* %1 to i8*
259-
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateGenericMetadata(
259+
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateCanonicalPrespecializedGenericMetadata(
260260
// CHECK-SAME: [[INT]] [[METADATA_REQUEST]],
261261
// CHECK-SAME: i8* [[ERASED_TYPE]],
262262
// CHECK-SAME: i8* undef,
@@ -273,7 +273,7 @@ doit()
273273
// CHECK: define internal swiftcc %swift.metadata_response @"$s4main5Value[[UNIQUE_ID_1]]CMa"([[INT]] [[METADATA_REQUEST:%[0-9]+]], %swift.type* %1) #{{[0-9]+}} {
274274
// CHECK: entry:
275275
// CHECK: [[ERASED_TYPE:%[0-9]+]] = bitcast %swift.type* %1 to i8*
276-
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateGenericMetadata(
276+
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateCanonicalPrespecializedGenericMetadata(
277277
// CHECK-SAME: [[INT]] [[METADATA_REQUEST]],
278278
// CHECK-SAME: i8* [[ERASED_TYPE]],
279279
// CHECK-SAME: i8* undef,

test/IRGen/prespecialized-metadata/class-fileprivate-inmodule-1arg-2ancs-1distinct_use-1st_anc_gen-1arg-1st_arg_con_int-2nd_anc_gen-1st-arg_subclass_arg.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ doit()
224224
// CHECK: define internal swiftcc %swift.metadata_response @"$s4main9Ancestor2[[UNIQUE_ID_1]]CMa"([[INT]] [[METADATA_REQUEST:%[0-9]+]], %swift.type* %1) #{{[0-9]+}} {
225225
// CHECK: entry:
226226
// CHECK: [[ERASED_TYPE:%[0-9]+]] = bitcast %swift.type* %1 to i8*
227-
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateGenericMetadata(
227+
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateCanonicalPrespecializedGenericMetadata(
228228
// CHECK-SAME: [[INT]] [[METADATA_REQUEST]],
229229
// CHECK-SAME: i8* [[ERASED_TYPE]],
230230
// CHECK-SAME: i8* undef,
@@ -241,7 +241,7 @@ doit()
241241
// CHECK: define internal swiftcc %swift.metadata_response @"$s4main9Ancestor1[[UNIQUE_ID_1]]CMa"([[INT]] [[METADATA_REQUEST:%[0-9]+]], %swift.type* %1) #{{[0-9]+}} {
242242
// CHECK: entry:
243243
// CHECK: [[ERASED_TYPE:%[0-9]+]] = bitcast %swift.type* %1 to i8*
244-
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateGenericMetadata(
244+
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateCanonicalPrespecializedGenericMetadata(
245245
// CHECK-SAME: [[INT]] [[METADATA_REQUEST]],
246246
// CHECK-SAME: i8* [[ERASED_TYPE]],
247247
// CHECK-SAME: i8* undef,
@@ -258,7 +258,7 @@ doit()
258258
// CHECK: define internal swiftcc %swift.metadata_response @"$s4main5Value[[UNIQUE_ID_1]]CMa"([[INT]] [[METADATA_REQUEST:%[0-9]+]], %swift.type* %1) #{{[0-9]+}} {
259259
// CHECK: entry:
260260
// CHECK: [[ERASED_TYPE:%[0-9]+]] = bitcast %swift.type* %1 to i8*
261-
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateGenericMetadata(
261+
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateCanonicalPrespecializedGenericMetadata(
262262
// CHECK-SAME: [[INT]] [[METADATA_REQUEST]],
263263
// CHECK-SAME: i8* [[ERASED_TYPE]],
264264
// CHECK-SAME: i8* undef,

test/IRGen/prespecialized-metadata/class-fileprivate-inmodule-1arg-2ancs-1distinct_use-1st_anc_gen-1arg-1st_arg_subclass_arg-2nd_anc_gen-1st-arg_con_int.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ doit()
228228
// CHECK: define internal swiftcc %swift.metadata_response @"$s4main9Ancestor2[[UNIQUE_ID_1]]LLCMa"([[INT]] [[METADATA_REQUEST:%[0-9]+]], %swift.type* %1) #{{[0-9]+}} {
229229
// CHECK: entry:
230230
// CHECK: [[ERASED_TYPE:%[0-9]+]] = bitcast %swift.type* %1 to i8*
231-
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateGenericMetadata(
231+
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateCanonicalPrespecializedGenericMetadata(
232232
// CHECK-SAME: [[INT]] [[METADATA_REQUEST]],
233233
// CHECK-SAME: i8* [[ERASED_TYPE]],
234234
// CHECK-SAME: i8* undef,
@@ -245,7 +245,7 @@ doit()
245245
// CHECK: define internal swiftcc %swift.metadata_response @"$s4main9Ancestor1[[UNIQUE_ID_1]]LLCMa"([[INT]] [[METADATA_REQUEST:%[0-9]+]], %swift.type* %1) #{{[0-9]+}} {
246246
// CHECK: entry:
247247
// CHECK: [[ERASED_TYPE:%[0-9]+]] = bitcast %swift.type* %1 to i8*
248-
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateGenericMetadata(
248+
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateCanonicalPrespecializedGenericMetadata(
249249
// CHECK-SAME: [[INT]] [[METADATA_REQUEST]],
250250
// CHECK-SAME: i8* [[ERASED_TYPE]],
251251
// CHECK-SAME: i8* undef,
@@ -262,7 +262,7 @@ doit()
262262
// CHECK: define internal swiftcc %swift.metadata_response @"$s4main5Value[[UNIQUE_ID_1]]LLCMa"([[INT]] [[METADATA_REQUEST:%[0-9]+]], %swift.type* %1) #{{[0-9]+}} {
263263
// CHECK: entry:
264264
// CHECK: [[ERASED_TYPE:%[0-9]+]] = bitcast %swift.type* %1 to i8*
265-
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateGenericMetadata(
265+
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateCanonicalPrespecializedGenericMetadata(
266266
// CHECK-SAME: [[INT]] [[METADATA_REQUEST]],
267267
// CHECK-SAME: i8* [[ERASED_TYPE]],
268268
// CHECK-SAME: i8* undef,

test/IRGen/prespecialized-metadata/class-fileprivate-inmodule-1arg-2ancs-1distinct_use-1st_anc_gen-1arg-1st_arg_subcls_arg-2nd_anc_gen-1st-arg_subcls_arg.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ doit()
216216
// CHECK: define internal swiftcc %swift.metadata_response @"$s4main9Ancestor2[[UNIQUE_ID_1]]LLCMa"([[INT]] [[METADATA_REQUEST:%[0-9]+]], %swift.type* [[ARGUMENT:%[0-9]+]]) #{{[0-9]+}} {
217217
// CHECK: entry:
218218
// CHECK: [[ERASED_TYPE:%[0-9]+]] = bitcast %swift.type* [[ARGUMENT]] to i8*
219-
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateGenericMetadata(
219+
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateCanonicalPrespecializedGenericMetadata(
220220
// CHECK-SAME: [[INT]] [[METADATA_REQUEST]],
221221
// CHECK-SAME: i8* [[ERASED_TYPE]],
222222
// CHECK-SAME: i8* undef,
@@ -233,7 +233,7 @@ doit()
233233
// CHECK: define internal swiftcc %swift.metadata_response @"$s4main9Ancestor1[[UNIQUE_ID_1]]LLCMa"([[INT]] [[METADATA_REQUEST:%[0-9]+]], %swift.type* [[ARGUMENT:%[0-9]+]]) #{{[0-9]+}} {
234234
// CHECK: entry:
235235
// CHECK: [[ERASED_TYPE:%[0-9]+]] = bitcast %swift.type* [[ARGUMENT]] to i8*
236-
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateGenericMetadata(
236+
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateCanonicalPrespecializedGenericMetadata(
237237
// CHECK-SAME: [[INT]] [[METADATA_REQUEST]],
238238
// CHECK-SAME: i8* [[ERASED_TYPE]],
239239
// CHECK-SAME: i8* undef,
@@ -250,7 +250,7 @@ doit()
250250
// CHECK: define internal swiftcc %swift.metadata_response @"$s4main5Value[[UNIQUE_ID_1]]LLCMa"([[INT]] [[METADATA_REQUEST:%[0-9]+]], %swift.type* [[ARGUMENT:%[0-9]+]]) #{{[0-9]+}} {
251251
// CHECK: entry:
252252
// CHECK: [[ERASED_TYPE:%[0-9]+]] = bitcast %swift.type* [[ARGUMENT]] to i8*
253-
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateGenericMetadata(
253+
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateCanonicalPrespecializedGenericMetadata(
254254
// CHECK-SAME: [[INT]] [[METADATA_REQUEST]],
255255
// CHECK-SAME: i8* [[ERASED_TYPE]],
256256
// CHECK-SAME: i8* undef,

test/IRGen/prespecialized-metadata/class-fileprivate-inmodule-1argument-1distinct_use-1st_argument_generic_class-1argument.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ doit()
256256
// CHECK: define internal swiftcc %swift.metadata_response @"$s4main5Value[[UNIQUE_ID_1]]CMa"([[INT]] [[METADATA_REQUEST:%[0-9]+]], %swift.type* %1) #{{[0-9]+}} {
257257
// CHECK: entry:
258258
// CHECK: [[ERASED_TYPE:%[0-9]+]] = bitcast %swift.type* %1 to i8*
259-
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateGenericMetadata(
259+
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateCanonicalPrespecializedGenericMetadata(
260260
// CHECK: [[INT]] [[METADATA_REQUEST]],
261261
// CHECK: i8* [[ERASED_TYPE]],
262262
// CHECK: i8* undef,

test/IRGen/prespecialized-metadata/class-fileprivate-inmodule-1argument-1distinct_use.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ doit()
101101
// CHECK: define internal swiftcc %swift.metadata_response @"$s4main5Value[[UNIQUE_ID_1]]CMa"([[INT]] [[METADATA_REQUEST:%[0-9]+]], %swift.type* %1) #{{[0-9]+}} {
102102
// CHECK: entry:
103103
// CHECK: [[ERASED_TYPE:%[0-9]+]] = bitcast %swift.type* %1 to i8*
104-
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateGenericMetadata(
104+
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateCanonicalPrespecializedGenericMetadata(
105105
// CHECK: [[INT]] [[METADATA_REQUEST]],
106106
// CHECK: i8* [[ERASED_TYPE]],
107107
// CHECK: i8* undef,

test/IRGen/prespecialized-metadata/class-fileprivate-inmodule-1argument-1distinct_use_generic_class.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ doit()
193193
// CHECK: define internal swiftcc %swift.metadata_response @"$s4main5Value[[UNIQUE_ID_1]]LLCMa"([[INT]] [[METADATA_REQUEST:%[0-9]+]], %swift.type* %1) #{{[0-9]+}} {
194194
// CHECK: entry:
195195
// CHECK: [[ERASED_TYPE:%[0-9]+]] = bitcast %swift.type* %1 to i8*
196-
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateGenericMetadata(
196+
// CHECK: {{%[0-9]+}} = call swiftcc %swift.metadata_response @__swift_instantiateCanonicalPrespecializedGenericMetadata(
197197
// CHECK: [[INT]] [[METADATA_REQUEST]],
198198
// CHECK: i8* [[ERASED_TYPE]],
199199
// CHECK: i8* undef,

0 commit comments

Comments
 (0)