File tree Expand file tree Collapse file tree 1 file changed +27
-1
lines changed
SwiftCompilerSources/Sources/Optimizer/ModulePasses Expand file tree Collapse file tree 1 file changed +27
-1
lines changed Original file line number Diff line number Diff line change @@ -225,7 +225,7 @@ private extension Value {
225
225
var singleUseValue : any Value = self
226
226
var path = SmallProjectionPath ( )
227
227
while true {
228
- guard let use = singleUseValue. uses. singleNonDebugUse else {
228
+ guard let use = singleUseValue. uses. singleRelevantUse else {
229
229
return nil
230
230
}
231
231
@@ -247,6 +247,8 @@ private extension Value {
247
247
default :
248
248
return nil
249
249
}
250
+ case is PointerToAddressInst , is AddressToPointerInst , is BeginAccessInst :
251
+ break
250
252
default :
251
253
return nil
252
254
}
@@ -334,3 +336,27 @@ fileprivate struct FunctionWorklist {
334
336
}
335
337
}
336
338
}
339
+
340
+ private extension UseList {
341
+ var singleRelevantUse : Operand ? {
342
+ var singleUse : Operand ?
343
+ for use in self {
344
+ switch use. instruction {
345
+ case is DebugValueInst ,
346
+ // The initializer value of a global can contain access instructions if it references another
347
+ // global variable by address, e.g.
348
+ // var p = Point(x: 10, y: 20)
349
+ // let o = UnsafePointer(&p)
350
+ // Therefore ignore the `end_access` use of a `begin_access`.
351
+ is EndAccessInst :
352
+ continue
353
+ default :
354
+ if singleUse != nil {
355
+ return nil
356
+ }
357
+ singleUse = use
358
+ }
359
+ }
360
+ return singleUse
361
+ }
362
+ }
You can’t perform that action at this time.
0 commit comments