@@ -32,10 +32,12 @@ struct Gen2<Fwd : Q> : Q {}
3232// CHECK: [[METADATA_ELEMENT_0:%[^,]+]] = getelementptr inbounds [1 x %swift.type*], [1 x %swift.type*]* [[METADATA_PACK]]
3333// CHECK: store %swift.type* bitcast {{.*}}$s26variadic_generic_functions3S_2VMf{{.*}}, %swift.type** [[METADATA_ELEMENT_0]]
3434// CHECK: [[METADATA_PACK_PTR:%[^,]+]] = bitcast [1 x %swift.type*]* [[METADATA_PACK]] to %swift.type**
35+ // CHECK: [[HEAPIFIED_METADATA_PACK_PTR:%[^,]+]] = call swiftcc %swift.type** @swift_allocateMetadataPack(%swift.type** [[METADATA_PACK_PTR]], i64 1)
3536// CHECK: [[WTABLE_ELEMENT_0:%[^,]+]] = getelementptr inbounds [1 x i8**], [1 x i8**]* [[WTABLE_PACK]]
3637// CHECK: store i8** getelementptr inbounds {{.*}}$s26variadic_generic_functions3S_2VAA1PAAWP{{.*}}, i8*** [[WTABLE_ELEMENT_0]]
37- // CHECK: [[WTABLE_PACK_ADDR:%[^,]+]] = bitcast [1 x i8**]* [[WTABLE_PACK]] to i8***
38- // CHECK: call swiftcc void @g([[INT]] 1, %swift.type** [[METADATA_PACK_PTR]], i8*** [[WTABLE_PACK_ADDR]])
38+ // CHECK: [[WTABLE_PACK_PTR:%[^,]+]] = bitcast [1 x i8**]* [[WTABLE_PACK]] to i8***
39+ // CHECK: [[HEAPIFIED_WTABLE_PACK_PTR:%[^%]+]] = call swiftcc i8*** @swift_allocateWitnessTablePack(i8*** [[WTABLE_PACK_PTR]], i64 1)
40+ // CHECK: call swiftcc void @g([[INT]] 1, %swift.type** [[HEAPIFIED_METADATA_PACK_PTR]], i8*** [[HEAPIFIED_WTABLE_PACK_PTR]])
3941sil @c : $() -> () {
4042 %g = function_ref @g : $@convention(thin) <each T : P> () -> ()
4143 apply %g<Pack{S_2}>() : $@convention(thin) <each T : P> () -> ()
@@ -89,9 +91,10 @@ sil @f1c : $<each T : PA where repeat each T.A : P> () -> () {}
8991// CHECK-SAME: i8*** %"each T.PA",
9092// CHECK-SAME: i8*** [[ASSOCIATEDTYPES_CONFORMANCES_TO_Q:%[^,]+]])
9193// CHECK: [[ASSOCIATEDTYPES:%[^,]+]] = alloca %swift.type*, [[INT]] [[SHAPE]]
94+ // CHECK: [[HEAPIFIED_ASSOCIATEDTYPES:%[^,]+]] = call swiftcc %swift.type** @swift_allocateMetadataPack(%swift.type** [[ASSOCIATEDTYPES]], i64 %0)
9295// CHECK: call swiftcc void @associatedtype_with_added_conformance_callee(
9396// CHECK-SAME: [[INT]] [[SHAPE]],
94- // CHECK-SAME: %swift.type** [[ASSOCIATEDTYPES ]],
97+ // CHECK-SAME: %swift.type** [[HEAPIFIED_ASSOCIATEDTYPES ]],
9598// CHECK-SAME: i8*** [[ASSOCIATEDTYPES_CONFORMANCES_TO_Q]])
9699sil @associatedtype_with_added_conformance : $<each T : PA where repeat each T.A : Q> () -> () {
97100 %callee = function_ref @associatedtype_with_added_conformance_callee : $@convention(thin) <each T : Q> () -> ()
@@ -109,9 +112,10 @@ sil @associatedtype_with_added_conformance_callee : $<each T : Q> () -> () {}
109112// CHECK-SAME: i8*** %"each T.A.QA",
110113// CHECK-SAME: i8*** [[ASSOCIATEDTYPES_CONFORMANCES_TO_Q:%[^,]+]])
111114// CHECK: [[ASSOCIATEDTYPES:%[^,]+]] = alloca %swift.type*, [[INT]] [[SHAPE]]
115+ // CHECK: [[HEAPIFIED_ASSOCIATEDTYPES:%[^,]+]] = call swiftcc %swift.type** @swift_allocateMetadataPack(%swift.type** [[ASSOCIATEDTYPES]], i64 [[SHAPE]])
112116// CHECK: call swiftcc void @associatedtype_with_added_conformance_2_callee(
113117// CHECK-SAME: [[INT]] [[SHAPE]],
114- // CHECK-SAME: %swift.type** [[ASSOCIATEDTYPES ]],
118+ // CHECK-SAME: %swift.type** [[HEAPIFIED_ASSOCIATEDTYPES ]],
115119// CHECK-SAME: i8*** [[ASSOCIATEDTYPES_CONFORMANCES_TO_Q]])
116120sil @associatedtype_with_added_conformance_2 : $<each T : PA where repeat each T.A : QA, repeat each T.A.A : R> () -> () {
117121 %j = function_ref @associatedtype_with_added_conformance_2_callee : $@convention(thin) <each T : R> () -> ()
@@ -127,11 +131,15 @@ sil @associatedtype_with_added_conformance_2_callee : $<each T : R> () -> () {}
127131// CHECK-SAME: %swift.type** %"each T",
128132// CHECK-SAME: i8*** %"each T.Q")
129133// CHECK: [[GEN2_TYPES:%[^,]+]] = alloca %swift.type*, [[INT]] [[SHAPE]]
134+ // CHECK: [[HEAPIFIED_GEN2_TYPES:%[^,]+]] = call swiftcc %swift.type** @swift_allocateMetadataPack(%swift.type** [[GEN2_TYPES]], i64 [[SHAPE]])
135+ // CHECK: [[STORED_STACK_LOC:%[^,]+]] = call i8* @llvm.stacksave()
130136// CHECK: [[GEN2_CONFORMANCES_TO_Q:%[^,]+]] = alloca i8**, [[INT]] [[SHAPE]]
137+ // CHECK: [[HEAPIFIED_GEN2_CONFORMANCES_TO_Q:%[^%]+]] = call swiftcc i8*** @swift_allocateWitnessTablePack(i8*** [[GEN2_CONFORMANCES_TO_Q]], i64 [[SHAPE]])
138+ // CHECK: call void @llvm.stackrestore(i8* [[STORED_STACK_LOC]])
131139// CHECK: call swiftcc void @associatedtype_with_forwarded_conformance_1_callee(
132140// CHECK-SAME: [[INT]] [[SHAPE]],
133- // CHECK-SAME: %swift.type** [[GEN2_TYPES ]],
134- // CHECK-SAME: i8*** [[GEN2_CONFORMANCES_TO_Q ]])
141+ // CHECK-SAME: %swift.type** [[HEAPIFIED_GEN2_TYPES ]],
142+ // CHECK-SAME: i8*** [[HEAPIFIED_GEN2_CONFORMANCES_TO_Q ]])
135143sil @associatedtype_with_forwarded_conformance_1 : $<each T : Q> () -> () {
136144 %i = function_ref @associatedtype_with_forwarded_conformance_1_callee : $@convention(thin) <each T : Q> () -> ()
137145 apply %i<Pack{repeat Gen2<each T>}>() : $@convention(thin) <each T : Q> () -> ()
@@ -148,11 +156,15 @@ sil @associatedtype_with_forwarded_conformance_1_callee : $<each T : Q> () -> ()
148156// CHECK-SAME: i8*** %"each T.PA",
149157// CHECK-SAME: i8*** %"each T.A.Q")
150158// CHECK: [[GEN1_TYPES:%[^,]+]] = alloca %swift.type*, [[INT]] [[SHAPE]]
159+ // CHECK: [[HEAPIFIED_GEN1_TYPES:%[^,]+]] = call swiftcc %swift.type** @swift_allocateMetadataPack(%swift.type** [[GEN1_TYPES]], i64 [[SHAPE]])
160+ // CHECK: [[STORED_STACK_LOC:%[^,]+]] = call i8* @llvm.stacksave()
151161// CHECK: [[GEN1_CONFORMANCES_TO_PA:%[^,]+]] = alloca i8**, [[INT]] [[SHAPE]]
162+ // CHECK: [[HEAPIFIED_GEN1_CONFORMANCES_TO_PA:%[^%]+]] = call swiftcc i8*** @swift_allocateWitnessTablePack(i8*** [[GEN1_CONFORMANCES_TO_PA]], i64 [[SHAPE]])
163+ // CHECK: call void @llvm.stackrestore(i8* [[STORED_STACK_LOC]])
152164// CHECK: call swiftcc void @generictype_with_forwarded_conformance_2_callee(
153165// CHECK-SAME: [[INT]] [[SHAPE]],
154- // CHECK-SAME: %swift.type** [[GEN1_TYPES ]],
155- // CHECK-SAME: i8*** [[GEN1_CONFORMANCES_TO_PA ]],
166+ // CHECK-SAME: %swift.type** [[HEAPIFIED_GEN1_TYPES ]],
167+ // CHECK-SAME: i8*** [[HEAPIFIED_GEN1_CONFORMANCES_TO_PA ]],
156168// CHECK-SAME: i8*** %"each T.A.Q")
157169sil @generictype_with_forwarded_conformance_2 : $<each T : PA where repeat each T.A : Q>() -> () {
158170 %callee = function_ref @generictype_with_forwarded_conformance_2_callee : $@convention(thin) <each T : PA where repeat each T.A : Q> () -> ()
@@ -169,11 +181,15 @@ sil @generictype_with_forwarded_conformance_2_callee : $<each T : PA where repea
169181// CHECK-SAME: i8*** %"each T.PA",
170182// CHECK-SAME: i8*** %"each T.A.Q")
171183// CHECK: [[GEN1_GEN1_TYPES:%[^,]+]] = alloca %swift.type*, [[INT]] [[SHAPE]]
184+ // CHECK: [[HEAPIFIED_GEN1_GEN1_TYPES:%[^%]+]] = call swiftcc %swift.type** @swift_allocateMetadataPack(%swift.type** [[GEN1_GEN1_TYPES]], i64 [[SHAPE]])
185+ // CHECK: [[STORED_STACK_LOC:%[^,]+]] = call i8* @llvm.stacksave()
172186// CHECK: [[GEN1_GEN1_CONFORMANCES_TO_PA:%[^,]+]] = alloca i8**, [[INT]] [[SHAPE]]
187+ // CHECK: [[HEAPIFIED_GEN1_GEN1_CONFORMANCES_TO_PA:%[^%]+]] = call swiftcc i8*** @swift_allocateWitnessTablePack(i8*** [[GEN1_GEN1_CONFORMANCES_TO_PA]], i64 [[SHAPE]])
188+ // CHECK: call void @llvm.stackrestore(i8* [[STORED_STACK_LOC]])
173189// CHECK: call swiftcc void @generic_with_forwarded_conformance_3_callee(
174190// CHECK-SAME: [[INT]] [[SHAPE]],
175- // CHECK-SAME: %swift.type** [[GEN1_GEN1_TYPES ]],
176- // CHECK-SAME: i8*** [[GEN1_GEN1_CONFORMANCES_TO_PA ]],
191+ // CHECK-SAME: %swift.type** [[HEAPIFIED_GEN1_GEN1_TYPES ]],
192+ // CHECK-SAME: i8*** [[HEAPIFIED_GEN1_GEN1_CONFORMANCES_TO_PA ]],
177193// CHECK-SAME: i8*** %"each T.A.Q")
178194sil @generic_with_forwarded_conformance_3 : $<each T : PA where repeat each T.A : Q> () -> () {
179195 %callee = function_ref @generic_with_forwarded_conformance_3_callee : $@convention(thin) <each T : PA where repeat each T.A : Q> () -> ()
0 commit comments