@@ -12,14 +12,12 @@ public class FixedLayoutObjCSubclass : NSObject {
12
12
public final var field : Int32 = 0
13
13
} ;
14
14
15
- // CHECK-LABEL: define hidden swiftcc void @"$s28class_resilience_objc_armv7k29testConstantDirectFieldAccessyyAA23FixedLayoutObjCSubclassCF"(%T28class_resilience_objc_armv7k23FixedLayoutObjCSubclassC* %0)
16
- // CHECK: [[OFFSET:%.*]] = load [[INT]], [[INT]]* @"$s28class_resilience_objc_armv7k23FixedLayoutObjCSubclassC5fields5Int32VvpWvd"
17
- // CHECK-NEXT: [[OBJECT:%.*]] = bitcast %T28class_resilience_objc_armv7k23FixedLayoutObjCSubclassC* %0 to i8*
18
- // CHECK-NEXT: [[ADDR:%.*]] = getelementptr inbounds i8, i8* [[OBJECT]], [[INT]] [[OFFSET]]
19
- // CHECK-NEXT: [[FIELD_ADDR:%.*]] = bitcast i8* [[ADDR]] to %Ts5Int32V*
15
+ // CHECK-LABEL: define hidden swiftcc void @"$s28class_resilience_objc_armv7k29testConstantDirectFieldAccessyyAA23FixedLayoutObjCSubclassCF"(ptr %0)
16
+ // CHECK: [[OFFSET:%.*]] = load [[INT]], ptr @"$s28class_resilience_objc_armv7k23FixedLayoutObjCSubclassC5fields5Int32VvpWvd"
17
+ // CHECK-NEXT: [[ADDR:%.*]] = getelementptr inbounds i8, ptr %0, [[INT]] [[OFFSET]]
20
18
// CHECK: call void @swift_beginAccess
21
- // CHECK-NEXT: [[PAYLOAD_ADDR:%.*]] = getelementptr inbounds %Ts5Int32V, %Ts5Int32V* [[FIELD_ADDR ]], i32 0, i32 0
22
- // CHECK-NEXT: store i32 10, i32* [[PAYLOAD_ADDR]]
19
+ // CHECK-NEXT: [[PAYLOAD_ADDR:%.*]] = getelementptr inbounds %Ts5Int32V, ptr [[ADDR ]], i32 0, i32 0
20
+ // CHECK-NEXT: store i32 10, ptr [[PAYLOAD_ADDR]]
23
21
24
22
func testConstantDirectFieldAccess( _ o: FixedLayoutObjCSubclass ) {
25
23
o. field = 10
@@ -31,14 +29,12 @@ public class NonFixedLayoutObjCSubclass : NSCoder {
31
29
public final var field : Int32 = 0
32
30
}
33
31
34
- // CHECK-LABEL: define hidden swiftcc void @"$s28class_resilience_objc_armv7k32testNonConstantDirectFieldAccessyyAA0F23FixedLayoutObjCSubclassCF"(%T28class_resilience_objc_armv7k26NonFixedLayoutObjCSubclassC* %0)
35
- // CHECK: [[OFFSET:%.*]] = load [[INT]], [[INT]]* @"$s28class_resilience_objc_armv7k26NonFixedLayoutObjCSubclassC5fields5Int32VvpWvd"
36
- // CHECK-NEXT: [[OBJECT:%.*]] = bitcast %T28class_resilience_objc_armv7k26NonFixedLayoutObjCSubclassC* %0 to i8*
37
- // CHECK-NEXT: [[ADDR:%.*]] = getelementptr inbounds i8, i8* [[OBJECT]], [[INT]] [[OFFSET]]
38
- // CHECK-NEXT: [[FIELD_ADDR:%.*]] = bitcast i8* [[ADDR]] to %Ts5Int32V*
32
+ // CHECK-LABEL: define hidden swiftcc void @"$s28class_resilience_objc_armv7k32testNonConstantDirectFieldAccessyyAA0F23FixedLayoutObjCSubclassCF"(ptr %0)
33
+ // CHECK: [[OFFSET:%.*]] = load [[INT]], ptr @"$s28class_resilience_objc_armv7k26NonFixedLayoutObjCSubclassC5fields5Int32VvpWvd"
34
+ // CHECK-NEXT: [[ADDR:%.*]] = getelementptr inbounds i8, ptr %0, [[INT]] [[OFFSET]]
39
35
// CHECK: call void @swift_beginAccess
40
- // CHECK-NEXT: [[PAYLOAD_ADDR:%.*]] = getelementptr inbounds %Ts5Int32V, %Ts5Int32V* [[FIELD_ADDR ]], i32 0, i32 0
41
- // CHECK-NEXT: store i32 10, i32* [[PAYLOAD_ADDR]]
36
+ // CHECK-NEXT: [[PAYLOAD_ADDR:%.*]] = getelementptr inbounds %Ts5Int32V, ptr [[ADDR ]], i32 0, i32 0
37
+ // CHECK-NEXT: store i32 10, ptr [[PAYLOAD_ADDR]]
42
38
43
39
func testNonConstantDirectFieldAccess( _ o: NonFixedLayoutObjCSubclass ) {
44
40
o. field = 10
@@ -53,24 +49,19 @@ public class GenericObjCSubclass<T> : NSCoder {
53
49
}
54
50
}
55
51
56
- // CHECK-LABEL: define hidden swiftcc void @"$s28class_resilience_objc_armv7k31testConstantIndirectFieldAccessyyAA19GenericObjCSubclassCyxGlF"(%T28class_resilience_objc_armv7k19GenericObjCSubclassC* %0)
52
+ // CHECK-LABEL: define hidden swiftcc void @"$s28class_resilience_objc_armv7k31testConstantIndirectFieldAccessyyAA19GenericObjCSubclassCyxGlF"(ptr %0)
57
53
58
54
// FIXME: we could eliminate the unnecessary isa load by lazily emitting
59
55
// metadata sources in EmitPolymorphicParameters
60
56
61
- // CHECK: call %objc_class* @object_getClass
62
- // CHECK: [[ADDR:%.*]] = bitcast %T28class_resilience_objc_armv7k19GenericObjCSubclassC* %0 to %objc_object*
63
- // CHECK-NEXT: [[KLASS:%.*]] = call %objc_class* @object_getClass(%objc_object* [[ADDR]])
64
- // CHECK-NEXT: [[ISA:%.*]] = bitcast %objc_class* [[KLASS]] to %swift.type*
65
- // CHECK-NEXT: [[ISA_ADDR:%.*]] = bitcast %swift.type* [[ISA]] to [[INT]]*
66
- // CHECK-NEXT: [[FIELD_OFFSET_ADDR:%.*]] = getelementptr inbounds [[INT]], [[INT]]* [[ISA_ADDR]], [[INT]] 15
67
- // CHECK-NEXT: [[FIELD_OFFSET:%.*]] = load [[INT]], [[INT]]* [[FIELD_OFFSET_ADDR:%.*]]
68
- // CHECK-NEXT: [[OBJECT:%.*]] = bitcast %T28class_resilience_objc_armv7k19GenericObjCSubclassC* %0 to i8*
69
- // CHECK-NEXT: [[ADDR:%.*]] = getelementptr inbounds i8, i8* [[OBJECT]], [[INT]] [[FIELD_OFFSET]]
70
- // CHECK-NEXT: [[FIELD_ADDR:%.*]] = bitcast i8* [[ADDR]] to %Ts5Int32V*
57
+ // CHECK: call ptr @object_getClass
58
+ // CHECK: [[KLASS:%.*]] = call ptr @object_getClass(ptr %0)
59
+ // CHECK-NEXT: [[FIELD_OFFSET_ADDR:%.*]] = getelementptr inbounds [[INT]], ptr [[KLASS]], [[INT]] 15
60
+ // CHECK-NEXT: [[FIELD_OFFSET:%.*]] = load [[INT]], ptr [[FIELD_OFFSET_ADDR:%.*]]
61
+ // CHECK-NEXT: [[ADDR:%.*]] = getelementptr inbounds i8, ptr %0, [[INT]] [[FIELD_OFFSET]]
71
62
// CHECK: call void @swift_beginAccess
72
- // CHECK-NEXT: [[PAYLOAD_ADDR:%.*]] = getelementptr inbounds %Ts5Int32V, %Ts5Int32V* [[FIELD_ADDR ]], i32 0, i32 0
73
- // CHECK-NEXT: store i32 10, i32* [[PAYLOAD_ADDR]]
63
+ // CHECK-NEXT: [[PAYLOAD_ADDR:%.*]] = getelementptr inbounds %Ts5Int32V, ptr [[ADDR ]], i32 0, i32 0
64
+ // CHECK-NEXT: store i32 10, ptr [[PAYLOAD_ADDR]]
74
65
75
66
func testConstantIndirectFieldAccess< T> ( _ o: GenericObjCSubclass < T > ) {
76
67
// This field uses constant indirect access because NSCoder has resilient
0 commit comments