[swift-dev] SR-5403 / Memory Optimization Opportunity (Load/Store forwarding)

Michael Gottesman mgottesman at apple.com
Mon Jul 10 14:32:22 CDT 2017


> On Jul 10, 2017, at 10:56 AM, Johannes Weiß <johannesweiss at apple.com> wrote:
> 
> Hi Michael,
> 
> Firstly: if swift-dev is not the right place for me to ask silly questions, please let me know :).
> 
> Thanks very much for all your pointers on the JIRA [1] ticket. I was just trying to get started and already have a few questions. Apologies, they're very basic as I'm just getting started with the Swift compiler source and tooling.
> 
> The first question is just about the tooling: I got sil-opt to run with an invocation like this:
> 
>   swiftc -emit-module -O test.swift
>   sil-opt -sdk $(xcrun --show-sdk-path) test.swiftmodule
> 
> Now you advise to run the '-debug-only=sil-redundant-load-elim' so I tried
> 
>   sil-opt [...] -debug-only=sil-redundant-load-elim
> 
> but it doesn't seem happy with that. Did I misunderstand how to pass this option?

What do you mean by it doesn't seem happy?

> 
> 
> My second question actually relates to your first suggestion: 'creating a simple test that performs a store, then passes the address to an in_guaranteed function and then reloads the value'
> 
> I read up about @in_guaranteed and I managed to make a @in_guaranteed function this way:
> 
> protocol Foo {
>    func foo()
> }
> extension Foo {
>    func foo() {}
> }
> 
> The `foo()` function will now be an @in_guaranteed function taking `self`, correct? (any other ways to create an `@in_guaranteed` function easily?) This is probably me being a bit slow but what exactly do you mean with performing a store, passing the address to an @in_guaranteed function and then reloading the value? Very naively I thought about
> 
> class C: Foo {}
> func something() {
>    let c = C()
>    var b: Foo = c   /* store */
>    b.foo()          /* pass the address to an `@in_guaranteed` func */
>    c.foo()          /* load again */
> }
> 
> is this roughly what you had in mind?

Nope. I was suggesting that you write the SIL by hand. It will be much easier.

> 
> Thanks,
>  Johannes
> 
> [1]: https://bugs.swift.org/browse/SR-5403



More information about the swift-dev mailing list