patch applied (ghc): Fix Trac #2581: inlining of record selectors

Simon Peyton Jones simonpj at microsoft.com
Wed Sep 10 04:53:54 EDT 2008


Wed Sep 10 01:30:14 PDT 2008  simonpj at microsoft.com
  * Fix Trac #2581: inlining of record selectors
  
  Bryan discovered that a non-trivial record selector (non-trivial in 
  the sense that it has to reconstruct the result value because of
  UNPACK directives) weren't being inlined.  The reason was that the
  unfolding generated by MkId.mRecordSelId was never being optimised
  *at all*, and hence looked big, and hence wasn't inlined.
  
  (The out-of-line version *is* put into the code of the module
  and *is* optimised, which made this bug pretty puzzling.  But the
  unfolding inside the record-selector-Id itself, which is a GlobalId
  and hence does not get its inlining updated like LocalIds, was
  big and fat.)
  
  Solution: I wrote a very simple optimiser, CoreUnfold.simplOptExpr,
  which does enough optimisation to solve this particular problem.
  It's short, simple, and will be useful in other contexts.
  

    M ./compiler/basicTypes/MkId.lhs -3 +5
    M ./compiler/coreSyn/CoreUnfold.lhs -2 +84

View patch online:
http://darcs.haskell.org/ghc/_darcs/patches/20080910083014-1287e-5ed8a179a850fff5f2fb8c62cede64c76c2c4f49.gz



More information about the Cvs-ghc mailing list