2
2
// RUN: %target-swift-frontend -emit-module -enable-resilience -enable-class-resilience -emit-module-path=%t/resilient_struct.swiftmodule -module-name=resilient_struct %S/../Inputs/resilient_struct.swift
3
3
// RUN: %target-swift-frontend -emit-module -enable-resilience -enable-class-resilience -emit-module-path=%t/resilient_enum.swiftmodule -module-name=resilient_enum -I %t %S/../Inputs/resilient_enum.swift
4
4
// RUN: %target-swift-frontend -emit-module -enable-resilience -enable-class-resilience -emit-module-path=%t/resilient_class.swiftmodule -module-name=resilient_class -I %t %S/../Inputs/resilient_class.swift
5
- // RUN: %target-swift-frontend -I %t -emit-ir -enable-resilience -enable-class-resilience %s | %FileCheck %s
5
+ // RUN: %target-swift-frontend -I %t -emit-ir -enable-resilience -enable-class-resilience %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize
6
6
// RUN: %target-swift-frontend -I %t -emit-ir -enable-resilience -enable-class-resilience -O %s
7
7
8
8
// CHECK: %swift.type = type { [[INT:i32|i64]] }
@@ -364,16 +364,24 @@ extension ResilientGenericOutsideParent {
364
364
365
365
// CHECK-LABEL: define private void @initialize_metadata_ResilientChild(i8*)
366
366
367
- // Get the superclass...
367
+ // Get the superclass size and address point ...
368
368
369
369
// CHECK: [[SUPER:%.*]] = call %swift.type* @_T015resilient_class22ResilientOutsideParentCMa()
370
370
// CHECK: [[SUPER_ADDR:%.*]] = bitcast %swift.type* [[SUPER]] to i8*
371
371
// CHECK: [[SIZE_TMP:%.*]] = getelementptr inbounds i8, i8* [[SUPER_ADDR]], i32 {{36|56}}
372
372
// CHECK: [[SIZE_ADDR:%.*]] = bitcast i8* [[SIZE_TMP]] to i32*
373
373
// CHECK: [[SIZE:%.*]] = load i32, i32* [[SIZE_ADDR]]
374
+ // CHECK: [[ADDRESS_POINT_TMP:%.*]] = getelementptr inbounds i8, i8* [[SUPER_ADDR]], i32 {{40|60}}
375
+ // CHECK: [[ADDRESS_POINT_ADDR:%.*]] = bitcast i8* [[ADDRESS_POINT_TMP]] to i32*
376
+ // CHECK: [[ADDRESS_POINT:%.*]] = load i32, i32* [[ADDRESS_POINT_ADDR]]
377
+
378
+ // CHECK: [[OFFSET:%.*]] = sub i32 [[SIZE]], [[ADDRESS_POINT]]
374
379
375
380
// Initialize class metadata base offset...
376
- // CHECK: store [[INT]] {{.*}}, [[INT]]* @_T016class_resilience14ResilientChildCMo
381
+ // CHECK-32: store [[INT]] [[OFFSET]], [[INT]]* @_T016class_resilience14ResilientChildCMo
382
+
383
+ // CHECK-64: [[OFFSET_ZEXT:%.*]] = zext i32 [[OFFSET]] to i64
384
+ // CHECK-64: store [[INT]] [[OFFSET_ZEXT]], [[INT]]* @_T016class_resilience14ResilientChildCMo
377
385
378
386
// Initialize the superclass field...
379
387
// CHECK: store %swift.type* [[SUPER]], %swift.type** getelementptr inbounds ({{.*}})
@@ -385,16 +393,24 @@ extension ResilientGenericOutsideParent {
385
393
386
394
// CHECK-LABEL: define private void @initialize_metadata_FixedLayoutChild(i8*)
387
395
388
- // Get the superclass...
396
+ // Get the superclass size and address point ...
389
397
390
398
// CHECK: [[SUPER:%.*]] = call %swift.type* @_T015resilient_class22ResilientOutsideParentCMa()
391
399
// CHECK: [[SUPER_ADDR:%.*]] = bitcast %swift.type* [[SUPER]] to i8*
392
400
// CHECK: [[SIZE_TMP:%.*]] = getelementptr inbounds i8, i8* [[SUPER_ADDR]], i32 {{36|56}}
393
401
// CHECK: [[SIZE_ADDR:%.*]] = bitcast i8* [[SIZE_TMP]] to i32*
394
402
// CHECK: [[SIZE:%.*]] = load i32, i32* [[SIZE_ADDR]]
403
+ // CHECK: [[ADDRESS_POINT_TMP:%.*]] = getelementptr inbounds i8, i8* [[SUPER_ADDR]], i32 {{40|60}}
404
+ // CHECK: [[ADDRESS_POINT_ADDR:%.*]] = bitcast i8* [[ADDRESS_POINT_TMP]] to i32*
405
+ // CHECK: [[ADDRESS_POINT:%.*]] = load i32, i32* [[ADDRESS_POINT_ADDR]]
406
+
407
+ // CHECK: [[OFFSET:%.*]] = sub i32 [[SIZE]], [[ADDRESS_POINT]]
395
408
396
409
// Initialize class metadata base offset...
397
- // CHECK: store [[INT]] {{.*}}, [[INT]]* @_T016class_resilience16FixedLayoutChildCMo
410
+ // CHECK-32: store [[INT]] [[OFFSET]], [[INT]]* @_T016class_resilience16FixedLayoutChildCMo
411
+
412
+ // CHECK-64: [[OFFSET_ZEXT:%.*]] = zext i32 [[OFFSET]] to i64
413
+ // CHECK-64: store [[INT]] [[OFFSET_ZEXT]], [[INT]]* @_T016class_resilience16FixedLayoutChildCMo
398
414
399
415
// Initialize the superclass field...
400
416
// CHECK: store %swift.type* [[SUPER]], %swift.type** getelementptr inbounds ({{.*}})
@@ -406,17 +422,25 @@ extension ResilientGenericOutsideParent {
406
422
407
423
// CHECK-LABEL: define private %swift.type* @create_generic_metadata_ResilientGenericChild(%swift.type_pattern*, i8**)
408
424
409
- // Get the superclass...
425
+ // Get the superclass size and address point ...
410
426
411
427
// CHECK: [[SUPER:%.*]] = call %swift.type* @_T015resilient_class29ResilientGenericOutsideParentCMa(%swift.type* %T)
412
428
// CHECK: [[SUPER_TMP:%.*]] = bitcast %swift.type* [[SUPER]] to %objc_class*
413
429
// CHECK: [[SUPER_ADDR:%.*]] = bitcast %objc_class* [[SUPER_TMP]] to i8*
414
430
// CHECK: [[SIZE_TMP:%.*]] = getelementptr inbounds i8, i8* [[SUPER_ADDR]], i32 {{36|56}}
415
431
// CHECK: [[SIZE_ADDR:%.*]] = bitcast i8* [[SIZE_TMP]] to i32*
416
432
// CHECK: [[SIZE:%.*]] = load i32, i32* [[SIZE_ADDR]]
433
+ // CHECK: [[ADDRESS_POINT_TMP:%.*]] = getelementptr inbounds i8, i8* [[SUPER_ADDR]], i32 {{40|60}}
434
+ // CHECK: [[ADDRESS_POINT_ADDR:%.*]] = bitcast i8* [[ADDRESS_POINT_TMP]] to i32*
435
+ // CHECK: [[ADDRESS_POINT:%.*]] = load i32, i32* [[ADDRESS_POINT_ADDR]]
436
+
437
+ // CHECK: [[OFFSET:%.*]] = sub i32 [[SIZE]], [[ADDRESS_POINT]]
417
438
418
439
// Initialize class metadata base offset...
419
- // CHECK: store [[INT]] {{.*}}, [[INT]]* @_T016class_resilience21ResilientGenericChildCMo
440
+ // CHECK-32: store [[INT]] [[OFFSET]], [[INT]]* @_T016class_resilience21ResilientGenericChildCMo
441
+
442
+ // CHECK-64: [[OFFSET_ZEXT:%.*]] = zext i32 [[OFFSET]] to i64
443
+ // CHECK-64: store [[INT]] [[OFFSET_ZEXT]], [[INT]]* @_T016class_resilience21ResilientGenericChildCMo
420
444
421
445
// CHECK: [[METADATA:%.*]] = call %swift.type* @swift_allocateGenericClassMetadata(%swift.type_pattern* %0, i8** %1, %objc_class* [[SUPER_TMP]], [[INT]] 5)
422
446
// CHECK: ret %swift.type* [[METADATA]]
0 commit comments