Repository : ssh://darcs.haskell.org//srv/darcs/ghc On branch : master
http://hackage.haskell.org/trac/ghc/changeset/4921136bd7643c54796003e28762941f436373a4 >--------------------------------------------------------------- commit 4921136bd7643c54796003e28762941f436373a4 Author: Simon Peyton Jones <[email protected]> Date: Wed Nov 2 13:54:31 2011 +0000 Add a base size when computing max-ticks, to deal with very small programs (like zero) >--------------------------------------------------------------- compiler/simplCore/SimplMonad.lhs | 27 +++++++++++++++++---------- 1 files changed, 17 insertions(+), 10 deletions(-) diff --git a/compiler/simplCore/SimplMonad.lhs b/compiler/simplCore/SimplMonad.lhs index a7615d2..a664377 100644 --- a/compiler/simplCore/SimplMonad.lhs +++ b/compiler/simplCore/SimplMonad.lhs @@ -66,22 +66,29 @@ initSmpl dflags rules fam_envs us size m = case unSM m env us (zeroSimplCount dflags) of (result, _, count) -> (result, count) where - -- Compute the max simplifier ticks as - -- pgm-size * magic-multiplier * tick-factor/100 - -- where magic-multiplier is a constant that gives reasonable results - max_ticks = fromInteger ((toInteger size * toInteger (simplTickFactor dflags - * magic_multiplier)) - `div` 100) + env = STE { st_flags = dflags, st_rules = rules + , st_max_ticks = computeMaxTicks dflags size + , st_fams = fam_envs } + +computeMaxTicks :: DynFlags -> Int -> Int +-- Compute the max simplifier ticks as +-- (base-size + pgm-size) * magic-multiplier * tick-factor/100 +-- where +-- magic-multiplier is a constant that gives reasonable results +-- base-size is a constant to deal with size-zero programs +computeMaxTicks dflags size + = fromInteger ((toInteger (size + base_size) + * toInteger (tick_factor * magic_multiplier)) + `div` 100) + where + tick_factor = simplTickFactor dflags + base_size = 100 magic_multiplier = 40 -- MAGIC NUMBER, multiplies the simplTickFactor -- We can afford to be generous; this is really -- just checking for loops, and shouldn't usually fire -- A figure of 20 was too small: see Trac #553 - env = STE { st_flags = dflags, st_rules = rules - , st_max_ticks = max_ticks - , st_fams = fam_envs } - {-# INLINE thenSmpl #-} {-# INLINE thenSmpl_ #-} {-# INLINE returnSmpl #-} _______________________________________________ Cvs-ghc mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-ghc
