10
10
// RUN: %target-swift-frontend -package-name MyPkg -emit-module -enable-library-evolution -emit-module-path=%t/resilient_struct.swiftmodule -module-name=resilient_struct %S/Inputs/package_types/resilient_struct.swift
11
11
// RUN: %target-swift-frontend -package-name MyPkg -emit-module -enable-library-evolution -emit-module-path=%t/resilient_enum.swiftmodule -module-name=resilient_enum -I %t %S/Inputs/package_types/resilient_enum.swift
12
12
// RUN: %target-swift-frontend -package-name MyPkg -emit-module -enable-library-evolution -emit-module-path=%t/resilient_class.swiftmodule -module-name=resilient_class -I %t %S/Inputs/package_types/resilient_class.swift
13
- // RUN: %target-swift-frontend -package-name MyPkg -enable-objc-interop -I %t -emit-ir -enable-library-evolution %t/package_resilience.swift | %FileCheck %t/package_resilience.swift --check-prefixes=CHECK,CHECK-objc,CHECK-objc%target-ptrsize,CHECK-%target-ptrsize,CHECK-%target-cpu,CHECK-%target-import-type-objc-STABLE-ABI-%target-mandates-stable-abi,CHECK-%target-sdk-name -DINT=i%target-ptrsize -D#MDWORDS=7 -D#MDSIZE32=52 -D#MDSIZE64=80 -D#WORDSIZE=%target-alignment
14
- // RUN: %target-swift-frontend -package-name MyPkg -disable-objc-interop -I %t -emit-ir -enable-library-evolution %t/package_resilience.swift | %FileCheck %t/package_resilience.swift --check-prefixes=CHECK,CHECK-native,CHECK-native%target-ptrsize,CHECK-%target-ptrsize,CHECK-%target-cpu,CHECK-native-STABLE-ABI-%target-mandates-stable-abi,CHECK-%target-sdk-name -DINT=i%target-ptrsize -D#MDWORDS=4 -D#MDSIZE32=40 -D#MDSIZE64=56 -D#WORDSIZE=%target-alignment
13
+
14
+ // RUN: %target-swift-frontend -package-name MyPkg -enable-objc-interop -I %t -emit-ir -enable-library-evolution %t/package_resilience.swift > %t/ir-result-objc-interop-enabled.txt
15
+ // RUN: %FileCheck %t/package_resilience.swift --check-prefixes=CHECK,CHECK-objc,CHECK-objc%target-ptrsize,CHECK-%target-ptrsize,CHECK-%target-cpu,CHECK-%target-import-type-objc-STABLE-ABI-%target-mandates-stable-abi,CHECK-%target-sdk-name -DINT=i%target-ptrsize -D#MDWORDS=7 -D#MDSIZE32=52 -D#MDSIZE64=80 -D#WORDSIZE=%target-alignment < %t/ir-result-objc-interop-enabled.txt
16
+
17
+ // RUN: %target-swift-frontend -package-name MyPkg -disable-objc-interop -I %t -emit-ir -enable-library-evolution %t/package_resilience.swift > %t/ir-result-objc-interop-disabled.txt
18
+ // RUN: %FileCheck %t/package_resilience.swift --check-prefixes=CHECK,CHECK-native,CHECK-native%target-ptrsize,CHECK-%target-ptrsize,CHECK-%target-cpu,CHECK-native-STABLE-ABI-%target-mandates-stable-abi,CHECK-%target-sdk-name -DINT=i%target-ptrsize -D#MDWORDS=4 -D#MDSIZE32=40 -D#MDSIZE64=56 -D#WORDSIZE=%target-alignment < %t/ir-result-objc-interop-disabled.txt
19
+
15
20
// RUN: %target-swift-frontend -package-name MyPkg -I %t -emit-ir -enable-library-evolution -O %t/package_resilience.swift -package-name MyPkg
16
21
// REQUIRES: objc_codegen
17
22
// REQUIRES: OS=macosx || OS=ios || OS=tvos || OS=watchos
18
23
// REQUIRES: CPU=x86_64 || CPU=arm64
19
24
20
- // CHECK: @"$s18package_resilience26ClassWithResilientPropertyC1p16resilient_struct5PointVvpWvd" = constant [[INT]] {{8|16}}, align [[#WORDSIZE]]
21
- // CHECK: @"$s18package_resilience26ClassWithResilientPropertyC1s16resilient_struct4SizeVvpWvd" = constant [[INT]] {{32|16}}, align [[#WORDSIZE]]
25
+ // CHECK: @"$s18package_resilience26ClassWithResilientPropertyC1p16resilient_struct5PointVvpWvd" = hidden global [[INT]] 0,
26
+ // CHECK: @"$s18package_resilience26ClassWithResilientPropertyC1s16resilient_struct4SizeVvpWvd" = hidden global [[INT]] 0,
27
+ // CHECK: @"$s18package_resilience26ClassWithResilientPropertyC5colors5Int32VvpWvd" = hidden global i64 0, align 8
28
+ // CHECK: @"$s18package_resilience33ClassWithResilientlySizedPropertyC1r16resilient_struct9RectangleVvpWvd" = hidden global i64 0, align 8
29
+ // CHECK: @"$s18package_resilience33ClassWithResilientlySizedPropertyC5colors5Int32VvpWvd" = hidden global i64 0, align 8
30
+ // CHECK: @"$s18package_resilience30ClassWithIndirectResilientEnumC1s14resilient_enum10FunnyShapeOvpWvd" = hidden global i64 0, align 8
31
+ // CHECK: @"$s18package_resilience30ClassWithIndirectResilientEnumC5colors5Int32VvpWvd" = hidden global i64 0, align 8
22
32
23
- // CHECK: @"$s18package_resilience33ClassWithResilientlySizedPropertyC1r16resilient_struct9RectangleVvpWvd " = constant [[INT]] {{8|16}}, align [[#WORDSIZE]]
24
- // CHECK: @"$s18package_resilience33ClassWithResilientlySizedPropertyC5colors5Int32VvpWvd " = constant [[INT]] 56, align [[#WORDSIZE]]
33
+ // CHECK: @"$s18package_resilience27ClassWithEmptyThenResilientC9resilient0H7_struct0G3IntVvpWvd " = hidden global [[INT]] 0,
34
+ // CHECK: @"$s18package_resilience27ClassWithResilientThenEmptyC9resilient0H7_struct0E3IntVvpWvd " = hidden global [[INT]] 0,
25
35
36
+ // CHECK: @"$s18package_resilience17MyResilientParentC1sAA0cD6StructVvpWvd" = hidden constant [[INT]] [[#WORDSIZE + WORDSIZE]]
26
37
// CHECK: @"$s18package_resilience17MyResilientParentCMo" = constant [[BOUNDS:{ (i32|i64), i32, i32 }]]
27
38
// CHECK-32-SAME: { [[INT]] [[#MDSIZE32]], i32 3, i32 [[#MDWORDS + 6 + 2]] }, align [[#WORDSIZE]]
28
39
// CHECK-64-SAME: { [[INT]] [[#MDSIZE64]], i32 3, i32 [[#MDWORDS + 3 + 2]] }, align [[#WORDSIZE]]
29
40
30
- // CHECK: @"$s18package_resilience16MyResilientChildC5fields5Int32VvpWvd" = constant [[INT]] [[#WORDSIZE + WORDSIZE + 4]], align [[#WORDSIZE]]
41
+ // CHECK: @"$s18package_resilience16MyResilientChildC5fields5Int32VvpWvd" = hidden constant [[INT]] [[#WORDSIZE + WORDSIZE + 4]],
31
42
32
43
// CHECK: @"$s18package_resilience16MyResilientChildCMo" = {{(protected )?}}{{(dllexport )?}}constant [[BOUNDS]]
33
44
// CHECK-32-SAME: { [[INT]] [[#MDSIZE32 + WORDSIZE + WORDSIZE]], i32 3, i32 [[#MDWORDS + 6 + 3]] }
41
52
// CHECK-32-SAME: { [[INT]] [[#MDSIZE32 + WORDSIZE + WORDSIZE + WORDSIZE]], i32 3, i32 [[#MDWORDS + 6 + 5]] }
42
53
// CHECK-64-SAME: { [[INT]] [[#MDSIZE64 + WORDSIZE + WORDSIZE + WORDSIZE]], i32 3, i32 [[#MDWORDS + 3 + 5]] }
43
54
44
- // CHECK: @"$s18package_resilience27ClassWithEmptyThenResilientC5emptyAA0E0VvpWvd" = constant [[INT]] 0,
45
- // CHECK: @"$s18package_resilience27ClassWithEmptyThenResilientC9resilient0H7_struct0G3IntVvpWvd" = constant [[INT]] [[#WORDSIZE + WORDSIZE]], align [[#WORDSIZE]]
46
- // CHECK: @"$s18package_resilience27ClassWithResilientThenEmptyC9resilient0H7_struct0E3IntVvpWvd" = constant [[INT]] [[#WORDSIZE + WORDSIZE]], align [[#WORDSIZE]]
47
- // CHECK: @"$s18package_resilience27ClassWithResilientThenEmptyC5emptyAA0G0VvpWvd" = constant [[INT]] 0,
55
+ // CHECK: @"$s18package_resilience27ClassWithEmptyThenResilientC5emptyAA0E0VvpWvd" = hidden constant [[INT]] 0,
56
+ // CHECK: @"$s18package_resilience27ClassWithResilientThenEmptyC5emptyAA0G0VvpWvd" = hidden constant [[INT]] 0,
48
57
49
58
import resilient_class
50
59
import resilient_struct
@@ -172,24 +181,27 @@ package class ClassWithResilientThenEmpty {
172
181
// ClassWithResilientProperty.color getter
173
182
174
183
// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i32 @"$s18package_resilience26ClassWithResilientPropertyC5colors5Int32Vvg"(ptr swiftself %0)
175
- // CHECK: [[FIELD_ADDR:%.*]] = getelementptr inbounds %T18package_resilience26ClassWithResilientPropertyC, ptr %0,
176
- // CHECK-NEXT: [[FIELD_PAYLOAD:%.*]] = getelementptr inbounds %Ts5Int32V, ptr [[FIELD_ADDR]], i32 0, i32 0
177
- // CHECK-NEXT: [[FIELD_VALUE:%.*]] = load i32, ptr [[FIELD_PAYLOAD]]
178
- // CHECK: ret i32 [[FIELD_VALUE]]
184
+ // CHECK: [[OFFSET:%.*]] = load [[INT]], ptr @"$s18package_resilience26ClassWithResilientPropertyC5colors5Int32VvpWvd",
185
+ // CHECK-NEXT: [[FIELD_ADDR:%.*]] = getelementptr inbounds i8, ptr %0, [[INT]] [[OFFSET]]
186
+ // CHECK-NEXT: [[FIELD_VALUE:%.*]] = getelementptr inbounds %Ts5Int32V, ptr [[FIELD_ADDR]], i32 0, i32 0
187
+ // CHECK-NEXT: [[FIELD_PAYLOAD:%.*]] = load i32, ptr [[FIELD_VALUE]]
188
+ // CHECK: ret i32 [[FIELD_PAYLOAD]]
179
189
180
190
// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i32 @"$s18package_resilience33ClassWithResilientlySizedPropertyC5colors5Int32Vvg"(ptr swiftself %0)
181
- // CHECK: [[FIELD_ADDR:%.*]] = getelementptr inbounds %T18package_resilience33ClassWithResilientlySizedPropertyC, ptr %0,
182
- // CHECK-NEXT: [[FIELD_PAYLOAD:%.*]] = getelementptr inbounds %Ts5Int32V, ptr [[FIELD_ADDR]], i32 0, i32 0
183
- // CHECK-NEXT: [[FIELD_VALUE:%.*]] = load i32, ptr [[FIELD_PAYLOAD]]
184
- // CHECK: ret i32 [[FIELD_VALUE]]
191
+ // CHECK: [[OFFSET:%.*]] = load [[INT]], ptr @"$s18package_resilience33ClassWithResilientlySizedPropertyC5colors5Int32VvpWvd",
192
+ // CHECK-NEXT: [[FIELD_ADDR:%.*]] = getelementptr inbounds i8, ptr %0, [[INT]] [[OFFSET]]
193
+ // CHECK-NEXT: [[FIELD_VALUE:%.*]] = getelementptr inbounds %Ts5Int32V, ptr [[FIELD_ADDR]], i32 0, i32 0
194
+ // CHECK-NEXT: [[FIELD_PAYLOAD:%.*]] = load i32, ptr [[FIELD_VALUE]]
195
+ // CHECK: ret i32 [[FIELD_PAYLOAD]]
185
196
186
197
// ClassWithIndirectResilientEnum.color getter
187
198
188
199
// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i32 @"$s18package_resilience30ClassWithIndirectResilientEnumC5colors5Int32Vvg"(ptr swiftself %0)
189
- // CHECK: [[FIELD_PTR:%.*]] = getelementptr inbounds %T18package_resilience30ClassWithIndirectResilientEnumC, ptr %0, i32 0, i32 2
190
- // CHECK-NEXT: [[FIELD_PAYLOAD:%.*]] = getelementptr inbounds %Ts5Int32V, ptr [[FIELD_PTR]], i32 0, i32 0
191
- // CHECK-NEXT: [[FIELD_VALUE:%.*]] = load i32, ptr [[FIELD_PAYLOAD]]
192
- // CHECK-NEXT: ret i32 [[FIELD_VALUE]]
200
+ // CHECK: [[OFFSET:%.*]] = load [[INT]], ptr @"$s18package_resilience30ClassWithIndirectResilientEnumC5colors5Int32VvpWvd",
201
+ // CHECK-NEXT: [[FIELD_PTR:%.*]] = getelementptr inbounds i8, ptr %0, [[INT]] [[OFFSET]]
202
+ // CHECK-NEXT: [[FIELD_VALUE:%.*]] = getelementptr inbounds %Ts5Int32V, ptr [[FIELD_PTR]], i32 0, i32 0
203
+ // CHECK-NEXT: [[FIELD_PAYLOAD:%.*]] = load i32, ptr [[FIELD_VALUE]]
204
+ // CHECK-NEXT: ret i32 [[FIELD_PAYLOAD]]
193
205
194
206
// Make sure that MemoryLayout always emits constants
195
207
@@ -214,29 +226,43 @@ package class ClassWithResilientThenEmpty {
214
226
215
227
// CHECK-LABEL: define{{.*}} swiftcc {{i32|i64}} @"$s18package_resilience38memoryLayoutDotSizeWithResilientStructSiyF"()
216
228
public func memoryLayoutDotSizeWithResilientStruct( ) -> Int {
217
- // CHECK: ret [[INT]] [[#WORDSIZE + WORDSIZE]]
229
+ // CHECK: [[FIELD_VALUE:%.*]] = load ptr, ptr {{.*}},
230
+ // CHECK-NEXT: [[FIELD_PTR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[FIELD_VALUE]],
231
+ // CHECK-NEXT: [[SIZE:%.*]] = load [[INT]], ptr [[FIELD_PTR]],
232
+ // CHECK-NEXT: ret [[INT]] [[SIZE]]
218
233
return MemoryLayout< Size> . size
219
234
}
220
235
221
236
// CHECK-LABEL: define{{.*}} swiftcc {{i32|i64}} @"$s18package_resilience40memoryLayoutDotStrideWithResilientStructSiyF"()
222
237
public func memoryLayoutDotStrideWithResilientStruct( ) -> Int {
223
- // CHECK: ret [[INT]] [[#WORDSIZE + WORDSIZE]]
238
+ // CHECK: [[FIELD_VALUE:%.*]] = load ptr, ptr {{.*}},
239
+ // CHECK-NEXT: [[FIELD_PTR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[FIELD_VALUE]],
240
+ // CHECK-NEXT: [[SIZE:%.*]] = load [[INT]], ptr [[FIELD_PTR]],
241
+ // CHECK-NEXT: ret [[INT]] [[SIZE]]
224
242
return MemoryLayout< Size> . size
225
243
}
226
244
227
245
// CHECK-LABEL: define{{.*}} swiftcc {{i32|i64}} @"$s18package_resilience43memoryLayoutDotAlignmentWithResilientStructSiyF"()
228
246
public func memoryLayoutDotAlignmentWithResilientStruct( ) -> Int {
229
- // CHECK: ret [[INT]] [[#WORDSIZE]]
247
+ // CHECK: [[FIELD_VALUE:%.*]] = load ptr, ptr {{.*}},
248
+ // CHECK-NEXT: [[FIELD_PTR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[FIELD_VALUE]],
249
+ // CHECK-NEXT: [[FIELD_FLAGS:%.*]] = load i32, ptr [[FIELD_PTR]],
250
+ // CHECK-NEXT: [[FIELD_ADDR:%.*]] = zext i32 [[FIELD_FLAGS]] to [[INT]]
251
+ // CHECK-NEXT: [[FIELD_MASK:%.*]] = and [[INT]] [[FIELD_ADDR]], 255
252
+ // CHECK-NEXT: [[FIELD_PAYLOAD:%.*]] = add [[INT]] [[FIELD_MASK]], 1
253
+ // CHECK-NEXT: ret [[INT]] [[FIELD_PAYLOAD]]
230
254
return MemoryLayout< Size> . alignment
231
255
}
232
256
233
- // CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc [[BOUNDS:{ (i32|i64), (i32|i64), i8 }]] @"$s18package_resilience31constructResilientEnumNoPayload14resilient_enum6MediumOyF"
257
+ // CHECK-LABEL : define{{( dllexport)?}}{{( protected)?}} swiftcc [[BOUNDS:{ (i32|i64), (i32|i64), i8 }]] @"$s18package_resilience31constructResilientEnumNoPayload14resilient_enum6MediumOyF"
234
258
package func constructResilientEnumNoPayload( ) -> Medium {
235
- // CHECK: ret [[BOUNDS]] { {{i32|i64}} 0, {{i32|i64}} 0, i8 2 }
259
+ // CHECK: [[FIELD_TAG:%.*]] = load ptr, ptr {{.*}},
260
+ // CHECK-NEXT: call void [[FIELD_TAG]](ptr noalias
261
+ // CHECK-NEXT: ret void
236
262
return Medium . Paper
237
263
}
238
264
239
- // CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc [[BOUNDS:{ (i32|i64), (i32|i64), i8 }]] @"$s18package_resilience39constructExhaustiveWithResilientMembers14resilient_enum11SimpleShapeOyF"() #0 {
265
+ // CHECK-LABEL : define{{( dllexport)?}}{{( protected)?}} swiftcc [[BOUNDS:{ (i32|i64), (i32|i64), i8 }]] @"$s18package_resilience39constructExhaustiveWithResilientMembers14resilient_enum11SimpleShapeOyF"() #0 {
240
266
package func constructExhaustiveWithResilientMembers( ) -> SimpleShape {
241
267
// CHECK: ret [[BOUNDS]] { {{i32|i64}} 0, {{i32|i64}} 0, i8 1 }
242
268
return . KleinBottle
@@ -245,20 +271,18 @@ package func constructExhaustiveWithResilientMembers() -> SimpleShape {
245
271
// ClassWithResilientProperty metadata accessor
246
272
247
273
// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc %swift.metadata_response @"$s18package_resilience26ClassWithResilientPropertyCMa"(
248
- // CHECK-objc: [[METADATA:%.*]] = call ptr {{.*}}@"$s18package_resilience26ClassWithResilientPropertyCMf"{{.*}}
249
- // CHECK-objc-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, ptr [[METADATA]], 0
250
- // CHECK-objc-NEXT: [[T1:%.*]] = insertvalue %swift.metadata_response [[T0]], i64 0, 1
251
- // CHECK-objc-NEXT: ret %swift.metadata_response [[T1]]
274
+ // CHECK-objc: [[T0:%.*]] = load ptr, ptr @"$s18package_resilience26ClassWithResilientPropertyCMl",
275
+ // CHECK-objc-NEXT: [[T1:%.*]] = icmp eq ptr [[T0]], null
276
+ // CHECK-objc-NEXT: br i1 [[T1]], label %cacheIsNull, label %cont
252
277
253
278
// CHECK-native: ret %swift.metadata_response
254
279
255
280
// ClassWithResilientlySizedProperty metadata accessor
256
281
257
282
// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc %swift.metadata_response @"$s18package_resilience33ClassWithResilientlySizedPropertyCMa"(
258
- // CHECK-objc: [[METADATA:%.*]] = call ptr {{.*}}@"$s18package_resilience33ClassWithResilientlySizedPropertyCMf"{{.*}}
259
- // CHECK-objc-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, ptr [[METADATA]], 0
260
- // CHECK-objc-NEXT: [[T1:%.*]] = insertvalue %swift.metadata_response [[T0]], i64 0, 1
261
- // CHECK-objc-NEXT: ret %swift.metadata_response [[T1]]
283
+ // CHECK-objc: [[T0:%.*]] = load ptr, ptr @"$s18package_resilience33ClassWithResilientlySizedPropertyCMl",
284
+ // CHECK-objc-NEXT: [[T1:%.*]] = icmp eq ptr [[T0]], null
285
+ // CHECK-objc-NEXT: br i1 [[T1]], label %cacheIsNull, label %cont
262
286
263
287
// CHECK-native: ret %swift.metadata_response
264
288
0 commit comments