[GHC] #3736: GHC specialising instead of inlining

GHC cvs-ghc at haskell.org
Fri Oct 22 09:33:23 EDT 2010


#3736: GHC specialising instead of inlining
-------------------------+--------------------------------------------------
    Reporter:  guest     |        Owner:  igloo                  
        Type:  bug       |       Status:  new                    
    Priority:  normal    |    Milestone:  7.0.1                  
   Component:  Compiler  |      Version:  6.10.4                 
    Keywords:            |     Testcase:                         
   Blockedby:            |   Difficulty:                         
          Os:  Linux     |     Blocking:                         
Architecture:  x86       |      Failure:  Runtime performance bug
-------------------------+--------------------------------------------------
Changes (by simonpj):

  * owner:  => igloo


Comment:

 I looked again at this. The HEAD is slower than 6.12 because we have
 {{{
 {-# INLINE arguments2 #-}
 arguments2 :: (a -> b -> x) -> a -> b -> x
 arguments2 f a b = (f $! a) $! b

 ...let go = arguments2 $ \p i -> \x -> blah
 }}}
 In 6.12, `arguments2` would inline regardless of the number of arguments,
 whereas in HEAD things marked INLINE only inline when they have as many
 args as are on the LHS in the source program.  So we need
 {{{
 {-# INLINE arguments2 #-}
 arguments2 :: (a -> b -> x) -> a -> b -> x
 arguments2 f = \ a b -> (f $! a) $! b
 }}}
 I think this is overall an improvement in control, but you do have to be
 careful.  With that change the HEAD is just as fast either way round.
 Here are user times in seconds:
 {{{
                6.12          7.0
 ------------------------------------
 ./T3736 1      1.84          0.32
 ./T3736 2      0.32          0.32
 }}}
 I don't know whether it's worth making a performance-regression test to
 make sure the original problem doesn't re-surface.  Ian, you decide!

 Simon

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


More information about the Glasgow-haskell-bugs mailing list