From 58ea2ef6efca97fec19428c2d9061be666aa26ff Mon Sep 17 00:00:00 2001 From: Kuba Mracek Date: Wed, 10 Jan 2024 15:46:34 +0100 Subject: [PATCH 1/2] [embedded] Ignore 'do not specialize' @_semantics attributes in embedded Swift mode --- lib/SILOptimizer/Utils/Generics.cpp | 5 +++++ test/embedded/specialize-attrs.swift | 29 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 test/embedded/specialize-attrs.swift diff --git a/lib/SILOptimizer/Utils/Generics.cpp b/lib/SILOptimizer/Utils/Generics.cpp index 4569a393de5b5..18746799ba3f0 100644 --- a/lib/SILOptimizer/Utils/Generics.cpp +++ b/lib/SILOptimizer/Utils/Generics.cpp @@ -500,6 +500,11 @@ static bool createsInfiniteSpecializationLoop(ApplySite Apply) { static bool shouldNotSpecialize(SILFunction *Callee, SILFunction *Caller, SubstitutionMap Subs = {}) { + // Ignore "do not specialize" markers in embedded Swift -- specialization is + // mandatory. + if (Callee->getModule().getOptions().EmbeddedSwift) + return false; + if (Callee->hasSemanticsAttr(semantics::OPTIMIZE_SIL_SPECIALIZE_GENERIC_NEVER)) return true; diff --git a/test/embedded/specialize-attrs.swift b/test/embedded/specialize-attrs.swift new file mode 100644 index 0000000000000..038db2c8186ec --- /dev/null +++ b/test/embedded/specialize-attrs.swift @@ -0,0 +1,29 @@ +// RUN: %target-run-simple-swift(-parse-as-library -Onone -enable-experimental-feature Embedded -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop -Xlinker -dead_strip) | %FileCheck %s +// RUN: %target-run-simple-swift(-parse-as-library -O -enable-experimental-feature Embedded -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop -Xlinker -dead_strip) | %FileCheck %s +// RUN: %target-run-simple-swift(-parse-as-library -Osize -enable-experimental-feature Embedded -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop -Xlinker -dead_strip) | %FileCheck %s + +// REQUIRES: swift_in_compiler +// REQUIRES: executable_test +// REQUIRES: optimized_stdlib +// REQUIRES: OS=macosx + +@_semantics("optimize.sil.specialize.generic.never") +func foo(_ t: T) -> Int { + return 42 +} + +@_semantics("optimize.sil.specialize.generic.size.never") +func foo2(_ t: T) -> Int { + return 42 +} + +@main +struct Main { + static func main() { + foo(42) + foo2(42) + print("OK!") + } +} + +// CHECK: OK! From 62e8dc7b8e9ad77b5104d6bfb927ab070eaf1858 Mon Sep 17 00:00:00 2001 From: Kuba Mracek Date: Wed, 10 Jan 2024 20:07:12 +0100 Subject: [PATCH 2/2] [embedded] Adjust embedded/specialize-attrs.swift test to include print.swift --- test/embedded/specialize-attrs.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/embedded/specialize-attrs.swift b/test/embedded/specialize-attrs.swift index 038db2c8186ec..693f16b0e8aae 100644 --- a/test/embedded/specialize-attrs.swift +++ b/test/embedded/specialize-attrs.swift @@ -1,6 +1,6 @@ -// RUN: %target-run-simple-swift(-parse-as-library -Onone -enable-experimental-feature Embedded -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop -Xlinker -dead_strip) | %FileCheck %s -// RUN: %target-run-simple-swift(-parse-as-library -O -enable-experimental-feature Embedded -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop -Xlinker -dead_strip) | %FileCheck %s -// RUN: %target-run-simple-swift(-parse-as-library -Osize -enable-experimental-feature Embedded -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop -Xlinker -dead_strip) | %FileCheck %s +// RUN: %target-run-simple-swift(%S/Inputs/print.swift -parse-as-library -Onone -enable-experimental-feature Embedded -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop -Xlinker -dead_strip) | %FileCheck %s +// RUN: %target-run-simple-swift(%S/Inputs/print.swift -parse-as-library -O -enable-experimental-feature Embedded -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop -Xlinker -dead_strip) | %FileCheck %s +// RUN: %target-run-simple-swift(%S/Inputs/print.swift -parse-as-library -Osize -enable-experimental-feature Embedded -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop -Xlinker -dead_strip) | %FileCheck %s // REQUIRES: swift_in_compiler // REQUIRES: executable_test