1. 14 Jun, 2006 1 commit
  2. 25 Jun, 2006 1 commit
  3. 24 Jun, 2006 1 commit
    • simonpj@microsoft.com's avatar
      Improve RULE matching a bit more · 7d44782f
      simonpj@microsoft.com authored
      Consider this example (provided by Roman)
      
      	foo :: Int -> Maybe Int -> Int
      	foo 0 (Just n) = n
      	foo m (Just n) = foo (m-n) (Just n)
      
      SpecConstr sees this fragment:
      
      	case w_smT of wild_Xf [Just A] {
      	  Data.Maybe.Nothing -> lvl_smf;
      	  Data.Maybe.Just n_acT [Just S(L)] ->
      	    case n_acT of wild1_ams [Just A] { GHC.Base.I# y_amr [Just L] ->
      	    $wfoo_smW (GHC.Prim.-# ds_Xmb y_amr) wild_Xf
      	    }};
      
      and correctly generates the rule
      
      	RULES: "SC:$wfoo1" [0] __forall {y_amr [Just L] :: GHC.Prim.Int#
      					  sc_snn :: GHC.Prim.Int#}
      	  $wfoo_smW sc_snn (Data.Maybe.Just @ GHC.Base.Int (GHC.Base.I# y_amr))
      	  = $s$wfoo_sno y_amr sc_snn ;]
      
      BUT we must ensure that this rule matches in the original function!
      Note that the call to $wfoo is
      	    $wfoo_smW (GHC.Prim.-# ds_Xmb y_amr) wild_Xf
      
      During matching we expand wild_Xf to (Just n_acT).  But then we must also
      expand n_acT to (I# y_amr).  And we can only do that if we look up n_acT
      in the in-scope set, because in wild_Xf's unfolding it won't have an unfolding
      at all. 
      
      Happily, fixing the bug is easy: add a call to 'lookupRnInScope' in the 
      (Var v2) case of 'match'.
      7d44782f
  4. 23 Jun, 2006 2 commits
  5. 22 Jun, 2006 2 commits
  6. 21 Jun, 2006 5 commits
    • simonpj@microsoft.com's avatar
      Comment only · 5542157c
      simonpj@microsoft.com authored
      5542157c
    • simonpj@microsoft.com's avatar
      Transfer INLINE to specialised functions · 8d227e35
      simonpj@microsoft.com authored
      When the Specialise pass generates a specialised copy of a function,
      it should transfer the INLINE information to the specialised function.
      Otherwise, whether or not the INLNE happens can depend on whether
      specialisation happens, which seems wrong.  See Note [Inline specialisation]
      in Specialise.lhs
      
      Here's the example Roman reported
      
          primWriteMU :: UAE e => MUArr e s -> Int -> e -> ST s ()
          {-# INLINE primWriteMU #-}
          primWriteMU = writeMBU . unMUAPrim
          ------
          
          The problem is that primWriteMU doesn't get inlined *sometimes*, which
          results in code like
          
          case Data.Array.Parallel.Unlifted.Flat.UArr.$sprimWriteMU
      	    @ s11_X1nJ
      	    marr_s25s
      	    (GHC.Base.I# sc_s27F)
      	    GHC.Base.False
      	    new_s_a1Db
      	    of wild3_a1Dd { (# new_s1_X1F9, r_a1Dc #) -> ...
      
      Note the fact that we have a call to the *specialised* $sprimWriteMU.
      8d227e35
    • simonpj@microsoft.com's avatar
      Arity and eta-expansion tuning · 182ce7e2
      simonpj@microsoft.com authored
      Roman found that 
          loop :: STRef s a -> Int -> ST s Int
          loop ref n = case n of
                         0 -> return n
                         n -> loop ref (n-1)
      wasn't eta-expanding nicely, despite the 'state hack'
      (see Id.isStateHackType).  The reason was two-fold:
      
        a) a bug in CoreUtils.arityType (the Var case)
      
        b) the arity of a recursive function was not being
      	exposed in its RHS (see commments with
      	SimplEnv.addLetIdInfo
      
      The commit fixes both.  
      182ce7e2
    • Simon Marlow's avatar
      documentation for TH w/ profiling · d4f8ccee
      Simon Marlow authored
      d4f8ccee
    • Simon Marlow's avatar
      Allow Template Haskell to be used with -prof · 6f5d7744
      Simon Marlow authored
      In order for this to work, you need to build the program first in the
      normal way (without -prof), and then again with -prof and a suitable
      -osuf (eg. -osuf p_o).  The compiler will pick up the object files
      from the normal way for running TH expressions, when it sees -prof
      together with -osuf.  If you omit the -osuf, you get an error message:
      
      TH_genEx.hs:12:2:
          Dynamic linking required, but this is a non-standard build (eg. prof).
          You need to build the program twice: once the normal way, and then
          in the desired way using -osuf to set the object file suffix.
      
      If you use -osuf, but haven't built the program the normal way first,
      then you see:
      
      TH_genEx.hs:12:2:
          cannot find normal object file `TH_genExLib.o'
          while linking an interpreted expression
      
      Documentation to follow.
      
      Fixes: #651
      6f5d7744
  7. 20 Jun, 2006 1 commit
  8. 16 Jun, 2006 8 commits
  9. 14 Jun, 2006 2 commits
  10. 13 Jun, 2006 1 commit
  11. 12 Jun, 2006 3 commits
  12. 11 Jun, 2006 1 commit
  13. 10 Jun, 2006 1 commit
    • Don Stewart's avatar
      Don't emit 'Skipping' messages unless -v2 or higher is on · 01a51143
      Don Stewart authored
      Following GNU make, this patch makes GHC not emit messages about modules
      its skipping. This makes builds much quieter, and its a lot easier to
      work out what effects a change had on the code.
      
      The current behaviour can be recovered with -v2
      01a51143
  14. 12 Jun, 2006 2 commits
  15. 09 Jun, 2006 1 commit
  16. 08 Jun, 2006 8 commits
    • Simon Marlow's avatar
      fix possible ^C problems · 7434fb5b
      Simon Marlow authored
      Calling prodAllCapabilities() from interruptStgRts() was wrong, for
      the same reasons that we stopped doing it in handle_tick().  We now
      use the same mechanism (send a byte down the pipe to the IO manager
      thread), but abstract it in a wakeUpRts() function in the scheduler.
      7434fb5b
    • Simon Marlow's avatar
      New tracing interface · 5a2769f0
      Simon Marlow authored
      A simple interface for generating trace messages with timestamps and
      thread IDs attached to them.  Most debugging output goes through this
      interface now, so it is straightforward to get timestamped debugging
      traces with +RTS -vt.  Also, we plan to use this to generate
      parallelism profiles from the trace output.
      5a2769f0
    • Simon Marlow's avatar
      fix warnings · 3f10646c
      Simon Marlow authored
      3f10646c
    • Simon Marlow's avatar
      fix warnings · b6c66a92
      Simon Marlow authored
      b6c66a92
    • Simon Marlow's avatar
      Make it so that StgWord/StgInt are longs · 1046d334
      Simon Marlow authored
      This means we can use a %ld format specifier for StgWord/StgInt with
      printf and not get shouted at by gcc.
      1046d334
    • Simon Marlow's avatar
      more warning fixage · a9e6c441
      Simon Marlow authored
      a9e6c441
    • Simon Marlow's avatar
      fix a warning · 0caf5ba4
      Simon Marlow authored
      0caf5ba4
    • Simon Marlow's avatar
      fix some warnings · e9b4997c
      Simon Marlow authored
      e9b4997c