1. 21 Apr, 2015 5 commits
    • Simon Peyton Jones's avatar
      GADTs now are CPR-able · b9f20bd4
      Simon Peyton Jones authored
      Accompanies f2d1b7fc
      Support unboxing for GADT product types
      b9f20bd4
    • Simon Peyton Jones's avatar
      Wibble to DmdAnal · 5c7e4db5
      Simon Peyton Jones authored
      This fixes a typo in d5773a49
          Teach DmdAnal that coercions are value arguments!
          (Trac #10288)
      
      Sorry about that; I'm not sure how it slipped through.
      5c7e4db5
    • Simon Peyton Jones's avatar
      Support unboxing for GADT product types · f2d1b7fc
      Simon Peyton Jones authored
      Beofre this commit we never unboxed GADT, even if they
      are perfectly civilised products.
      
      This patch liberalises unboxing slightly.
      See Note [Product types] in TyCon.
      
      Still to come
       - for strictness, we could maybe deal with existentials too
       - todo: unboxing constructor arguments
      f2d1b7fc
    • Simon Peyton Jones's avatar
      Spelling in comment · d12c7cb9
      Simon Peyton Jones authored
      d12c7cb9
    • Simon Peyton Jones's avatar
      Teach DmdAnal about free coercion variables · 3bec1ac0
      Simon Peyton Jones authored
      Coercion variables are used in casts and coercions, so the demand
      analyser should jolly well not regard them as absent!
      
      In fact this bug never makes a difference because even absent
      unboxed-coercion arguments are passed anyway;
      see WwLib.mk_abesnt_let, which returns Nothing for coercion Ids.
      
      But it was simply wrong before and that is never cool.
      3bec1ac0
  2. 20 Apr, 2015 2 commits
    • Simon Peyton Jones's avatar
      Teach DmdAnal that coercions are value arguments! · d5773a49
      Simon Peyton Jones authored
      The demand analyser was treating coercion args like type args,
      which meant that the arguments in a strictness signature got
      out of step with the arguments of a call.  Result chaos and
      disaster.  Trac #10288 showed it up.
      
      It's hard to get this bug to show up in practice because
       - functions abstracted over coercions are usually abstracted
         over *boxed* coercions
       - we don't currently unbox a boxed-coercion arg because it's
         GADT (I see how to fix this too)
      
      But after floating, optimisation, and so on, Trac #10288 did
      get a function abstracted over an unboxed coercion, and then
      the -flate-dmd-anal pass went wrong.
      
      I don't think I can come up with a test case, but I don't think
      it matters too much.
      
      Still to come
       - Fix a second bug, namely that coercion variables are wrongly
         marked as absent because DmdAnal doesn't check the the free
         variables of casts. I think this never bites in practice
         (see the follow-up commit)
      
       - Make GADT products work with strictness analysis
      d5773a49
    • Herbert Valerio Riedel's avatar
      Update Cabal submodule to 1.22.3.0 release · 4bc925a6
      Herbert Valerio Riedel authored
      Highlights since 1.22.2.0:
      
      - cabal check will fail on -fprof-auto passed as a ghc-option
      - filterConfigureFlags: filter more flags.
      - fix ghcjs-pkg version number handling
      
      Addresses #10304
      4bc925a6
  3. 18 Apr, 2015 1 commit
  4. 17 Apr, 2015 5 commits
  5. 16 Apr, 2015 6 commits
  6. 15 Apr, 2015 2 commits
    • Joachim Breitner's avatar
      Improve Call Arity performance · a9ca67f6
      Joachim Breitner authored
      This improves how the Call Arity deals with "boring" variables. Boring
      variables are those where it does not bother to include in the analysis
      result, so whenever something is looked up in the analysis result, we
      have to make a conservative assumption about them.
      
      Previously, we extended the result with such conservative information
      about them, to keep the code uniform, but that could blow up the amount
      of data passed around, even if only temporarily, and slowed things down.
      
      We now pass around an explicit list (well, set) of variable that are
      boring and take that into account whenever we use the result. Not as
      pretty, but noticably faster.
      a9ca67f6
    • Simon Peyton Jones's avatar
      Fix fundep coverage-condition check for poly-kinds · 49d9b009
      Simon Peyton Jones authored
      See Note [Closing over kinds in coverage] in FunDeps.
      I'd already fixed this bug once, for Trac #8391, but I put the
      call to closeOverKinds in the wrong place, so Trac #10109
      failed.  (It checks the /liberal/ coverage condition, which
      
      The fix was easy: move the call to the right place!
      49d9b009
  7. 14 Apr, 2015 16 commits
  8. 10 Apr, 2015 2 commits
  9. 09 Apr, 2015 1 commit