File tree Expand file tree Collapse file tree 1 file changed +21
-3
lines changed
SwiftCompilerSources/Sources/Optimizer/FunctionPasses Expand file tree Collapse file tree 1 file changed +21
-3
lines changed Original file line number Diff line number Diff line change @@ -162,11 +162,11 @@ private func constructLetInitRegion(
162
162
initRegion. insert ( inst)
163
163
164
164
case let beginBorrow as BeginBorrowInst
165
- where beginBorrow. borrowedValue. referenceRoot == markUninitialized:
165
+ where beginBorrow. borrowedValue. isReferenceDerived ( from : markUninitialized) :
166
166
borrows. append ( beginBorrow)
167
167
168
168
case let storeBorrow as StoreBorrowInst
169
- where storeBorrow. source. referenceRoot == markUninitialized:
169
+ where storeBorrow. source. isReferenceDerived ( from : markUninitialized) :
170
170
borrows. append ( storeBorrow)
171
171
172
172
default :
@@ -202,10 +202,28 @@ private extension RefElementAddrInst {
202
202
}
203
203
204
204
private extension Value {
205
+ func isReferenceDerived( from root: Value ) -> Bool {
206
+ var parent : Value = self
207
+ while true {
208
+ if parent == root {
209
+ return true
210
+ }
211
+ if let operand = parent. forwardingInstruction? . singleForwardedOperand {
212
+ parent = operand. value
213
+ continue
214
+ }
215
+ if let transition = parent. definingInstruction as? OwnershipTransitionInstruction {
216
+ parent = transition. operand. value
217
+ continue
218
+ }
219
+ return false
220
+ }
221
+ }
222
+
205
223
func isLetFieldAddress( of markUninitialized: MarkUninitializedInst ) -> Bool {
206
224
if case . class( let rea) = self . accessBase,
207
225
rea. fieldIsLet,
208
- rea. instance. referenceRoot == markUninitialized
226
+ rea. instance. isReferenceDerived ( from : markUninitialized)
209
227
{
210
228
return true
211
229
}
You can’t perform that action at this time.
0 commit comments