Skip to content

Commit a5ef2b3

Browse files
committed
DeinitDevirtualizer: Don't run the pass on non-OSSA functions
1 parent 65adc5a commit a5ef2b3

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

SwiftCompilerSources/Sources/Optimizer/FunctionPasses/DeinitDevirtualizer.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ import SIL
1717
let deinitDevirtualizer = FunctionPass(name: "deinit-devirtualizer") {
1818
(function: Function, context: FunctionPassContext) in
1919

20+
guard function.hasOwnership else {
21+
return
22+
}
23+
2024
for inst in function.instructions {
2125
switch inst {
2226
case let destroyValue as DestroyValueInst:

test/SILOptimizer/devirt_deinits.sil

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,16 @@ bb0(%0 : $*T):
283283
return %r : $()
284284
}
285285

286+
// CHECK-LABEL: sil @test_non_ossa :
287+
// CHECK: destroy_addr %0
288+
// CHECK: } // end sil function 'test_non_ossa'
289+
sil @test_non_ossa : $@convention(thin) (@in S1) -> () {
290+
bb0(%0 : $*S1):
291+
destroy_addr %0 : $*S1
292+
%r = tuple()
293+
return %r : $()
294+
}
295+
286296
sil @s1_deinit : $@convention(method) (@owned S1) -> ()
287297
sil @s2_deinit : $@convention(method) (@owned S2) -> ()
288298
sil @s3_deinit : $@convention(method) <T> (@in S3<T>) -> ()

0 commit comments

Comments
 (0)