> On Oct 4, 2017, at 11:04 PM, Taylor Swift <kelvin1...@gmail.com> wrote:
> 
> 
> 
> On Oct 5, 2017, at 12:52 AM, Slava Pestov <spes...@apple.com 
> <mailto:spes...@apple.com>> wrote:
> 
>> 
>> 
>>> On Oct 4, 2017, at 9:40 PM, Taylor Swift via swift-evolution 
>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>> 
>>> i’m just tryna follow along here && this is probably a dumb question, but 
>>> is it possible for a generic function to be emitted as a set of specialized 
>>> functions into the client, but not inlined everywhere? It can be the case 
>>> where a large generic function gets slowed down by the large number of 
>>> generic operations inside it but it doesn’t make sense for it to be inlined 
>>> completely.
>> 
>> This is already possible. The optimizer doesn’t have to inline an 
>> @_inlineable function at its call site; it can emit a call to a specialized 
>> version instead.
>> 
>> Slava
> 
> Is there a reason using @_specialize() and @_inlineable together is slower 
> than using @_inlineable by itself?

By specialization, I mean the optimizer pass which takes a function body and 
substitutes generic parameters with statically-known types.

I’m not sure what your question means though. Adding a @_specialize attribute 
should never make anything slower. Rather it makes the optimizer eagerly emit 
specializations of a function in the defining module. You can think of 
@_specialize and @inlinable as mostly mutually exclusive; either you publish 
the complete function body for clients to optimize as they please, or you 
publish a fixed set of specializations.

You might prefer the latter for secrecy (serialized SIL is much closer to 
source code than machine code), but the the former enables more general 
optimizations.

Slava
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to