Skip to content

Commit 66ba75c

Browse files
committed
IRGen: Update super.sil test to use -enable-class-resilience
1 parent fea92a0 commit 66ba75c

File tree

1 file changed

+51
-37
lines changed

1 file changed

+51
-37
lines changed

test/IRGen/super.sil

Lines changed: 51 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
// RUN: %empty-directory(%t)
2-
// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -emit-module -enable-resilience -I %t -module-name resilient_struct -o %t %S/../Inputs/resilient_struct.swift
3-
// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -emit-module -enable-resilience -I %t -module-name resilient_class -o %t %S/../Inputs/resilient_class.swift
4-
// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -enable-resilience -parse-sil -parse-as-library -emit-ir -I %t %s | %FileCheck %s
2+
// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -emit-module -enable-resilience -enable-class-resilience -I %t -module-name resilient_struct -o %t %S/../Inputs/resilient_struct.swift
3+
// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -emit-module -enable-resilience -enable-class-resilience -I %t -module-name resilient_class -o %t %S/../Inputs/resilient_class.swift
4+
// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -enable-resilience -enable-class-resilience -parse-sil -parse-as-library -emit-ir -I %t %s | %FileCheck %s
5+
6+
// CHECK: %swift.type = type { [[INT:i32|i64]] }
57

68
sil_stage canonical
79

@@ -51,10 +53,13 @@ bb0(%0 : $ChildToResilientParent):
5153

5254
// ChildToResilientParent is in our resilience domain - can load the superclass's metadata directly.
5355
// CHECK-LABEL: define{{( protected)?}} swiftcc void @_T05super22ChildToResilientParentC6methodyyF(%T5super22ChildToResilientParentC* swiftself)
54-
// CHECK: [[SUPER_METADATA:%[0-9]+]] = call %swift.type* @_T015resilient_class22ResilientOutsideParentCMa()
55-
// CHECK: [[OPAQUE_SUPER_METADATA:%[0-9]+]] = bitcast %swift.type* [[SUPER_METADATA]] to void (%T15resilient_class22ResilientOutsideParentC*)**
56-
// CHECK: [[VTABLE_SLOT:%[0-9]+]] = getelementptr inbounds void (%T15resilient_class22ResilientOutsideParentC*)*, void (%T15resilient_class22ResilientOutsideParentC*)** [[OPAQUE_SUPER_METADATA]]
57-
// CHECK: [[FN_PTR:%[0-9]+]] = load void (%T15resilient_class22ResilientOutsideParentC*)*, void (%T15resilient_class22ResilientOutsideParentC*)** [[VTABLE_SLOT]]
56+
// CHECK: [[SUPER_METADATA:%.*]] = call %swift.type* @_T015resilient_class22ResilientOutsideParentCMa()
57+
// CHECK: [[BASE:%.*]] = load [[INT]], [[INT]]* @_T015resilient_class22ResilientOutsideParentCMo
58+
// CHECK: [[VTABLE_OFFSET:%.*]] = add [[INT]] [[BASE]], {{20|40}}
59+
// CHECK: [[SUPER_ADDR:%.*]] = bitcast %swift.type* [[SUPER_METADATA]] to i8*
60+
// CHECK: [[VTABLE_ADDR:%.*]] = getelementptr inbounds i8, i8* [[SUPER_ADDR]], [[INT]] [[VTABLE_OFFSET]]
61+
// CHECK: [[VTABLE_SLOT:%.*]] = bitcast i8* [[VTABLE_ADDR]] to void (%T15resilient_class22ResilientOutsideParentC*)**
62+
// CHECK: [[FN_PTR:%.*]] = load void (%T15resilient_class22ResilientOutsideParentC*)*, void (%T15resilient_class22ResilientOutsideParentC*)** [[VTABLE_SLOT]]
5863
// CHECK: call void
5964

6065
// static super.ChildToResilientParent.classMethod () -> ()
@@ -70,10 +75,13 @@ bb0(%0 : $@thick ChildToResilientParent.Type):
7075

