Files
swift-mirror/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/DeinitDevirtualizer.swift
Erik Eckstein 96e57d62f6 Optimizer: de-virtualize deinits of non-copyable types
In regular swift this is a nice optimization. In embedded swift it's a requirement, because the compiler needs to be able to specialize generic deinits of non-copyable types.
The new de-virtualization utilities are called from two places:

* from the new DeinitDevirtualizer pass. It replaces the old MoveOnlyDeinitDevirtualization, which is very basic and does not fulfill the needs for embedded swift.

* from MandatoryPerformanceOptimizations for embedded swift
2023-11-27 09:21:34 +01:00

31 lines
1013 B
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
for inst in function.instructions {
switch inst {
case let destroyValue as DestroyValueInst:
_ = devirtualizeDeinits(of: destroyValue, context)
case let destroyAddr as DestroyAddrInst:
_ = devirtualizeDeinits(of: destroyAddr, context)
default:
break
}
}
}