@@ -157,29 +157,31 @@ struct ComplexDynamic<U, V> {
157
157
// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @explode_complex_dynamic
158
158
sil @explode_complex_dynamic : $<A, B> (@in ComplexDynamic<A, B>, @inout Byteful, @inout A, @inout B, @inout Chareth) -> () {
159
159
entry(%0 : $*ComplexDynamic<A, B>, %1 : $*Byteful, %2 : $*A, %3 : $*B, %4 : $*Chareth):
160
- // CHECK: [[A:%.*]] = getelementptr inbounds %T15generic_structs14ComplexDynamicV, %T15generic_structs14ComplexDynamicV* %0
161
- // CHECK: [[PTR1:%.*]] = bitcast %T15generic_structs14ComplexDynamicV* %0
162
- // CHECK-NEXT: [[EL:%.*]] = getelementptr inbounds i8, i8* [[PTR1]]
163
- // CHECK-NEXT: [[B:%.*]] = bitcast i8* [[EL]] to %swift.opaque*
164
-
165
160
%a = struct_element_addr %0 : $*ComplexDynamic<A, B>, #ComplexDynamic.a2
161
+
162
+ // CHECK: [[METADATA:%.*]] = bitcast %swift.type* {{%.*}} to i32*
163
+ // CHECK: [[FIELD_OFFSET_ADDR:%.*]] = getelementptr inbounds i32, i32* [[METADATA]], i64 10
164
+ // CHECK: [[FIELD_OFFSET:%.*]] = load i32, i32* [[FIELD_OFFSET_ADDR]], align 8
165
+ // CHECK: [[BYTES:%.*]] = bitcast %T15generic_structs14ComplexDynamicV* %0 to i8*
166
+ // CHECK: [[BYTE_OFFSET:%.*]] = getelementptr inbounds i8, i8* [[BYTES]], i32 [[FIELD_OFFSET]]
167
+ // CHECK: bitcast i8* [[BYTE_OFFSET]] to %swift.opaque*
166
168
%b = struct_element_addr %0 : $*ComplexDynamic<A, B>, #ComplexDynamic.b
167
-
168
- // CHECK: [[PTR2:%.*]] = bitcast %T15generic_structs14ComplexDynamicV* %0
169
- // CHECK-NEXT: [[C_PTR:%.*]] = getelementptr inbounds i8, i8* [[PTR2]], i64 35
170
- // CHECK-NEXT: [[C:%.*]] = bitcast i8* [[C_PTR]] to %T15generic_structs13SingleDynamicV*
171
- // CHECK-NEXT: [[C_X:%.*]] = bitcast %T15generic_structs13SingleDynamicV* [[C]] to %swift.opaque*
172
-
173
- // CHECK: [[PTR3:%.*]] = bitcast %T15generic_structs14ComplexDynamicV* %0
174
- // CHECK-NEXT: [[D_PTR:%.*]] = getelementptr inbounds i8, i8* [[PTR3]], i64 36
175
- // CHECK-NEXT: [[D:%.*]] = bitcast i8* [[D_PTR]] to %T15generic_structs7CharethV*
176
-
177
- // CHECK: call %T15generic_structs7BytefulV* @"$s15generic_structs7BytefulVWOf"(%T15generic_structs7BytefulV* [[A]], %T15generic_structs7BytefulV* %1)
178
- // CHECK: call %swift.opaque* %assignWithCopy(%swift.opaque* %2, %swift.opaque* [[B]], %swift.type* %A)
179
- // CHECK: call %swift.opaque* %assignWithCopy3(%swift.opaque* %3, %swift.opaque* [[C_X]], %swift.type* %B)
180
- // CHECK: call %T15generic_structs7CharethV* @"$s15generic_structs7CharethVWOf"(%T15generic_structs7CharethV* [[D]], %T15generic_structs7CharethV* %4)
169
+
170
+ // CHECK: [[METADATA:%.*]] = bitcast %swift.type* {{%.*}} to i32*
171
+ // CHECK: [[FIELD_OFFSET_ADDR:%.*]] = getelementptr inbounds i32, i32* [[METADATA]], i64 11
172
+ // CHECK: [[FIELD_OFFSET:%.*]] = load i32, i32* [[FIELD_OFFSET_ADDR]], align 8
173
+ // CHECK: [[BYTES:%.*]] = bitcast %T15generic_structs14ComplexDynamicV* %0 to i8*
174
+ // CHECK: [[BYTE_OFFSET:%.*]] = getelementptr inbounds i8, i8* [[BYTES]], i32 [[FIELD_OFFSET]]
175
+ // CHECK: bitcast i8* [[BYTE_OFFSET]] to %T15generic_structs13SingleDynamicV
181
176
%5 = struct_element_addr %0 : $*ComplexDynamic<A, B>, #ComplexDynamic.c
182
177
%c = struct_element_addr %5 : $*SingleDynamic<B>, #SingleDynamic.x
178
+
179
+ // CHECK: [[METADATA:%.*]] = bitcast %swift.type* {{%.*}} to i32*
180
+ // CHECK: [[FIELD_OFFSET_ADDR:%.*]] = getelementptr inbounds i32, i32* [[METADATA]], i64 12
181
+ // CHECK: [[FIELD_OFFSET:%.*]] = load i32, i32* [[FIELD_OFFSET_ADDR]], align 8
182
+ // CHECK: [[BYTES:%.*]] = bitcast %T15generic_structs14ComplexDynamicV* %0 to i8*
183
+ // CHECK: [[BYTE_OFFSET:%.*]] = getelementptr inbounds i8, i8* [[BYTES]], i32 [[FIELD_OFFSET]]
184
+ // CHECK: bitcast i8* [[BYTE_OFFSET]] to %T15generic_structs7CharethV
183
185
%d = struct_element_addr %0 : $*ComplexDynamic<A, B>, #ComplexDynamic.d
184
186
copy_addr %a to %1 : $*Byteful
185
187
copy_addr %b to %2 : $*A
0 commit comments