7176
// ChildToResilientParent is in our resilience domain - can load the superclass's metadata directly.
7277
// CHECK-LABEL: define{{( protected)?}} swiftcc void @_T05super22ChildToResilientParentC11classMethodyyFZ(%swift.type* swiftself)
73-
// CHECK: [[SUPER_METADATA:%[0-9]+]] = call %swift.type* @_T015resilient_class22ResilientOutsideParentCMa()
74-
// CHECK: [[OPAQUE_SUPER_METADATA:%[0-9]+]] = bitcast %swift.type* [[SUPER_METADATA]] to void (%swift.type*)**
75-
// CHECK: [[VTABLE_SLOT:%[0-9]+]] = getelementptr inbounds void (%swift.type*)*, void (%swift.type*)** [[OPAQUE_SUPER_METADATA]]
76-
// CHECK: [[FN_PTR:%[0-9]+]] = load void (%swift.type*)*, void (%swift.type*)** [[VTABLE_SLOT]]
78+
// CHECK: [[SUPER_METADATA:%.*]] = call %swift.type* @_T015resilient_class22ResilientOutsideParentCMa()
79+
// CHECK: [[BASE:%.*]] = load [[INT]], [[INT]]* @_T015resilient_class22ResilientOutsideParentCMo
80+
// CHECK: [[VTABLE_OFFSET:%.*]] = add [[INT]] [[BASE]], {{24|48}}
81+
// CHECK: [[SUPER_ADDR:%.*]] = bitcast %swift.type* [[SUPER_METADATA]] to i8*
82+
// CHECK: [[VTABLE_ADDR:%.*]] = getelementptr inbounds i8, i8* [[SUPER_ADDR]], [[INT]] [[VTABLE_OFFSET]]
83+
// CHECK: [[VTABLE_SLOT:%.*]] = bitcast i8* [[VTABLE_ADDR]] to void (%swift.type*)**
84+
// CHECK: [[FN_PTR:%.*]] = load void (%swift.type*)*, void (%swift.type*)** [[VTABLE_SLOT]]
7785
// CHECK: call swiftcc void
7886

7987
// resilient_class.OutsideParent.method () -> ()
@@ -97,10 +105,10 @@ bb0(%0 : $ChildToFixedParent):
97105
}
98106

99107
// CHECK-LABEL: define{{( protected)?}} swiftcc void @_T05super18ChildToFixedParentC6methodyyF(%T5super18ChildToFixedParentC* swiftself)
100-
// CHECK: [[SUPER_METADATA:%[0-9]+]] = call %swift.type* @_T015resilient_class13OutsideParentCMa()
101-
// CHECK: [[OPAQUE_SUPER_METADATA:%[0-9]+]] = bitcast %swift.type* [[SUPER_METADATA]] to void (%T15resilient_class13OutsideParentC*)**
102-
// CHECK: [[VTABLE_SLOT:%[0-9]+]] = getelementptr inbounds void (%T15resilient_class13OutsideParentC*)*, void (%T15resilient_class13OutsideParentC*)** [[OPAQUE_SUPER_METADATA]]
103-
// CHECK: [[FN_PTR:%[0-9]+]] = load void (%T15resilient_class13OutsideParentC*)*, void (%T15resilient_class13OutsideParentC*)** [[VTABLE_SLOT]]
108+
// CHECK: [[SUPER_METADATA:%.*]] = call %swift.type* @_T015resilient_class13OutsideParentCMa()
109+
// CHECK: [[OPAQUE_SUPER_METADATA:%.*]] = bitcast %swift.type* [[SUPER_METADATA]] to void (%T15resilient_class13OutsideParentC*)**
110+
// CHECK: [[VTABLE_SLOT:%.*]] = getelementptr inbounds void (%T15resilient_class13OutsideParentC*)*, void (%T15resilient_class13OutsideParentC*)** [[OPAQUE_SUPER_METADATA]]
111+
// CHECK: [[FN_PTR:%.*]] = load void (%T15resilient_class13OutsideParentC*)*, void (%T15resilient_class13OutsideParentC*)** [[VTABLE_SLOT]]
104112
// CHECK: call swiftcc void
105113

106114
// static super.ChildToFixedParent.classMethod () -> ()
@@ -117,10 +125,10 @@ bb0(%0 : $@thick ChildToFixedParent.Type):
117125

118126
// ChildToFixedParent is in our resilience domain - load super metadata directly.
119127
// CHECK-LABEL: define{{( protected)?}} swiftcc void @_T05super18ChildToFixedParentC11classMethodyyFZ(%swift.type* swiftself)
120-
// CHECK: [[SUPER_METADATA:%[0-9]+]] = call %swift.type* @_T015resilient_class13OutsideParentCMa()
121-
// CHECK: [[OPAQUE_SUPER_METADATA:%[0-9]+]] = bitcast %swift.type* [[SUPER_METADATA]] to void (%swift.type*)**
122-
// CHECK: [[VTABLE_SLOT:%[0-9]+]] = getelementptr inbounds void (%swift.type*)*, void (%swift.type*)** [[OPAQUE_SUPER_METADATA]]
123-
// CHECK: [[FN_PTR:%[0-9]+]] = load void (%swift.type*)*, void (%swift.type*)** [[VTABLE_SLOT]]
128+
// CHECK: [[SUPER_METADATA:%.*]] = call %swift.type* @_T015resilient_class13OutsideParentCMa()
129+
// CHECK: [[OPAQUE_SUPER_METADATA:%.*]] = bitcast %swift.type* [[SUPER_METADATA]] to void (%swift.type*)**
130+
// CHECK: [[VTABLE_SLOT:%.*]] = getelementptr inbounds void (%swift.type*)*, void (%swift.type*)** [[OPAQUE_SUPER_METADATA]]
131+
// CHECK: [[FN_PTR:%.*]] = load void (%swift.type*)*, void (%swift.type*)** [[VTABLE_SLOT]]
124132
// CHECK: call swiftcc void
125133

