@@ -32,10 +32,12 @@ struct Gen2<Fwd : Q> : Q {}
32
32
// CHECK: [[METADATA_ELEMENT_0:%[^,]+]] = getelementptr inbounds [1 x %swift.type*], [1 x %swift.type*]* [[METADATA_PACK]]
33
33
// CHECK: store %swift.type* bitcast {{.*}}$s26variadic_generic_functions3S_2VMf{{.*}}, %swift.type** [[METADATA_ELEMENT_0]]
34
34
// 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)
35
36
// CHECK: [[WTABLE_ELEMENT_0:%[^,]+]] = getelementptr inbounds [1 x i8**], [1 x i8**]* [[WTABLE_PACK]]
36
37
// 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]])
39
41
sil @c : $() -> () {
40
42
%g = function_ref @g : $@convention(thin) <each T : P> () -> ()
41
43
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> () -> () {}
89
91
// CHECK-SAME: i8*** %"each T.PA",
90
92
// CHECK-SAME: i8*** [[ASSOCIATEDTYPES_CONFORMANCES_TO_Q:%[^,]+]])
91
93
// CHECK: [[ASSOCIATEDTYPES:%[^,]+]] = alloca %swift.type*, [[INT]] [[SHAPE]]
94
+ // CHECK: [[HEAPIFIED_ASSOCIATEDTYPES:%[^,]+]] = call swiftcc %swift.type** @swift_allocateMetadataPack(%swift.type** [[ASSOCIATEDTYPES]], i64 %0)
92
95
// CHECK: call swiftcc void @associatedtype_with_added_conformance_callee(
93
96
// CHECK-SAME: [[INT]] [[SHAPE]],
94
- // CHECK-SAME: %swift.type** [[ASSOCIATEDTYPES ]],
97
+ // CHECK-SAME: %swift.type** [[HEAPIFIED_ASSOCIATEDTYPES ]],
95
98
// CHECK-SAME: i8*** [[ASSOCIATEDTYPES_CONFORMANCES_TO_Q]])
96
99
sil @associatedtype_with_added_conformance : $<each T : PA where repeat each T.A : Q> () -> () {
97
100
%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> () -> () {}
109
112
// CHECK-SAME: i8*** %"each T.A.QA",
110
113
// CHECK-SAME: i8*** [[ASSOCIATEDTYPES_CONFORMANCES_TO_Q:%[^,]+]])
111
114
// CHECK: [[ASSOCIATEDTYPES:%[^,]+]] = alloca %swift.type*, [[INT]] [[SHAPE]]
115
+ // CHECK: [[HEAPIFIED_ASSOCIATEDTYPES:%[^,]+]] = call swiftcc %swift.type** @swift_allocateMetadataPack(%swift.type** [[ASSOCIATEDTYPES]], i64 [[SHAPE]])
112
116
// CHECK: call swiftcc void @associatedtype_with_added_conformance_2_callee(
113
117
// CHECK-SAME: [[INT]] [[SHAPE]],
114
- // CHECK-SAME: %swift.type** [[ASSOCIATEDTYPES ]],
118
+ // CHECK-SAME: %swift.type** [[HEAPIFIED_ASSOCIATEDTYPES ]],
115
119
// CHECK-SAME: i8*** [[ASSOCIATEDTYPES_CONFORMANCES_TO_Q]])
116
120
sil @associatedtype_with_added_conformance_2 : $<each T : PA where repeat each T.A : QA, repeat each T.A.A : R> () -> () {
117
121
%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> () -> () {}
127
131
// CHECK-SAME: %swift.type** %"each T",
128
132
// CHECK-SAME: i8*** %"each T.Q")
129
133
// 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()
130
136
// 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]])
131
139
// CHECK: call swiftcc void @associatedtype_with_forwarded_conformance_1_callee(
132
140
// 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 ]])
135
143
sil @associatedtype_with_forwarded_conformance_1 : $<each T : Q> () -> () {
136
144
%i = function_ref @associatedtype_with_forwarded_conformance_1_callee : $@convention(thin) <each T : Q> () -> ()
137
145
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> () -> ()
148
156
// CHECK-SAME: i8*** %"each T.PA",
149
157
// CHECK-SAME: i8*** %"each T.A.Q")
150
158
// 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()
151
161
// 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]])
152
164
// CHECK: call swiftcc void @generictype_with_forwarded_conformance_2_callee(
153
165
// 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 ]],
156
168
// CHECK-SAME: i8*** %"each T.A.Q")
157
169
sil @generictype_with_forwarded_conformance_2 : $<each T : PA where repeat each T.A : Q>() -> () {
158
170
%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
169
181
// CHECK-SAME: i8*** %"each T.PA",
170
182
// CHECK-SAME: i8*** %"each T.A.Q")
171
183
// 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()
172
186
// 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]])
173
189
// CHECK: call swiftcc void @generic_with_forwarded_conformance_3_callee(
174
190
// 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 ]],
177
193
// CHECK-SAME: i8*** %"each T.A.Q")
178
194
sil @generic_with_forwarded_conformance_3 : $<each T : PA where repeat each T.A : Q> () -> () {
179
195
%callee = function_ref @generic_with_forwarded_conformance_3_callee : $@convention(thin) <each T : PA where repeat each T.A : Q> () -> ()
0 commit comments