Help needed with optimization
Simon Peyton Jones
simon.peytonjones at gmail.com
Tue Jan 23 22:50:15 UTC 2024
Tom
Ha! I could not resist having a look. See
https://gitlab.haskell.org/ghc/ghc/-/issues/24371
Simon
On Tue, 23 Jan 2024 at 21:22, Tom Ellis <
tom-lists-haskell-cafe-2023 at jaguarpaw.co.uk> wrote:
> Hello GHC devs,
>
> I'm trying to understand why my code is not being optimized in the way
> I would expect. I'm completely stuck and I think I need the advice of
> an expert.
>
> I'm writing an effect system on top of transformers. The effect
> system wraps monad transformers in a newtype that encodes the
> composition structure of the transformers at the type level. Because
> it's a newtype all of the class members are inherited directly from
> the underlying type using coerce. When I implement something using
> this effect system I would expect to generate exactly the same code as
> if I had written it using transformers directly. However, it
> generates significantly worse code, even in a very simple case.
>
> Firstly, a case where I do get the same code. All of these compile to
> the constant 1. Hooray!
>
>
> https://github.com/tomjaguarpaw/ad/blob/cd0d876ddb448fe611515e8768dee66dc02ed650/Eff-Optimize/Main.hs#L26-L54
>
> Secondly, a simple cases where I do not get the same code. `mySumMTL`
> and `mySumNewtype` yield the same code, as expected. After all,
> `mySumNewtype` does exactly the same thing as `mySumMTL`, it's just
> wrapped in some newtypes. However, `mySumEff` yields worse code,
> despite *also* being the same thing as `mySumMTL` just wrapped in some
> newtypes.
>
>
> https://github.com/tomjaguarpaw/ad/blob/cd0d876ddb448fe611515e8768dee66dc02ed650/Eff-Optimize/Main.hs#L62-L94
>
> You can compare the generated loops at:
>
>
> https://github.com/tomjaguarpaw/ad/blob/cd0d876ddb448fe611515e8768dee66dc02ed650/Eff-Optimize/optimizer-output.md
>
> Does anyone have a clue what's going wrong in the optimizer here? I
> don't think the singleton that I pass around to access the type level
> index at runtime has anything to do with it. That seems to be
> optimized away by inlining. Is the simplifier confused by all the
> coercions?
>
> Thanks for any help anyone may be able to shed,
>
> Tom
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20240123/ac28c376/attachment.html>
More information about the ghc-devs
mailing list