@@ -59,7 +59,8 @@ func test0() {
5959// CHECK: [[T1:%.*]] = apply [[T0]]({{%.*}}, [[AVAL]])
6060// CHECK: [[T2:%.*]] = struct_extract [[T1]] : $UnsafePointer<Int32>, #UnsafePointer._rawValue
6161// 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
6364// CHECK: [[Z:%.*]] = load [[ACCESS]] : $*Int32
6465 let z = a [ 10 ]
6566
@@ -68,7 +69,8 @@ func test0() {
6869// CHECK: [[T1:%.*]] = apply [[T0]]({{%.*}}, [[WRITE]])
6970// CHECK: [[T2:%.*]] = struct_extract [[T1]] : $UnsafeMutablePointer<Int32>, #UnsafeMutablePointer._rawValue
7071// 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
7274// CHECK: load
7375// CHECK: sadd_with_overflow_Int{{32|64}}
7476// CHECK: store {{%.*}} to [[ACCESS]]
@@ -79,7 +81,8 @@ func test0() {
7981// CHECK: [[T1:%.*]] = apply [[T0]]({{%.*}}, [[WRITE]])
8082// CHECK: [[T2:%.*]] = struct_extract [[T1]] : $UnsafeMutablePointer<Int32>, #UnsafeMutablePointer._rawValue
8183// 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
8386// CHECK: store {{%.*}} to [[ACCESS]]
8487 a [ 3 ] = 6
8588}
@@ -93,7 +96,8 @@ func test1() -> Int32 {
9396// CHECK: [[PTR:%.*]] = apply [[ACCESSOR]]({{%.*}}, [[A]]) : $@convention(method) (Int32, A) -> UnsafePointer<Int32>
9497// CHECK: [[T0:%.*]] = struct_extract [[PTR]] : $UnsafePointer<Int32>, #UnsafePointer._rawValue
9598// 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
97101// CHECK: [[T2:%.*]] = load [[ACCESS]] : $*Int32
98102// CHECK: return [[T2]] : $Int32
99103 return A ( ) [ 0 ]
@@ -147,7 +151,8 @@ struct B : Subscriptable {
147151// CHECK: [[PTR:%.*]] = apply [[T0]]([[INDEX]], [[WRITE]])
148152// CHECK: [[T0:%.*]] = struct_extract [[PTR]] : $UnsafeMutablePointer<Int32>,
149153// 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
151156// Accept either of struct_extract+load or load+struct_element_addr.
152157// CHECK: load
153158// CHECK: [[T1:%.*]] = builtin "or_Int32"
@@ -176,7 +181,8 @@ func test_carray(_ array: inout CArray<(Int32) -> Int32>) -> Int32 {
176181// CHECK: [[T1:%.*]] = apply [[T0]]<(Int32) -> Int32>({{%.*}}, [[WRITE]])
177182// CHECK: [[T2:%.*]] = struct_extract [[T1]] : $UnsafeMutablePointer<(Int32) -> Int32>, #UnsafeMutablePointer._rawValue
178183// 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]]
180186// CHECK: store {{%.*}} to [[ACCESS]] :
181187 array [ 0 ] = id_int
182188
@@ -186,7 +192,9 @@ func test_carray(_ array: inout CArray<(Int32) -> Int32>) -> Int32 {
186192// CHECK: [[T2:%.*]] = apply [[T1]]<(Int32) -> Int32>({{%.*}}, [[T0]])
187193// CHECK: [[T3:%.*]] = struct_extract [[T2]] : $UnsafePointer<(Int32) -> Int32>, #UnsafePointer._rawValue
188194// 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]]
190198// CHECK: [[T5:%.*]] = load [[ACCESS]]
191199 return array [ 1 ] ( 5 )
192200}
@@ -209,7 +217,8 @@ struct D : Subscriptable {
209217// SILGEN: [[PTR:%.*]] = apply [[T0]]([[I]], [[ACCESS]])
210218// SILGEN: [[T0:%.*]] = struct_extract [[PTR]] : $UnsafeMutablePointer<Int32>,
211219// 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
213222// SILGEN: assign [[VALUE]] to [[ACCESS]] : $*Int32
214223
215224// SILGEN-LABEL: sil hidden [transparent] [ossa] @$s10addressors1DVys5Int32VAEciM
@@ -219,7 +228,8 @@ struct D : Subscriptable {
219228// SILGEN: [[PTR:%.*]] = apply [[T0]]([[I]], [[SELF_ACCESS]])
220229// SILGEN: [[ADDR_TMP:%.*]] = struct_extract [[PTR]] : $UnsafeMutablePointer<Int32>,
221230// 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]]
223233// SILGEN: yield [[ACCESS]]
224234// SILGEN: end_access [[ACCESS]]
225235
@@ -236,7 +246,8 @@ func test_d(_ array: inout D) -> Int32 {
236246// CHECK: [[T1:%.*]] = apply [[T0]]({{%.*}}, [[WRITE]])
237247// CHECK: [[T2:%.*]] = struct_extract [[T1]] : $UnsafeMutablePointer<Int32>,
238248// 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
240251// CHECK: store [[V]] to [[ACCESS]] : $*Int32
241252 array [ 0 ] = make_int ( )
242253
@@ -245,7 +256,8 @@ func test_d(_ array: inout D) -> Int32 {
245256// CHECK: [[T1:%.*]] = apply [[T0]]({{%.*}}, [[WRITE]])
246257// CHECK: [[T2:%.*]] = struct_extract [[T1]] : $UnsafeMutablePointer<Int32>,
247258// 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
249261// CHECK: [[FN:%.*]] = function_ref @$s10addressors14take_int_inoutyys5Int32VzF
250262// CHECK: apply [[FN]]([[ACCESS]])
251263 take_int_inout ( & array[ 1 ] )
@@ -271,7 +283,8 @@ struct E {
271283// CHECK: [[T1:%.*]] = apply [[T0]]([[E]])
272284// CHECK: [[T2:%.*]] = struct_extract [[T1]]
273285// 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
275288// CHECK: store {{%.*}} to [[ACCESS]] : $*Int32
276289func test_e( _ e: E ) {
277290 e. value = 0
0 commit comments