@@ -4,8 +4,27 @@ import Builtin
4
4
5
5
sil_stage raw
6
6
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
+ }
9
28
10
29
// CHECK-LABEL: sil [ossa] @struct_extract_load_to_load_struct_element_addr
11
30
// CHECK: bb0([[IN:%[0-9]+]] : $*UInt8):
@@ -91,30 +110,26 @@ bb0(%0 : $*(Builtin.Int8, Builtin.Int8)):
91
110
92
111
struct X1 {
93
112
@_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 )
97
116
}
98
117
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 ) {
100
119
// CHECK-LABEL: bb0(%0 : $*X1):
101
120
// CHECK: [[ACCESS:%.*]] = begin_access [read] [unknown] %0 : $*X1
102
121
// CHECK: [[AA:%.*]] = struct_element_addr [[ACCESS]] : $*X1, #X1.a
103
122
// CHECK: load [trivial] [[AA]] : $*Int
104
123
// CHECK: [[OA1:%.*]] = struct_element_addr [[ACCESS]] : $*X1, #X1.obj1
105
- // CHECK: [[OV1:%.*]] = load [copy] [[OA1]] : $*AnyObject
124
+ // CHECK: [[OV1:%.*]] = load [copy] [[OA1]] : $*Builtin.NativeObject
106
125
// CHECK: [[OA2:%.*]] = struct_element_addr [[ACCESS]] : $*X1, #X1.obj2
107
- // CHECK: [[OV2:%.*]] = load [copy] [[OA2]] : $*AnyObject
126
+ // CHECK: [[OV2:%.*]] = load [copy] [[OA2]] : $*Builtin.NativeObject
108
127
// 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
115
130
// CHECK: return
116
131
// 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 ) {
118
133
bb0(%0 : $*X1):
119
134
%access = begin_access [read] [unknown] %0 : $*X1
120
135
%load = load [copy] %access : $*X1
@@ -126,44 +141,44 @@ bb0(%0 : $*X1):
126
141
127
142
%borrow1 = begin_borrow %load : $X1
128
143
%o1 = struct_extract %borrow1 : $X1, #X1.obj1
129
- %copy1 = copy_value %o1 : $AnyObject
144
+ %copy1 = copy_value %o1 : $Builtin.NativeObject
130
145
end_borrow %borrow1 : $X1
131
146
132
147
%borrow2 = begin_borrow %load : $X1
133
148
%o2 = struct_extract %borrow2 : $X1, #X1.obj2
134
- %copy2 = copy_value %o2 : $AnyObject
149
+ %copy2 = copy_value %o2 : $Builtin.NativeObject
135
150
end_borrow %borrow2 : $X1
136
151
137
152
destroy_value %load : $X1
138
153
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 )
141
156
}
142
157
143
158
struct X2 {
144
- @_hasStorage @_hasInitialValue var obj: AnyObject { get set }
159
+ @_hasStorage @_hasInitialValue var obj: Builtin.NativeObject { get set }
145
160
}
146
161
147
162
struct X3 {
148
163
@_hasStorage @_hasInitialValue var x2: X2 { get set }
149
164
}
150
165
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
154
169
// CHECK: [[ACCESS:%.*]] = begin_access [modify] [unknown] %0 : $*X3
155
- // CHECK: [[X2:%.*]] = struct $X2 ([[CP]] : $AnyObject )
170
+ // CHECK: [[X2:%.*]] = struct $X2 ([[CP]] : $Builtin.NativeObject )
156
171
// CHECK: [[X3:%.*]] = struct $X3 ([[X2]] : $X2)
157
172
// CHECK: store [[X3]] to [assign] [[ACCESS]] : $*X3
158
173
// 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
163
178
%5 = begin_access [modify] [unknown] %0 : $*X3
164
179
%6 = struct_element_addr %5 : $*X3, #X3.x2
165
180
%7 = struct_element_addr %6 : $*X2, #X2.obj
166
- store %4 to [assign] %7 : $*AnyObject
181
+ store %4 to [assign] %7 : $*Builtin.NativeObject
167
182
end_access %5 : $*X3
168
183
%12 = tuple ()
169
184
return %12 : $()
0 commit comments