1. 12 Apr, 2006 2 commits
    • simonpj@microsoft.com's avatar
      Improve pruning of case alternatives to account for GADTs · 2763f56d
      simonpj@microsoft.com authored
        data T a where
          T1 :: T Int
          T2 :: T Bool
          T3 :: T Char
        f :: T Bool -> Int
        f x = case x of
      	  DEFAULT -> ...
      	  T2 -> 3
      Here the DEFAULT case covers multiple constructors (T1,T3), but none 
      of them can match a scrutinee of type (T Bool).  So we can prune away
      the default case altogether.
      In implementing this, I re-factored this bit of the simplifier, elminiating
      prepareAlts from SimplUtils, and putting all the work into simplAlts in
      The proximate cause was a program written by Manuel using PArrays
    • Simon Marlow's avatar
      Fix a bug in optimising division to shift right · 91a9aeeb
      Simon Marlow authored
      Division by an integral log2 can't be directly optimised to a shift
      right, because shift right behaves like a division that rounds to
      negative infinity, whereas we want one that rounds to zero.  Fix this
      by adding (divisor-1) to the dividend when it is negative before
      shifting.  We do this without jumps, generating very slightly worse
      code than gcc, which uses conditional moves on CPUs that support it.
  2. 11 Apr, 2006 3 commits
  3. 02 Apr, 2006 1 commit
    • simonpj@microsoft.com's avatar
      Improve newtype deriving · aa2c486e
      simonpj@microsoft.com authored
      Ross Paterson pointed out a useful generalisation of GHC's 
      newtype-deriving mechanism.  This implements it.  The idea
      is to allow
      	newtype Wrap m a = Wrap (m a) deriving (Monad, Eq)
      where the representation type doesn't start with a type
      Actually GHC already *did* implement this, but the eta-ok
      check in TcDeriv missed a case, so there was a lurking bug.
      This patches fixes the documentation too.  drvrun019 tests.
  4. 11 Apr, 2006 2 commits
  5. 10 Apr, 2006 2 commits
  6. 07 Apr, 2006 8 commits
  7. 21 Jan, 2006 2 commits
  8. 06 Apr, 2006 5 commits
  9. 05 Apr, 2006 3 commits
  10. 30 Mar, 2006 3 commits
  11. 29 Mar, 2006 3 commits
  12. 23 Mar, 2006 1 commit
  13. 28 Mar, 2006 1 commit
  14. 27 Mar, 2006 3 commits
    • Simon Marlow's avatar
      Add a new primitive forkOn#, for forking a thread on a specific Capability · c520a3a2
      Simon Marlow authored
      This gives some control over affinity, while we figure out the best
      way to automatically schedule threads to make best use of the
      available parallelism.
      In addition to the primitive, there is also:
        GHC.Conc.forkOnIO :: Int -> IO () -> IO ThreadId
      where 'forkOnIO i m' creates a thread on Capability (i `rem` N), where
      N is the number of available Capabilities set by +RTS -N.
      Threads forked by forkOnIO do not automatically migrate when there are
      free Capabilities, like normal threads do.  Still, if you're using
      forkOnIO exclusively, it's a good idea to do +RTS -qm to disable work
      pushing anyway (work pushing takes too much time when the run queues
      are large, this is something we need to fix).
    • Simon Marlow's avatar
      eliminate a warning · 5ed93b10
      Simon Marlow authored
    • Simon Marlow's avatar
      elimiante a couple of warnings · 24fd303c
      Simon Marlow authored
  15. 24 Mar, 2006 1 commit