2
2
// RUN: %{python} %utils/chex.py < %s > %t/raw_layout.sil
3
3
// RUN: %target-swift-frontend -enable-experimental-feature RawLayout -emit-ir -disable-availability-checking %t/raw_layout.sil | %FileCheck %t/raw_layout.sil --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize
4
4
5
+ import Builtin
5
6
import Swift
6
7
7
8
// CHECK-LABEL: @"$s{{[A-Za-z0-9_]*}}4LockVWV" = {{.*}} %swift.vwtable
@@ -142,6 +143,33 @@ struct BadBuffer: ~Copyable {
142
143
let buffer : SmallVectorOf3 < Int64 ? >
143
144
}
144
145
146
+ sil @use_lock : $@convention ( thin) ( @in_guaranteed Lock) -> ( ) {
147
+ entry ( % L: $* Lock) :
148
+ return undef : $( )
149
+ }
150
+
151
+ sil @use_keymaster_locks : $@convention ( thin) ( @in_guaranteed Keymaster) -> ( ) {
152
+ entry ( % K: $* Keymaster) :
153
+ % f = function_ref @use_lock : $@convention ( thin) ( @in_guaranteed Lock) -> ( )
154
+ % a = struct_element_addr % K : $* Keymaster, #Keymaster. lock1
155
+ apply % f( % a) : $@convention ( thin) ( @in_guaranteed Lock) -> ( )
156
+ % b = struct_element_addr % K : $* Keymaster, #Keymaster. lock2
157
+ apply % f( % b) : $@convention ( thin) ( @in_guaranteed Lock) -> ( )
158
+ % c = struct_element_addr % K : $* Keymaster, #Keymaster. lock2
159
+ apply % f( % c) : $@convention ( thin) ( @in_guaranteed Lock) -> ( )
160
+ return undef : $( )
161
+ }
162
+
163
+ // CHECK: define swiftcc ptr @get_cell_addr(ptr %"Cell<T>", ptr {{.*}} swiftself [[SELF:%.*]])
164
+ // CHECK-NEXT: entry:
165
+ // CHECK-NEXT: ret ptr [[SELF]]
166
+ sil @get_cell_addr : $@convention ( method) < T> ( @in_guaranteed Cell< T > ) -> UnsafeMutablePointer< T> {
167
+ entry( % 0 : $* Cell < T > ) :
168
+ % 1 = raw_layout_address_to_pointer % 0 : $* Cell< T> to $Builtin. RawPointer
169
+ % 2 = struct $UnsafeMutablePointer< T > ( % 1 : $Builtin. RawPointer)
170
+ return % 2 : $UnsafeMutablePointer< T>
171
+ }
172
+
145
173
// Dependent layout metadata initialization:
146
174
147
175
// Cell<T>
@@ -165,20 +193,3 @@ struct BadBuffer: ~Copyable {
165
193
166
194
// CHECK-LABEL: define {{.*}} swiftcc %swift.metadata_response @"$s{{[A-Za-z0-9_]*}}14SmallVectorBufVMr"(ptr %"SmallVectorBuf<T>", ptr {{.*}}, ptr {{.*}})
167
195
// CHECK: call void @swift_initRawStructMetadata(ptr %"SmallVectorBuf<T>", {{i64|i32}} 0, ptr {{%.*}}, {{i64|i32}} 8)
168
-
169
- sil @use_lock : $@convention ( thin) ( @in_guaranteed Lock) -> ( ) {
170
- entry ( % L: $* Lock) :
171
- return undef : $( )
172
- }
173
-
174
- sil @use_keymaster_locks : $@convention ( thin) ( @in_guaranteed Keymaster) -> ( ) {
175
- entry ( % K: $* Keymaster) :
176
- % f = function_ref @use_lock : $@convention ( thin) ( @in_guaranteed Lock) -> ( )
177
- % a = struct_element_addr % K : $* Keymaster, #Keymaster. lock1
178
- apply % f( % a) : $@convention ( thin) ( @in_guaranteed Lock) -> ( )
179
- % b = struct_element_addr % K : $* Keymaster, #Keymaster. lock2
180
- apply % f( % b) : $@convention ( thin) ( @in_guaranteed Lock) -> ( )
181
- % c = struct_element_addr % K : $* Keymaster, #Keymaster. lock2
182
- apply % f( % c) : $@convention ( thin) ( @in_guaranteed Lock) -> ( )
183
- return undef : $( )
184
- }
0 commit comments