Files
swift-mirror/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/DeinitDevirtualizer.swift
Erik Eckstein 6dde4c942e MandatoryPerformanceOptimizations: force de-virtualizing value-type deinits
Do this even if the function then contains references to other functions with wrong linkage.
MandatoryPerformanceOptimization fixes the linkage afterwards.
This is similar to what we already do with de-virtualizing class and witness methods: https://github.com/swiftlang/swift/pull/76032

rdar://168171608
2026-02-02 19:36:48 +01:00

37 lines
1.2 KiB
Swift

//===--- DeinitDevirtualizer.swift ----------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2023 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
import SIL
/// Devirtualizes destroys of non-copyable values.
///
let deinitDevirtualizer = FunctionPass(name: "deinit-devirtualizer") {
(function: Function, context: FunctionPassContext) in
guard function.hasOwnership else {
return
}
for inst in function.instructions {
switch inst {
case let destroyValue as DestroyValueInst:
_ = devirtualizeDeinits(of: destroyValue, isMandatory: false, context)
case let destroyAddr as DestroyAddrInst:
_ = devirtualizeDeinits(of: destroyAddr, isMandatory: false, context)
case let builtin as BuiltinInst:
_ = devirtualizeDeinits(of: builtin, isMandatory: false, context)
default:
break
}
}
}