1. 03 Jan, 2010 1 commit
  2. 04 Jan, 2010 1 commit
    • simonpj@microsoft.com's avatar
      Substantial improvements to coercion optimisation · b06d623b
      simonpj@microsoft.com authored
      The main purpose of this patch is to add a bunch of new rules
      to the coercion optimiser.  They are documented in the (revised)
      Appendix of the System FC paper.  
      
      Some code has moved about:
      
      - OptCoercion is now a separate module, mainly because it
        now uses tcMatchTy, which is defined in Unify, so OptCoercion
        must live higehr up in the hierarchy
      
      - Functions that manipulate Kinds has moved from 
        Type.lhs to Coercion.lhs.  Reason: the function typeKind
        now needs to call coercionKind.  And in any case, a Kind is
        a flavour of Type, so it builds on top of Type; indeed Coercions
        and Kinds are both flavours of Type.
      
        This change required fiddling with a number of imports, hence
        the one-line changes to otherwise-unrelated modules
      
      - The representation of CoTyCons in TyCon has changed.   Instead of
        an extensional representation (a kind checker) there is now an
        intensional representation (namely TyCon.CoTyConDesc).  This was
        needed for one of the new coercion optimisations.
      b06d623b
  3. 02 Jan, 2010 1 commit
  4. 31 Dec, 2009 5 commits
  5. 18 Dec, 2009 1 commit
  6. 13 Dec, 2009 1 commit
    • Simon Marlow's avatar
      If ACTIVITY_INACTIVE is set, wait for GC before resetting it · 5308c042
      Simon Marlow authored
      I don't think this fixes any real bugs, but there's a small
      possibility that when the RTS is woken up for an idle-time GC, the IO
      manager thread might be pre-empted which would prevent the idle GC
      from happening; this change ensures that the idle GC happens anyway.
      5308c042
  7. 30 Dec, 2009 1 commit
  8. 22 Dec, 2009 2 commits
  9. 21 Dec, 2009 5 commits
  10. 18 Dec, 2009 9 commits
  11. 21 Dec, 2009 2 commits
  12. 17 Dec, 2009 3 commits
  13. 19 Dec, 2009 2 commits
  14. 18 Dec, 2009 2 commits
  15. 17 Dec, 2009 1 commit
  16. 18 Dec, 2009 1 commit
  17. 17 Dec, 2009 2 commits
    • dias@cs.tufts.edu's avatar
      missed a case in a previous fix · bfb34689
      dias@cs.tufts.edu authored
      Here's the obscure problem:
      -- However, we also want to allow an assignment to be generated
      -- in the case when the types are compatible, because this allows
      -- some slightly-dodgy but occasionally-useful casts to be used,
      -- such as in RtClosureInspect where we cast an HValue to a MutVar#
      -- so we can print out the contents of the MutVar#.  If we generate
      -- code that enters the HValue, then we'll get a runtime panic, because
      -- the HValue really is a MutVar#.  The types are compatible though,
      -- so we can just generate an assignment.
      bfb34689
    • Simon Marlow's avatar
      Fix #650: use a card table to mark dirty sections of mutable arrays · 0417404f
      Simon Marlow authored
      The card table is an array of bytes, placed directly following the
      actual array data.  This means that array reading is unaffected, but
      array writing needs to read the array size from the header in order to
      find the card table.
      
      We use a bytemap rather than a bitmap, because updating the card table
      must be multi-thread safe.  Each byte refers to 128 entries of the
      array, but this is tunable by changing the constant
      MUT_ARR_PTRS_CARD_BITS in includes/Constants.h.
      0417404f