1. 30 Jan, 2013 1 commit
  2. 22 Jan, 2013 1 commit
  3. 02 Jan, 2013 1 commit
  4. 24 Dec, 2012 1 commit
  5. 15 Oct, 2012 1 commit
    • Simon Peyton Jones's avatar
      Use isCheapApp in exprIsWorkFree · 81594da5
      Simon Peyton Jones authored
      exprIsWorkFree was returning False for constructor applications
      like (Just x).  Horror!  Now we delegate to isCheapApp, which does the
      right thing.
      
      I found this (by accident) when seeing why the simplifier was taking
      more iterations than I expected.  So not only should we generate
      better code as a result, but perhaps with fewer simplifier iterations.
      General happiness.
      81594da5
  6. 17 Sep, 2012 1 commit
  7. 28 Aug, 2012 1 commit
  8. 02 Aug, 2012 1 commit
  9. 20 Jul, 2012 1 commit
  10. 27 Jun, 2012 1 commit
    • Simon Peyton Jones's avatar
      Add silent superclass parameters (again) · aa1e0976
      Simon Peyton Jones authored
      Silent superclass parameters solve the problem that
      the superclasses of a dicionary construction can easily
      turn out to be (wrongly) bottom.  The problem and solution
      are described in
         Note [Silent superclass arguments] in TcInstDcls
      
      I first implemented this fix (with Dimitrios) in Dec 2010, but removed
      it again in Jun 2011 becuase we thought it wasn't necessary any
      more. (The reason we thought it wasn't necessary is that we'd stopped
      generating derived superclass constraints for *wanteds*.  But we were
      wrong; that didn't solve the superclass-loop problem.)
      
      So we have to re-implement it.  It's not hard.  Main features:
      
        * The IdDetails for a DFunId says how many silent arguments it has
      
        * A DFunUnfolding describes which dictionary args are
          just parameters (DFunLamArg) and which are a function to apply
          to the parameters (DFunPolyArg).  This adds the DFunArg type
          to CoreSyn
      
        * Consequential changes to IfaceSyn.  (Binary hi file format changes
          slightly.)
      
        * TcInstDcls changes to generate the right dfuns
      
        * CoreSubst.exprIsConApp_maybe handles the new DFunUnfolding
      
      The thing taht is *not* done yet is to alter the vectoriser to
      pass the relevant extra argument when building a PA dictionary.
      aa1e0976
  11. 16 May, 2012 1 commit
  12. 09 May, 2012 1 commit
    • Simon Peyton Jones's avatar
      Be a little less aggressive about inlining (fixes Trac #5623) · 2112f43c
      Simon Peyton Jones authored
      When inlining, we are making a copy of the expression, so we have to
      be careful about duplicating work.  Previously we were using
      exprIsCheap for that, but it is willing to duplicate a cheap primop --
      and that is terribly bad if it happens inside some inner array loop
      (Trac #5623).  So now we use a new function exprIsWorkFree.  Even
      then there is some wiggle room:
         see Note [exprIsWorkFree] in CoreUtils
      
      This commit does make wheel-sieve1 allocate a lot more, but we decided
      that's just tough; it's more important for inlining to be robust
      about not duplicating work.
      2112f43c
  13. 07 May, 2012 1 commit
    • Simon Peyton Jones's avatar
      Yet another major refactoring of the constraint solver · dd7522c3
      Simon Peyton Jones authored
      This is the result of Simon and Dimitrios doing a code walk through.
      There is no change in behaviour, but the structure is much better.
      Main changes:
      
      * Given constraints contain an EvTerm not an EvVar
      
      * Correspondingly, TcEvidence is a recursive types that uses
        EvTerms rather than EvVars
      
      * Rename CtFlavor to CtEvidence
      
      * Every CtEvidence has a ctev_pred field.  And use record fields
        consistently for CtEvidence
      
      * The solved-constraint fields of InertSet (namely inert_solved and
        inert_solved_funeqs) contain CtEvidence, not Ct
      
      There is a long cascade of follow-on changes.
      dd7522c3
  14. 27 Apr, 2012 2 commits
    • Simon Peyton Jones's avatar
      Revert "Refactoring in CoreUtils/CoreArity" · a2ae0d77
      Simon Peyton Jones authored
      This reverts commit e3f8557c.
      
      Sigh. Seg fault.
      a2ae0d77
    • Simon Peyton Jones's avatar
      Refactoring in CoreUtils/CoreArity · e3f8557c
      Simon Peyton Jones authored
      In the previous commit about "aggressive primops" 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
      
      This patch also does some renaming
      
          CheapAppFun      -->   FunAppAnalyser
          isCheapApp       -->   isHNFApp
          isExpandableApp  -->   isConLikeApp
      e3f8557c
  15. 26 Apr, 2012 1 commit
  16. 30 Mar, 2012 1 commit
  17. 21 Mar, 2012 1 commit
    • batterseapower's avatar
      Make impossible-alternative-finding code more reusable · aecacda1
      batterseapower authored
      Makes the following changes:
       1. Generalises the type signatures of some functions relating to alternatives
          so that the type of "variables" and "expression" is not specified
       2. Puts the bulk of the alternative-filtering code into a new function filterAlts
          (in CoreUtils) that can be used outside of the SimplM monad
       3. Allows prepareAlts to return a null alternatives list if none are applicable -
          it turns out that this case was already handled by the caller (in the simplifier).
          This should result in a modest optimisation improvement in some cases.
      
      Conflicts:
      
      	compiler/coreSyn/CoreUtils.lhs
      	compiler/simplCore/SimplUtils.lhs
      aecacda1
  18. 16 Jan, 2012 1 commit
  19. 13 Jan, 2012 1 commit
    • Simon Peyton Jones's avatar
      Add -faggressive-primops plus refactoring in CoreUtils · 601c983d
      Simon Peyton Jones authored
      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
      601c983d
  20. 12 Jan, 2012 1 commit
    • Simon Peyton Jones's avatar
      Fix Trac #5658: strict bindings not floated in · 3beb1a83
      Simon Peyton Jones authored
      Two changes here
      
      * The main change here is to enhance the FloatIn pass so that it can
        float case-bindings inwards.  In particular the case bindings for
        array indexing.
      
      * Also change the code in Simplify, to allow a case on array
        indexing (ie can_fail is true) to be discarded altogether if its
        results are unused.
      
      Lots of new comments in PrimOp about can_fail and has_side_effects
      
      Some refactoring to share the FloatBind data structure between
      FloatIn and FloatOut
      3beb1a83
  21. 09 Jan, 2012 1 commit
  22. 29 Dec, 2011 1 commit
  23. 28 Nov, 2011 1 commit
    • dimitris's avatar
      This patch includes: · f3183d9a
      dimitris authored
      0) Typo in panic message.
      1) prioritization of equalities over family equalities in the worklists.
      2) rewriting of inert substitutions and solveds on-the-spot instead of
         kicking them out in the inerts. This required a monadic map over
         substitutions hence the modifications in UniqFM.
      3) Just comments and removing stale commented code.
      
      4) Useful SCC for simplifyInfer.
      
      5) Making CoreStats outputable.
      f3183d9a
  24. 22 Nov, 2011 2 commits
  25. 16 Nov, 2011 2 commits
  26. 15 Nov, 2011 1 commit
  27. 11 Nov, 2011 2 commits
  28. 04 Nov, 2011 1 commit
  29. 02 Nov, 2011 2 commits
    • Simon Marlow's avatar
      remove tabs again · 515728a3
      Simon Marlow authored
      515728a3
    • Simon Marlow's avatar
      Overhaul of infrastructure for profiling, coverage (HPC) and breakpoints · 7bb0447d
      Simon Marlow authored
      User visible changes
      ====================
      
      Profilng
      --------
      
      Flags renamed (the old ones are still accepted for now):
      
        OLD            NEW
        ---------      ------------
        -auto-all      -fprof-auto
        -auto          -fprof-exported
        -caf-all       -fprof-cafs
      
      New flags:
      
        -fprof-auto              Annotates all bindings (not just top-level
                                 ones) with SCCs
      
        -fprof-top               Annotates just top-level bindings with SCCs
      
        -fprof-exported          Annotates just exported bindings with SCCs
      
        -fprof-no-count-entries  Do not maintain entry counts when profiling
                                 (can make profiled code go faster; useful with
                                 heap profiling where entry counts are not used)
      
      Cost-centre stacks have a new semantics, which should in most cases
      result in more useful and intuitive profiles.  If you find this not to
      be the case, please let me know.  This is the area where I have been
      experimenting most, and the current solution is probably not the
      final version, however it does address all the outstanding bugs and
      seems to be better than GHC 7.2.
      
      Stack traces
      ------------
      
      +RTS -xc now gives more information.  If the exception originates from
      a CAF (as is common, because GHC tends to lift exceptions out to the
      top-level), then the RTS walks up the stack and reports the stack in
      the enclosing update frame(s).
      
      Result: +RTS -xc is much more useful now - but you still have to
      compile for profiling to get it.  I've played around a little with
      adding 'head []' to GHC itself, and +RTS -xc does pinpoint the problem
      quite accurately.
      
      I plan to add more facilities for stack tracing (e.g. in GHCi) in the
      future.
      
      Coverage (HPC)
      --------------
      
       * derived instances are now coloured yellow if they weren't used
       * likewise record field names
       * entry counts are more accurate (hpc --fun-entry-count)
       * tab width is now correct (markup was previously off in source with
         tabs)
      
      Internal changes
      ================
      
      In Core, the Note constructor has been replaced by
      
              Tick (Tickish b) (Expr b)
      
      which is used to represent all the kinds of source annotation we
      support: profiling SCCs, HPC ticks, and GHCi breakpoints.
      
      Depending on the properties of the Tickish, different transformations
      apply to Tick.  See CoreUtils.mkTick for details.
      
      Tickets
      =======
      
      This commit closes the following tickets, test cases to follow:
      
        - Close #2552: not a bug, but the behaviour is now more intuitive
          (test is T2552)
      
        - Close #680 (test is T680)
      
        - Close #1531 (test is result001)
      
        - Close #949 (test is T949)
      
        - Close #2466: test case has bitrotted (doesn't compile against current
          version of vector-space package)
      7bb0447d
  30. 27 Sep, 2011 2 commits
  31. 17 Sep, 2011 1 commit
    • Ian Lynagh's avatar
      Improve the handling of Integer literals · 1e87c0a6
      Ian Lynagh authored
      LitInteger now carries around the id of mkInteger, which it uses
      to construct the core to build Integer literals. This way we don't
      have to build in info about lots of Ids.
      
      We also no longer have any special-casing for integer-simple, so
      there is less code involved.
      1e87c0a6
  32. 13 Sep, 2011 1 commit
    • Ian Lynagh's avatar
      change how Integer's are handled in Core · fdac48f3
      Ian Lynagh authored
      We now treat them as literals until CorePrep, when we finally
      convert them into the real Core representation. This makes it a lot
      simpler to implement built-in rules on them.
      fdac48f3
  33. 07 Sep, 2011 1 commit
  34. 05 Sep, 2011 1 commit
    • Simon Peyton Jones's avatar
      Fix two bugs in caes-floating (fixes Trac #5453) · bd6f5de7
      Simon Peyton Jones authored
      The problem is documented in the ticket.  The patch
      does two things
      
      1. Make exprOkForSpeculation return False for a non-exhaustive case
      
      2. In SetLevels.lvlExpr, look at the *result* scrutinee, not the
         *input* scrutinee, when testing for evaluated-ness
      bd6f5de7