@@ -4,8 +4,27 @@ import Builtin
44
55sil_stage raw
66
7- import Swift
8- import SwiftShims
7+ class Klass {}
8+ class SubKlass : Klass {}
9+
10+ sil @use_klass_guaranteed : $@convention(thin) (@guaranteed Klass) -> ()
11+ sil @use_klass_owned : $@convention(thin) (@owned Klass) -> ()
12+ sil @use_klass_unowned : $@convention(thin) (Klass) -> ()
13+
14+ enum FakeOptional<T> {
15+ case none
16+ case some(T)
17+ }
18+
19+ sil @use_fakeoptional_klass_guaranteed : $@convention(thin) (@guaranteed FakeOptional<Klass>) -> ()
20+
21+ struct Int {
22+ var _value : Builtin.Int32
23+ }
24+
25+ struct UInt8 {
26+ var _value : Builtin.Int8
27+ }
928
1029// CHECK-LABEL: sil [ossa] @struct_extract_load_to_load_struct_element_addr
1130// CHECK: bb0([[IN:%[0-9]+]] : $*UInt8):
@@ -91,30 +110,26 @@ bb0(%0 : $*(Builtin.Int8, Builtin.Int8)):
91110
92111struct X1 {
93112 @_hasStorage @_hasInitialValue let a: Int { get }
94- @_hasStorage @_hasInitialValue var obj1: AnyObject { get set }
95- @_hasStorage @_hasInitialValue var obj2: AnyObject { get set }
96- init(a: Int, obj1: AnyObject , obj2: AnyObject )
113+ @_hasStorage @_hasInitialValue var obj1: Builtin.NativeObject { get set }
114+ @_hasStorage @_hasInitialValue var obj2: Builtin.NativeObject { get set }
115+ init(a: Int, obj1: Builtin.NativeObject , obj2: Builtin.NativeObject )
97116}
98117
99- // CHECK-LABEL: sil private [ossa] @testLoadNontrivial : $@convention(thin) (@inout_aliasable X1) -> (Int, @owned AnyObject , @owned AnyObject ) {
118+ // CHECK-LABEL: sil private [ossa] @testLoadNontrivial : $@convention(thin) (@inout_aliasable X1) -> (Int, @owned Builtin.NativeObject , @owned Builtin.NativeObject ) {
100119// CHECK-LABEL: bb0(%0 : $*X1):
101120// CHECK: [[ACCESS:%.*]] = begin_access [read] [unknown] %0 : $*X1
102121// CHECK: [[AA:%.*]] = struct_element_addr [[ACCESS]] : $*X1, #X1.a
103122// CHECK: load [trivial] [[AA]] : $*Int
104123// CHECK: [[OA1:%.*]] = struct_element_addr [[ACCESS]] : $*X1, #X1.obj1
105- // CHECK: [[OV1:%.*]] = load [copy] [[OA1]] : $*AnyObject
124+ // CHECK: [[OV1:%.*]] = load [copy] [[OA1]] : $*Builtin.NativeObject
106125// CHECK: [[OA2:%.*]] = struct_element_addr [[ACCESS]] : $*X1, #X1.obj2
107- // CHECK: [[OV2:%.*]] = load [copy] [[OA2]] : $*AnyObject
126+ // CHECK: [[OV2:%.*]] = load [copy] [[OA2]] : $*Builtin.NativeObject
108127// CHECK: end_access [[ACCESS]] : $*X1
109- // CHECK: [[B1:%.*]] = begin_borrow [[OV1]] : $AnyObject
110- // CHECK: copy_value [[B1]] : $AnyObject
111- // CHECK: end_borrow [[B1]] : $AnyObject
112- // CHECK: [[B2:%.*]] = begin_borrow [[OV2]] : $AnyObject
113- // CHECK: copy_value [[B2]] : $AnyObject
114- // CHECK: end_borrow [[B2]] : $AnyObject
128+ // CHECK: copy_value [[OV1]] : $Builtin.NativeObject
129+ // CHECK: copy_value [[OV2]] : $Builtin.NativeObject
115130// CHECK: return
116131// CHECK-LABEL: } // end sil function 'testLoadNontrivial'
117- sil private [ossa] @testLoadNontrivial : $@convention(thin) (@inout_aliasable X1) -> (Int, @owned AnyObject , @owned AnyObject ) {
132+ sil private [ossa] @testLoadNontrivial : $@convention(thin) (@inout_aliasable X1) -> (Int, @owned Builtin.NativeObject , @owned Builtin.NativeObject ) {
118133bb0(%0 : $*X1):
119134 %access = begin_access [read] [unknown] %0 : $*X1
120135 %load = load [copy] %access : $*X1
@@ -126,44 +141,44 @@ bb0(%0 : $*X1):
126141
127142 %borrow1 = begin_borrow %load : $X1
128143 %o1 = struct_extract %borrow1 : $X1, #X1.obj1
129- %copy1 = copy_value %o1 : $AnyObject
144+ %copy1 = copy_value %o1 : $Builtin.NativeObject
130145 end_borrow %borrow1 : $X1
131146
132147 %borrow2 = begin_borrow %load : $X1
133148 %o2 = struct_extract %borrow2 : $X1, #X1.obj2
134- %copy2 = copy_value %o2 : $AnyObject
149+ %copy2 = copy_value %o2 : $Builtin.NativeObject
135150 end_borrow %borrow2 : $X1
136151
137152 destroy_value %load : $X1
138153
139- %result = tuple (%a : $Int, %copy1 : $AnyObject , %copy2 : $AnyObject )
140- return %result : $(Int, AnyObject, AnyObject )
154+ %result = tuple (%a : $Int, %copy1 : $Builtin.NativeObject , %copy2 : $Builtin.NativeObject )
155+ return %result : $(Int, Builtin.NativeObject, Builtin.NativeObject )
141156}
142157
143158struct X2 {
144- @_hasStorage @_hasInitialValue var obj: AnyObject { get set }
159+ @_hasStorage @_hasInitialValue var obj: Builtin.NativeObject { get set }
145160}
146161
147162struct X3 {
148163 @_hasStorage @_hasInitialValue var x2: X2 { get set }
149164}
150165
151- // CHECK-LABEL: sil private [ossa] @testStoreNontrivial : $@convention(thin) (@inout X3, @guaranteed AnyObject ) -> () {
152- // CHECK-LABEL : bb0(%0 : $*X3, %1 : @guaranteed $AnyObject ):
153- // CHECK: [[CP:%.*]] = copy_value %1 : $AnyObject
166+ // CHECK-LABEL: sil private [ossa] @testStoreNontrivial : $@convention(thin) (@inout X3, @guaranteed Builtin.NativeObject ) -> () {
167+ // CHECK: bb0(%0 : $*X3, %1 : @guaranteed $Builtin.NativeObject ):
168+ // CHECK: [[CP:%.*]] = copy_value %1 : $Builtin.NativeObject
154169// CHECK: [[ACCESS:%.*]] = begin_access [modify] [unknown] %0 : $*X3
155- // CHECK: [[X2:%.*]] = struct $X2 ([[CP]] : $AnyObject )
170+ // CHECK: [[X2:%.*]] = struct $X2 ([[CP]] : $Builtin.NativeObject )
156171// CHECK: [[X3:%.*]] = struct $X3 ([[X2]] : $X2)
157172// CHECK: store [[X3]] to [assign] [[ACCESS]] : $*X3
158173// CHECK: end_access [[ACCESS]] : $*X3
159- // CHECK-LABEL : } // end sil function 'testStoreNontrivial'
160- sil private [ossa] @testStoreNontrivial : $@convention(thin) (@inout X3, @guaranteed AnyObject ) -> () {
161- bb0(%0 : $*X3, %1 : @guaranteed $AnyObject ):
162- %4 = copy_value %1 : $AnyObject
174+ // CHECK: } // end sil function 'testStoreNontrivial'
175+ sil private [ossa] @testStoreNontrivial : $@convention(thin) (@inout X3, @guaranteed Builtin.NativeObject ) -> () {
176+ bb0(%0 : $*X3, %1 : @guaranteed $Builtin.NativeObject ):
177+ %4 = copy_value %1 : $Builtin.NativeObject
163178 %5 = begin_access [modify] [unknown] %0 : $*X3
164179 %6 = struct_element_addr %5 : $*X3, #X3.x2
165180 %7 = struct_element_addr %6 : $*X2, #X2.obj
166- store %4 to [assign] %7 : $*AnyObject
181+ store %4 to [assign] %7 : $*Builtin.NativeObject
167182 end_access %5 : $*X3
168183 %12 = tuple ()
169184 return %12 : $()
0 commit comments