Skip to content

Commit fad765b

Browse files
authored
Merge pull request #77523 from eeckstein/fix-simplification
Simplification: don't delete trivially dead borrowed-from instruction
2 parents f8ca397 + 1c5e185 commit fad765b

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

SwiftCompilerSources/Sources/Optimizer/Utilities/OptUtils.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,9 @@ extension Instruction {
297297
switch self {
298298
case is TermInst, is MarkUninitializedInst, is DebugValueInst:
299299
return false
300+
case is BorrowedFromInst:
301+
// A dead borrowed-from can only be removed if the argument (= operand) is also removed.
302+
return false
300303
case let bi as BuiltinInst:
301304
if bi.id == .OnFastPath {
302305
return false

test/SILOptimizer/sil_combine_inst_passes.sil

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,3 +148,21 @@ bb0:
148148
return %16 : $Int
149149
}
150150

151+
// CHECK-LABEL: sil [ossa] @test_dead_borrowed_from
152+
// CHECK: borrowed {{.*}} from
153+
// CHECK: } // end sil function 'test_dead_borrowed_from'
154+
sil [ossa] @test_dead_borrowed_from : $@convention(thin) (@guaranteed Buffer, @guaranteed Buffer) -> () {
155+
bb0(%0 : @guaranteed $Buffer, %1 : @guaranteed $Buffer):
156+
cond_br undef, bb1, bb2
157+
158+
bb1:
159+
br bb3(%0 : $Buffer)
160+
161+
bb2:
162+
br bb3(%1 : $Buffer)
163+
164+
bb3(%9 : @guaranteed $Buffer):
165+
%10 = borrowed %9 : $Buffer from (%1 : $Buffer)
166+
%r = tuple ()
167+
return %r : $()
168+
}

0 commit comments

Comments
 (0)