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