mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
And replace them with explicit `metatype` instruction in the entry block. This allows such metatype instructions to be deleted if they are dead. This was already done for performance-annotated functions. But now do this for all functions. It is essential that performance-annotated functions are specialized in the same way as other functions. Because otherwise it can happen that the same specialization has different performance characteristics in different modules. And it's up to the linker to select one of those ODR functions when linking. Also, dropping metatype arguments is good for performance and code size in general. This change also contains a few bug fixes for dropping metatype arguments. rdar://110509780
20 lines
760 B
Swift
20 lines
760 B
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: %target-swift-frontend -emit-module %S/Inputs/specializer_input.swift -O -parse-stdlib -parse-as-library -emit-module -o %t/Swift.swiftmodule -module-name=Swift -module-link-name swiftCore
|
|
// RUN: %target-swift-frontend %s -O -I %t -emit-sil -o - | %FileCheck %s
|
|
|
|
import Swift
|
|
|
|
// Make sure the specializer can deserialize code.
|
|
|
|
// CHECK-LABEL: sil {{.*}}@main
|
|
// CHECK: bb0({{.*}}):
|
|
// CHECK: function_ref @$ss9ContainerVAByxGycfCBi32__Tgm5{{.*}}
|
|
// CHECK: function_ref @$ss9ContainerV11doSomethingyyFBi32__Tg5{{.*}}
|
|
|
|
// CHECK-LABEL: sil shared [noinline] @$ss9ContainerVAByxGycfCBi32__Tgm5
|
|
|
|
// CHECK-LABEL: sil shared [noinline] @$ss9ContainerV11doSomethingyyFBi32__Tg5Tf4d_n
|
|
|
|
var c = Container<Int>()
|
|
c.doSomething()
|