[GHC] #5780: -faggressive-primops change caused a failure in perf/compiler/parsing001

GHC cvs-ghc at haskell.org
Tue Apr 24 14:38:41 CEST 2012


#5780: -faggressive-primops change caused a failure in perf/compiler/parsing001
---------------------------------+------------------------------------------
    Reporter:  simonmar          |       Owner:                  
        Type:  bug               |      Status:  new             
    Priority:  high              |   Milestone:  7.6.1           
   Component:  Compiler          |     Version:  7.2.2           
    Keywords:                    |          Os:  Unknown/Multiple
Architecture:  Unknown/Multiple  |     Failure:  None/Unknown    
  Difficulty:  Unknown           |    Testcase:                  
   Blockedby:                    |    Blocking:                  
     Related:                    |  
---------------------------------+------------------------------------------

Comment(by simonpj):

 BTW here's the original commit message (the one that was reverted):
 {{{
 commit 601c983dd0bada6b49bdadd8f172fd4eacac4b0c
 Author: Simon Peyton Jones <simonpj at microsoft.com>
 Date:   Fri Jan 13 17:50:00 2012 +0000

     Add -faggressive-primops plus refactoring in CoreUtils

     I'm experimenting with making GHC a bit more aggressive about
       a) dropping case expressions if the result is unused
             Simplify.rebuildCase, CaseElim equation

       b) floating case expressions inwards
             FloatIn.fiExpr, AnnCase

     In both cases the new behaviour is gotten with a static (debug)
     flag -faggressive-primops.  The extra "aggression" is to allow
     discarding and floating in for side-effecting operations.  See
     the new, extensive Note [PrimOp can_fail and has_side_effects]
     in PrimoOp.

     When discarding a case with unused binders, in the lifted-type
     case it's definitely ok if the scrutinee terminates; previously
     we were checking exprOkForSpeculation, which is significantly
     worse.

     So I wanted a new function CoreUtils.exprCertainlyTerminates.
     In doing this I ended up with a significant refactoring in
     CoreUtils.  The new structure has quite a lot of nice sharing:

         exprIsCheap             = exprIsCheap' isHNFApp
         exprIsExpandable        = exprIsCheap' isConLikeApp

         exprIsHNF               = exprIsHNFlike isHNFApp
         exprIsConLike           = exprIsHNFlike isConLikeApp
         exprCertainlyTerminates = exprIsHNFlike isTerminatingApp

  compiler/coreSyn/CoreArity.lhs    |    4 +-
  compiler/coreSyn/CoreUtils.lhs    |  237
 ++++++++++++++++++++----------------
  compiler/main/StaticFlagParser.hs |    1 +
  compiler/main/StaticFlags.hs      |    6 +
  compiler/prelude/PrimOp.lhs       |   59 +++++++--
  compiler/simplCore/FloatIn.lhs    |   10 ++-
  compiler/simplCore/OccurAnal.lhs  |    4 +-
  compiler/simplCore/SimplUtils.lhs |   10 +-
  compiler/simplCore/Simplify.lhs   |   20 ++--
  9 files changed, 214 insertions(+), 137 deletions(-)
 }}}

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



More information about the Glasgow-haskell-bugs mailing list