@@ -55,11 +55,13 @@ func test0() {
55
55
// CHECK: store [[AVAL]] to [[A]]
56
56
var a = A ( )
57
57
58
+ // CHECK: [[ACCESS:%.*]] = begin_access [read] [static] [[A]] : $*A
58
59
// CHECK: [[T0:%.*]] = function_ref @$s10addressors1AVys5Int32VAEcilu :
59
60
// CHECK: [[T1:%.*]] = apply [[T0]]({{%.*}}, [[AVAL]])
60
61
// CHECK: [[T2:%.*]] = struct_extract [[T1]] : $UnsafePointer<Int32>, #UnsafePointer._rawValue
61
62
// CHECK: [[T3:%.*]] = pointer_to_address [[T2]] : $Builtin.RawPointer to [strict] $*Int32
62
- // CHECK: [[ACCESS:%.*]] = begin_access [read] [unsafe] [[T3]] : $*Int32
63
+ // CHECK: [[MD:%.*]] = mark_dependence [nonescaping] [[T3]] : $*Int32 on [[ACCESS]] : $*A
64
+ // CHECK: [[ACCESS:%.*]] = begin_access [read] [unsafe] [[MD]] : $*Int32
63
65
// CHECK: [[Z:%.*]] = load [[ACCESS]] : $*Int32
64
66
let z = a [ 10 ]
65
67
@@ -68,7 +70,8 @@ func test0() {
68
70
// CHECK: [[T1:%.*]] = apply [[T0]]({{%.*}}, [[WRITE]])
69
71
// CHECK: [[T2:%.*]] = struct_extract [[T1]] : $UnsafeMutablePointer<Int32>, #UnsafeMutablePointer._rawValue
70
72
// CHECK: [[T3:%.*]] = pointer_to_address [[T2]] : $Builtin.RawPointer to [strict] $*Int32
71
- // CHECK: [[ACCESS:%.*]] = begin_access [modify] [unsafe] [[T3]] : $*Int32
73
+ // CHECK: [[MD:%.*]] = mark_dependence [nonescaping] [[T3]] : $*Int32 on [[WRITE]] : $*A
74
+ // CHECK: [[ACCESS:%.*]] = begin_access [modify] [unsafe] [[MD]] : $*Int32
72
75
// CHECK: load
73
76
// CHECK: sadd_with_overflow_Int{{32|64}}
74
77
// CHECK: store {{%.*}} to [[ACCESS]]
@@ -79,7 +82,8 @@ func test0() {
79
82
// CHECK: [[T1:%.*]] = apply [[T0]]({{%.*}}, [[WRITE]])
80
83
// CHECK: [[T2:%.*]] = struct_extract [[T1]] : $UnsafeMutablePointer<Int32>, #UnsafeMutablePointer._rawValue
81
84
// CHECK: [[T3:%.*]] = pointer_to_address [[T2]] : $Builtin.RawPointer to [strict] $*Int32
82
- // CHECK: [[ACCESS:%.*]] = begin_access [modify] [unsafe] [[T3]] : $*Int32
85
+ // CHECK: [[MD:%.*]] = mark_dependence [nonescaping] [[T3]] : $*Int32 on [[WRITE]] : $*A
86
+ // CHECK: [[ACCESS:%.*]] = begin_access [modify] [unsafe] [[MD]] : $*Int32
83
87
// CHECK: store {{%.*}} to [[ACCESS]]
84
88
a [ 3 ] = 6
85
89
}
@@ -93,7 +97,8 @@ func test1() -> Int32 {
93
97
// CHECK: [[PTR:%.*]] = apply [[ACCESSOR]]({{%.*}}, [[A]]) : $@convention(method) (Int32, A) -> UnsafePointer<Int32>
94
98
// CHECK: [[T0:%.*]] = struct_extract [[PTR]] : $UnsafePointer<Int32>, #UnsafePointer._rawValue
95
99
// CHECK: [[T1:%.*]] = pointer_to_address [[T0]] : $Builtin.RawPointer to [strict] $*Int32
96
- // CHECK: [[ACCESS:%.*]] = begin_access [read] [unsafe] [[T1]] : $*Int32
100
+ // CHECK: [[MD:%.*]] = mark_dependence [nonescaping] [[T1]] : $*Int32 on [[A]] : $A
101
+ // CHECK: [[ACCESS:%.*]] = begin_access [read] [unsafe] [[MD]] : $*Int32
97
102
// CHECK: [[T2:%.*]] = load [[ACCESS]] : $*Int32
98
103
// CHECK: return [[T2]] : $Int32
99
104
return A ( ) [ 0 ]
@@ -147,7 +152,8 @@ struct B : Subscriptable {
147
152
// CHECK: [[PTR:%.*]] = apply [[T0]]([[INDEX]], [[WRITE]])
148
153
// CHECK: [[T0:%.*]] = struct_extract [[PTR]] : $UnsafeMutablePointer<Int32>,
149
154
// CHECK: [[ADDR:%.*]] = pointer_to_address [[T0]] : $Builtin.RawPointer to [strict] $*Int32
150
- // CHECK: [[ACCESS:%.*]] = begin_access [modify] [unsafe] [[ADDR]] : $*Int32
155
+ // CHECK: [[MD:%.*]] = mark_dependence [nonescaping] [[ADDR]] : $*Int32 on [[WRITE]] : $*B
156
+ // CHECK: [[ACCESS:%.*]] = begin_access [modify] [unsafe] [[MD]] : $*Int32
151
157
// Accept either of struct_extract+load or load+struct_element_addr.
152
158
// CHECK: load
153
159
// CHECK: [[T1:%.*]] = builtin "or_Int32"
@@ -176,7 +182,8 @@ func test_carray(_ array: inout CArray<(Int32) -> Int32>) -> Int32 {
176
182
// CHECK: [[T1:%.*]] = apply [[T0]]<(Int32) -> Int32>({{%.*}}, [[WRITE]])
177
183
// CHECK: [[T2:%.*]] = struct_extract [[T1]] : $UnsafeMutablePointer<(Int32) -> Int32>, #UnsafeMutablePointer._rawValue
178
184
// CHECK: [[T3:%.*]] = pointer_to_address [[T2]] : $Builtin.RawPointer to [strict] $*@callee_guaranteed @substituted <τ_0_0, τ_0_1> (@in_guaranteed τ_0_0) -> @out τ_0_1 for <Int32, Int32>
179
- // CHECK: [[ACCESS:%.*]] = begin_access [modify] [unsafe] [[T3]]
185
+ // CHECK: [[MD:%.*]] = mark_dependence [nonescaping] [[T3]] : $*@callee_guaranteed @substituted <τ_0_0, τ_0_1> (@in_guaranteed τ_0_0) -> @out τ_0_1 for <Int32, Int32> on [[WRITE]] : $*CArray<(Int32) -> Int32>
186
+ // CHECK: [[ACCESS:%.*]] = begin_access [modify] [unsafe] [[MD]]
180
187
// CHECK: store {{%.*}} to [[ACCESS]] :
181
188
array [ 0 ] = id_int
182
189
@@ -186,7 +193,9 @@ func test_carray(_ array: inout CArray<(Int32) -> Int32>) -> Int32 {
186
193
// CHECK: [[T2:%.*]] = apply [[T1]]<(Int32) -> Int32>({{%.*}}, [[T0]])
187
194
// CHECK: [[T3:%.*]] = struct_extract [[T2]] : $UnsafePointer<(Int32) -> Int32>, #UnsafePointer._rawValue
188
195
// CHECK: [[T4:%.*]] = pointer_to_address [[T3]] : $Builtin.RawPointer to [strict] $*@callee_guaranteed @substituted <τ_0_0, τ_0_1> (@in_guaranteed τ_0_0) -> @out τ_0_1 for <Int32, Int32>
189
- // CHECK: [[ACCESS:%.*]] = begin_access [read] [unsafe] [[T4]]
196
+ // CHECK: [[MD:%.*]] = mark_dependence [nonescaping] [[T4]] : $*@callee_guaranteed @substituted <τ_0_0, τ_0_1>
197
+ // (@in_guaranteed τ_0_0) -> @out τ_0_1 for <Int32, Int32> on [[T0]] : $CArray<(Int32) -> Int32>
198
+ // CHECK: [[ACCESS:%.*]] = begin_access [read] [unsafe] [[MD]]
190
199
// CHECK: [[T5:%.*]] = load [[ACCESS]]
191
200
return array [ 1 ] ( 5 )
192
201
}
@@ -209,7 +218,8 @@ struct D : Subscriptable {
209
218
// SILGEN: [[PTR:%.*]] = apply [[T0]]([[I]], [[ACCESS]])
210
219
// SILGEN: [[T0:%.*]] = struct_extract [[PTR]] : $UnsafeMutablePointer<Int32>,
211
220
// SILGEN: [[ADDR:%.*]] = pointer_to_address [[T0]] : $Builtin.RawPointer to [strict] $*Int32
212
- // SILGEN: [[ACCESS:%.*]] = begin_access [modify] [unsafe] [[ADDR]] : $*Int32
221
+ // SILGEN: [[MD:%.*]] = mark_dependence [unresolved] [[ADDR]] : $*Int32 on %6 : $*D
222
+ // SILGEN: [[ACCESS:%.*]] = begin_access [modify] [unsafe] [[MD]] : $*Int32
213
223
// SILGEN: assign [[VALUE]] to [[ACCESS]] : $*Int32
214
224
215
225
// SILGEN-LABEL: sil hidden [transparent] [ossa] @$s10addressors1DVys5Int32VAEciM
@@ -219,7 +229,8 @@ struct D : Subscriptable {
219
229
// SILGEN: [[PTR:%.*]] = apply [[T0]]([[I]], [[SELF_ACCESS]])
220
230
// SILGEN: [[ADDR_TMP:%.*]] = struct_extract [[PTR]] : $UnsafeMutablePointer<Int32>,
221
231
// SILGEN: [[ADDR:%.*]] = pointer_to_address [[ADDR_TMP]]
222
- // SILGEN: [[ACCESS:%.*]] = begin_access [modify] [unsafe] [[ADDR]]
232
+ // SILGEN: [[MD:%.*]] = mark_dependence [unresolved] [[ADDR]] : $*Int32 on [[SELF_ACCESS]] : $*D
233
+ // SILGEN: [[ACCESS:%.*]] = begin_access [modify] [unsafe] [[MD]]
223
234
// SILGEN: yield [[ACCESS]]
224
235
// SILGEN: end_access [[ACCESS]]
225
236
@@ -236,7 +247,8 @@ func test_d(_ array: inout D) -> Int32 {
236
247
// CHECK: [[T1:%.*]] = apply [[T0]]({{%.*}}, [[WRITE]])
237
248
// CHECK: [[T2:%.*]] = struct_extract [[T1]] : $UnsafeMutablePointer<Int32>,
238
249
// CHECK: [[ADDR:%.*]] = pointer_to_address [[T2]] : $Builtin.RawPointer to [strict] $*Int32
239
- // CHECK: [[ACCESS:%.*]] = begin_access [modify] [unsafe] [[ADDR]] : $*Int32
250
+ // CHECK: [[MD:%.*]] = mark_dependence [nonescaping] [[ADDR]] : $*Int32 on [[WRITE]] : $*D
251
+ // CHECK: [[ACCESS:%.*]] = begin_access [modify] [unsafe] [[MD]] : $*Int32
240
252
// CHECK: store [[V]] to [[ACCESS]] : $*Int32
241
253
array [ 0 ] = make_int ( )
242
254
@@ -245,7 +257,8 @@ func test_d(_ array: inout D) -> Int32 {
245
257
// CHECK: [[T1:%.*]] = apply [[T0]]({{%.*}}, [[WRITE]])
246
258
// CHECK: [[T2:%.*]] = struct_extract [[T1]] : $UnsafeMutablePointer<Int32>,
247
259
// CHECK: [[ADDR:%.*]] = pointer_to_address [[T2]] : $Builtin.RawPointer to [strict] $*Int32
248
- // CHECK: [[ACCESS:%.*]] = begin_access [modify] [unsafe] [[ADDR]] : $*Int32
260
+ // CHECK: [[MD:%.*]] = mark_dependence [nonescaping] [[ADDR]] : $*Int32 on [[WRITE]] : $*D
261
+ // CHECK: [[ACCESS:%.*]] = begin_access [modify] [unsafe] [[MD]] : $*Int32
249
262
// CHECK: [[FN:%.*]] = function_ref @$s10addressors14take_int_inoutyys5Int32VzF
250
263
// CHECK: apply [[FN]]([[ACCESS]])
251
264
take_int_inout ( & array[ 1 ] )
@@ -271,7 +284,8 @@ struct E {
271
284
// CHECK: [[T1:%.*]] = apply [[T0]]([[E]])
272
285
// CHECK: [[T2:%.*]] = struct_extract [[T1]]
273
286
// CHECK: [[T3:%.*]] = pointer_to_address [[T2]]
274
- // CHECK: [[ACCESS:%.*]] = begin_access [modify] [unsafe] [[T3]] : $*Int32
287
+ // CHECK: [[MD:%.*]] = mark_dependence [nonescaping] [[T3]] : $*Int32 on %0 : $E
288
+ // CHECK: [[ACCESS:%.*]] = begin_access [modify] [unsafe] [[MD]] : $*Int32
275
289
// CHECK: store {{%.*}} to [[ACCESS]] : $*Int32
276
290
func test_e( _ e: E ) {
277
291
e. value = 0
0 commit comments