mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
* Fix the mid-level pass pipeline. Module passes need to be in a separate pipeline, otherwise the pipeline restart mechanism will be broken. This makes GlobalOpt and serialization run earlier in the pipeline. There's no explicit reason for them to be run later, in the middle of a function pass pipeline. Also, pipeline boundaries, like serialization and module passes should be explicit at the the top level function that creates the pass pipelines. * SILOptimizer: Add enforcement of function-pass pipelines. Don't allow module passes to be inserted within a function pass pipeline. This silently breaks the function pipeline both interfering with analysis and the normal pipeline restart mechanism. * Add misssing pass in addFunctionPasses Co-authored-by: Andrew Trick <atrick@apple.com>
24 lines
1.0 KiB
Swift
24 lines
1.0 KiB
Swift
// RUN: %target-swift-frontend -c -o /dev/null -O -Xllvm -sil-print-after=inline %s 2>&1 | %FileCheck %s --check-prefix NOTSKIPPING
|
|
// RUN: %target-swift-frontend -emit-sil -o /dev/null -O -Xllvm -sil-print-after=inline %s 2>&1 | %FileCheck %s --check-prefix NOTSKIPPING
|
|
// RUN: %target-swift-frontend -emit-module -o /dev/null -O -Xllvm -sil-print-after=inline %s 2>&1 | %FileCheck %s --check-prefix SKIPPING
|
|
|
|
// This test ensures that we don't run the Perf Inliner after serializing a
|
|
// module, if we're stopping optimizations after serializing. We want to also
|
|
// make sure we _do_ still run the Perf Inliner when we're doing a full
|
|
// compile or emitting SIL directly.
|
|
|
|
@inline(never)
|
|
func _blackHole(_ x: Int) {}
|
|
|
|
@inlinable
|
|
public func inlinableFunction(_ x: Int) -> Int {
|
|
return x + 1
|
|
}
|
|
|
|
public func caller() {
|
|
_blackHole(inlinableFunction(20))
|
|
}
|
|
|
|
// NOTSKIPPING: *** SIL function after {{.*}}, stage MidLevel,Function, pass {{.*}}: PerfInliner (inline)
|
|
// SKIPPING-NOT: *** SIL function after {{.*}}, stage MidLevel,Function, pass {{.*}}: PerfInliner (inline)
|