126134
// ext.super.resilient_class.ResilientOutsideChild.callSuperMethod () -> ()
@@ -139,13 +147,16 @@ bb0(%0 : $ResilientOutsideChild):
139147

140148
// Extending a resilient class - load super metadata indirectly.
141149
// CHECK-LABEL: define{{( protected)?}} swiftcc void @_T015resilient_class21ResilientOutsideChildC5superE15callSuperMethodyyF(%T15resilient_class21ResilientOutsideChildC* swiftself)
142-
// CHECK: [[METADATA:%[0-9]+]] = call %swift.type* @_T015resilient_class21ResilientOutsideChildCMa()
143-
// CHECK: [[OPAQUE_METADATA:%[0-9]+]] = bitcast %swift.type* [[METADATA]] to %swift.type**
144-
// CHECK: [[SUPER_METADATA_PTR:%[0-9]+]] = getelementptr inbounds %swift.type*, %swift.type** [[OPAQUE_METADATA]], i32 1
145-
// CHECK: [[SUPER_METADATA:%[0-9]+]] = load %swift.type*, %swift.type** [[SUPER_METADATA_PTR]]
146-
// CHECK: [[OPAQUE_SUPER_METADATA:%[0-9]+]] = bitcast %swift.type* [[SUPER_METADATA]] to void (%T15resilient_class22ResilientOutsideParentC*)**
147-
// CHECK: [[VTABLE_SLOT:%[0-9]+]] = getelementptr inbounds void (%T15resilient_class22ResilientOutsideParentC*)*, void (%T15resilient_class22ResilientOutsideParentC*)** [[OPAQUE_SUPER_METADATA]]
148-
// CHECK: [[FN_PTR:%[0-9]+]] = load void (%T15resilient_class22ResilientOutsideParentC*)*, void (%T15resilient_class22ResilientOutsideParentC*)** [[VTABLE_SLOT]]
150+
// CHECK: [[METADATA:%.*]] = call %swift.type* @_T015resilient_class21ResilientOutsideChildCMa()
151+
// CHECK: [[OPAQUE_METADATA:%.*]] = bitcast %swift.type* [[METADATA]] to %swift.type**
152+
// CHECK: [[SUPER_METADATA_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[OPAQUE_METADATA]], i32 1
153+
// CHECK: [[SUPER_METADATA:%.*]] = load %swift.type*, %swift.type** [[SUPER_METADATA_PTR]]
154+
// CHECK: [[BASE:%.*]] = load [[INT]], [[INT]]* @_T015resilient_class22ResilientOutsideParentCMo
155+
// CHECK: [[VTABLE_OFFSET:%.*]] = add [[INT]] [[BASE]], {{20|40}}
156+
// CHECK: [[SUPER_ADDR:%.*]] = bitcast %swift.type* [[SUPER_METADATA]] to i8*
157+
// CHECK: [[VTABLE_ADDR:%.*]] = getelementptr inbounds i8, i8* [[SUPER_ADDR]], [[INT]] [[VTABLE_OFFSET]]
158+
// CHECK: [[VTABLE_SLOT:%.*]] = bitcast i8* [[VTABLE_ADDR]] to void (%T15resilient_class22ResilientOutsideParentC*)*
159+
// CHECK: [[FN_PTR:%.*]] = load void (%T15resilient_class22ResilientOutsideParentC*)*, void (%T15resilient_class22ResilientOutsideParentC*)** [[VTABLE_SLOT]]
149160
// CHECK: call void
150161

151162
// static ext.super.resilient_class.ResilientOutsideChild.callSuperClassMethod () -> ()
@@ -162,13 +173,16 @@ bb0(%0 : $@thick ResilientOutsideChild.Type):
162173

