mirror of
https://github.com/apple/swift.git
synced 2026-02-27 18:26:24 +01:00
The intent for `@inline(always)` is to act as an optimization control. The user can rely on inlining to happen or the compiler will emit an error message. Because function values can be dynamic (closures, protocol/class lookup) this guarantee can only be upheld for direct function references. In cases where the optimizer can resolve dynamic function values the attribute shall be respected. rdar://148608854
72 lines
2.8 KiB
Plaintext
72 lines
2.8 KiB
Plaintext
// RUN: %target-sil-opt -enable-sil-verify-all %s -inline -dce | %FileCheck %s -check-prefix=REGULAR
|
|
// RUN: %target-sil-opt -enable-sil-verify-all %s -inline -dce -ignore-always-inline | %FileCheck %s -check-prefix=IGNORED
|
|
|
|
sil_stage canonical
|
|
|
|
// REGULAR: sil [Osize] @caller
|
|
// IGNORED: sil [Osize] @caller
|
|
sil [Osize] @caller : $@convention(thin) () -> () {
|
|
bb0:
|
|
// REGULAR-NOT: function_ref @callee
|
|
// REGULAR: function_ref @foobar
|
|
// IGNORED: function_ref @callee
|
|
%d1 = function_ref @callee : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
|
|
%9999 = tuple()
|
|
return %9999 : $()
|
|
}
|
|
|
|
sil @foobar : $@convention(thin) () -> ()
|
|
|
|
// callee is "expensive" enough to not get inlined unless [heuristic_always_inline] is used
|
|
// REGULAR: sil [heuristic_always_inline] [Osize] @callee
|
|
// IGNORED: sil [heuristic_always_inline] [Osize] @callee
|
|
sil [heuristic_always_inline] [Osize] @callee : $@convention(thin) () -> () {
|
|
bb0:
|
|
%d1 = function_ref @foobar : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
apply %d1() : $@convention(thin) () -> ()
|
|
|
|
%9999 = tuple()
|
|
return %9999 : $()
|
|
}
|