Re: Why doesn’t the simple optimizer fuse casts?

Richard Eisenberg rae at richarde.dev
Mon Apr 27 21:22:41 UTC 2020


Hi Alexis,

Nested casts shouldn't happen. The mkCast function gets rid of them. Someone somewhere is forgetting to call it. If you have a concrete program that leads to nested casts, post a bug report. :)

Thanks!
Richard

> On Apr 27, 2020, at 8:29 PM, Alexis King <lexi.lambda at gmail.com> wrote:
> 
> This question is spurred by curiosity more than anything else, but
> I’ve noticed that the simple optimizer doesn’t fuse nested casts, and
> I’m wondering if there’s any reason it couldn’t. To make what I’m
> talking about more concrete, suppose we have an expression like this:
> 
>    (x |> co) |> sym co
> 
> It seems like it would be trivial for simpleOptExpr to fuse the nested
> casts to get
> 
>    x |> co; sym co
> 
> and then the coercion optimizer could get rid of it entirely.
> Moreover, this seems within the spirit of the simple optimizer, since
> it’s really just “cleaning up” an expression. Is there any reason the
> simple optimizer doesn’t do this, or is it just something nobody
> implemented?
> 
> (For context, I’ve recently been staring at a lot of -ddump-ds output,
> and there happen to be a bunch of nested casts in the result that are
> really just noise. It would be nice if the simple optimizer got rid of
> them for me.)
> 
> Alexis
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs



More information about the ghc-devs mailing list