@@ -55,11 +55,13 @@ func test0() {
5555// CHECK: store [[AVAL]] to [[A]]
5656 var a = A ( )
5757
58+ // CHECK: [[ACCESS:%.*]] = begin_access [read] [static] [[A]] : $*A
5859// CHECK: [[T0:%.*]] = function_ref @$s10addressors1AVys5Int32VAEcilu :
5960// CHECK: [[T1:%.*]] = apply [[T0]]({{%.*}}, [[AVAL]])
6061// CHECK: [[T2:%.*]] = struct_extract [[T1]] : $UnsafePointer<Int32>, #UnsafePointer._rawValue
6162// 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
6365// CHECK: [[Z:%.*]] = load [[ACCESS]] : $*Int32
6466 let z = a [ 10 ]
6567
@@ -68,7 +70,8 @@ func test0() {
6870// CHECK: [[T1:%.*]] = apply [[T0]]({{%.*}}, [[WRITE]])
6971// CHECK: [[T2:%.*]] = struct_extract [[T1]] : $UnsafeMutablePointer<Int32>, #UnsafeMutablePointer._rawValue
7072// 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
7275// CHECK: load
7376// CHECK: sadd_with_overflow_Int{{32|64}}
7477// CHECK: store {{%.*}} to [[ACCESS]]
@@ -79,7 +82,8 @@ func test0() {
7982// CHECK: [[T1:%.*]] = apply [[T0]]({{%.*}}, [[WRITE]])
8083// CHECK: [[T2:%.*]] = struct_extract [[T1]] : $UnsafeMutablePointer<Int32>, #UnsafeMutablePointer._rawValue
8184// 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
8387// CHECK: store {{%.*}} to [[ACCESS]]
8488 a [ 3 ] = 6
8589}
@@ -93,7 +97,8 @@ func test1() -> Int32 {
9397// CHECK: [[PTR:%.*]] = apply [[ACCESSOR]]({{%.*}}, [[A]]) : $@convention(method) (Int32, A) -> UnsafePointer<Int32>
9498// CHECK: [[T0:%.*]] = struct_extract [[PTR]] : $UnsafePointer<Int32>, #UnsafePointer._rawValue
9599// 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
97102// CHECK: [[T2:%.*]] = load [[ACCESS]] : $*Int32
98103// CHECK: return [[T2]] : $Int32
99104 return A ( ) [ 0 ]
@@ -147,7 +152,8 @@ struct B : Subscriptable {
147152// CHECK: [[PTR:%.*]] = apply [[T0]]([[INDEX]], [[WRITE]])
148153// CHECK: [[T0:%.*]] = struct_extract [[PTR]] : $UnsafeMutablePointer<Int32>,
149154// 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
151157// Accept either of struct_extract+load or load+struct_element_addr.
152158// CHECK: load
153159// CHECK: [[T1:%.*]] = builtin "or_Int32"
@@ -176,7 +182,8 @@ func test_carray(_ array: inout CArray<(Int32) -> Int32>) -> Int32 {
176182// CHECK: [[T1:%.*]] = apply [[T0]]<(Int32) -> Int32>({{%.*}}, [[WRITE]])
177183// CHECK: [[T2:%.*]] = struct_extract [[T1]] : $UnsafeMutablePointer<(Int32) -> Int32>, #UnsafeMutablePointer._rawValue
178184// 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]]
180187// CHECK: store {{%.*}} to [[ACCESS]] :
181188 array [ 0 ] = id_int
182189
@@ -186,7 +193,9 @@ func test_carray(_ array: inout CArray<(Int32) -> Int32>) -> Int32 {
186193// CHECK: [[T2:%.*]] = apply [[T1]]<(Int32) -> Int32>({{%.*}}, [[T0]])
187194// CHECK: [[T3:%.*]] = struct_extract [[T2]] : $UnsafePointer<(Int32) -> Int32>, #UnsafePointer._rawValue
188195// 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]]
190199// CHECK: [[T5:%.*]] = load [[ACCESS]]
191200 return array [ 1 ] ( 5 )
192201}
@@ -209,7 +218,8 @@ struct D : Subscriptable {
209218// SILGEN: [[PTR:%.*]] = apply [[T0]]([[I]], [[ACCESS]])
210219// SILGEN: [[T0:%.*]] = struct_extract [[PTR]] : $UnsafeMutablePointer<Int32>,
211220// 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
213223// SILGEN: assign [[VALUE]] to [[ACCESS]] : $*Int32
214224
215225// SILGEN-LABEL: sil hidden [transparent] [ossa] @$s10addressors1DVys5Int32VAEciM
@@ -219,7 +229,8 @@ struct D : Subscriptable {
219229// SILGEN: [[PTR:%.*]] = apply [[T0]]([[I]], [[SELF_ACCESS]])
220230// SILGEN: [[ADDR_TMP:%.*]] = struct_extract [[PTR]] : $UnsafeMutablePointer<Int32>,
221231// 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]]
223234// SILGEN: yield [[ACCESS]]
224235// SILGEN: end_access [[ACCESS]]
225236
@@ -236,7 +247,8 @@ func test_d(_ array: inout D) -> Int32 {
236247// CHECK: [[T1:%.*]] = apply [[T0]]({{%.*}}, [[WRITE]])
237248// CHECK: [[T2:%.*]] = struct_extract [[T1]] : $UnsafeMutablePointer<Int32>,
238249// 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
240252// CHECK: store [[V]] to [[ACCESS]] : $*Int32
241253 array [ 0 ] = make_int ( )
242254
@@ -245,7 +257,8 @@ func test_d(_ array: inout D) -> Int32 {
245257// CHECK: [[T1:%.*]] = apply [[T0]]({{%.*}}, [[WRITE]])
246258// CHECK: [[T2:%.*]] = struct_extract [[T1]] : $UnsafeMutablePointer<Int32>,
247259// 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
249262// CHECK: [[FN:%.*]] = function_ref @$s10addressors14take_int_inoutyys5Int32VzF
250263// CHECK: apply [[FN]]([[ACCESS]])
251264 take_int_inout ( & array[ 1 ] )
@@ -271,7 +284,8 @@ struct E {
271284// CHECK: [[T1:%.*]] = apply [[T0]]([[E]])
272285// CHECK: [[T2:%.*]] = struct_extract [[T1]]
273286// 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
275289// CHECK: store {{%.*}} to [[ACCESS]] : $*Int32
276290func test_e( _ e: E ) {
277291 e. value = 0
0 commit comments