[GHC] #14737: Improve performance of Simplify.simplCast

GHC ghc-devs at haskell.org
Tue Apr 3 11:29:06 UTC 2018


#14737: Improve performance of Simplify.simplCast
-------------------------------------+-------------------------------------
        Reporter:  tdammers          |                Owner:  (none)
            Type:  bug               |               Status:  patch
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.2.2
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
 Type of failure:  Compile-time      |  Unknown/Multiple
  performance bug                    |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:  #11735 #14683     |  Differential Rev(s):  Phab:D4385
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by simonpj):

 Yes, delete the `eqType` branches in both `pushCoTyArg` and `pushValArg`.
 Leave a Note to say "don't do `eqType` here! (see Trac #14737)".

 On to `mkInstCo`.  I see that it does an inefficient single-variable
 substitution.  So if we have
 {{{
 mkInstCo (mkInstCo (mkInstCo co (Refl t1))
                    (Refl t2))
          (Refl t3)
 }}}
 we will traverse `co` three times (and `t1` twice etc).  Bad bad.

 Idea: leave that to the coercion optimiser.  Try simply removing the first
 equation for `mkInstCo` leaving
 {{{
 mkInstCo = InstCo
 }}}
 '''Richard''': I think that the coercion optimiser will do a good job
 here, right?

 But I do see this in the `InstCo` case of `opt_co4`:
 {{{
     -- See if it is a forall after optimization
     -- If so, do an inefficient one-variable substitution, then re-
 optimize
 }}}
 Are you sure that's a good idea?

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14737#comment:13>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list