163174
// Extending a resilient class - load super metadata indirectly.
164175
// CHECK-LABEL: define{{( protected)?}} swiftcc void @_T015resilient_class21ResilientOutsideChildC5superE20callSuperClassMethodyyFZ(%swift.type* swiftself)
165-
// CHECK: [[METADATA:%[0-9]+]] = call %swift.type* @_T015resilient_class21ResilientOutsideChildCMa()
166-
// CHECK: [[OPAQUE_METADATA:%[0-9]+]] = bitcast %swift.type* [[METADATA]] to %swift.type**
167-
// CHECK: [[SUPER_METADATA_PTR:%[0-9]+]] = getelementptr inbounds %swift.type*, %swift.type** [[OPAQUE_METADATA]], i32 1
168-
// CHECK: [[SUPER_METADATA:%[0-9]+]] = load %swift.type*, %swift.type** [[SUPER_METADATA_PTR]]
169-
// CHECK: [[OPAQUE_SUPER_METADATA:%[0-9]+]] = bitcast %swift.type* [[SUPER_METADATA]] to void (%swift.type*)**
170-
// CHECK: [[VTABLE_SLOT:%[0-9]+]] = getelementptr inbounds void (%swift.type*)*, void (%swift.type*)** [[OPAQUE_SUPER_METADATA]]
171-
// CHECK: [[FN_PTR:%[0-9]+]] = load void (%swift.type*)*, void (%swift.type*)** [[VTABLE_SLOT]]
176+
// CHECK: [[METADATA:%.*]] = call %swift.type* @_T015resilient_class21ResilientOutsideChildCMa()
177+
// CHECK: [[OPAQUE_METADATA:%.*]] = bitcast %swift.type* [[METADATA]] to %swift.type**
178+
// CHECK: [[SUPER_METADATA_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[OPAQUE_METADATA]], i32 1
179+
// CHECK: [[SUPER_METADATA:%.*]] = load %swift.type*, %swift.type** [[SUPER_METADATA_PTR]]
180+
// CHECK: [[BASE:%.*]] = load [[INT]], [[INT]]* @_T015resilient_class22ResilientOutsideParentCMo
181+
// CHECK: [[VTABLE_OFFSET:%.*]] = add [[INT]] [[BASE]], {{24|48}}
182+
// CHECK: [[SUPER_ADDR:%.*]] = bitcast %swift.type* [[SUPER_METADATA]] to i8*
183+
// CHECK: [[VTABLE_ADDR:%.*]] = getelementptr inbounds i8, i8* [[SUPER_ADDR]], [[INT]] [[VTABLE_OFFSET]]
184+
// CHECK: [[VTABLE_SLOT:%.*]] = bitcast i8* [[VTABLE_ADDR]] to void (%swift.type*)**
185+
// CHECK: [[FN_PTR:%.*]] = load void (%swift.type*)*, void (%swift.type*)** [[VTABLE_SLOT]]
172186
// CHECK: call swiftcc void
173187

174188
sil_vtable ChildToResilientParent {
@@ -202,10 +216,10 @@ sil_vtable Derived {
202216
}
203217

204218
// CHECK-LABEL: define{{.*}} @test_super_method_of_generic_base
205-
// CHECK: [[METADATA:%[0-9]+]] = call %swift.type* @_T05super4BaseCyAA3StrVGMa()
206-
// CHECK: [[BASEMETADATA:%[0-9]+]] = bitcast %swift.type* [[METADATA]] to void (%T5super4BaseC*)**
207-
// CHECK: [[GEP:%[0-9]+]] = getelementptr inbounds void (%T5super4BaseC*)*, void (%T5super4BaseC*)** [[BASEMETADATA]]
208-
// CHECK: [[SUPERMT:%[0-9]+]] = load void (%T5super4BaseC*)*, void (%T5super4BaseC*)** [[GEP]]
219+
// CHECK: [[METADATA:%.*]] = call %swift.type* @_T05super4BaseCyAA3StrVGMa()
220+
// CHECK: [[BASEMETADATA:%.*]] = bitcast %swift.type* [[METADATA]] to void (%T5super4BaseC*)**
221+
// CHECK: [[GEP:%.*]] = getelementptr inbounds void (%T5super4BaseC*)*, void (%T5super4BaseC*)** [[BASEMETADATA]]
222+
// CHECK: [[SUPERMT:%.*]] = load void (%T5super4BaseC*)*, void (%T5super4BaseC*)** [[GEP]]
209223
// CHECK: ret void
210224
sil @test_super_method_of_generic_base : $@convention(method) (@guaranteed Derived) -> () {
211225
bb0(%0 : $Derived):

0 commit comments

Comments
 (0)