Repository : ssh://darcs.haskell.org//srv/darcs/ghc

On branch  : supercompiler

http://hackage.haskell.org/trac/ghc/changeset/de8500160c7c019ce0531aa17dbdafac7d13d334

>---------------------------------------------------------------

commit de8500160c7c019ce0531aa17dbdafac7d13d334
Author: Max Bolingbroke <batterseapo...@hotmail.com>
Date:   Fri Dec 2 15:12:37 2011 +0000

    Claim steps when reducing, ignore deeds for reduce-matching

>---------------------------------------------------------------

 .../supercompile/Supercompile/Drive/Process.hs     |   23 ++++++++++++-------
 .../supercompile/Supercompile/Drive/Process3.hs    |    2 +-
 .../supercompile/Supercompile/Evaluator/Deeds.hs   |    3 ++
 compiler/supercompile/Supercompile/StaticFlags.hs  |    4 +++
 4 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/compiler/supercompile/Supercompile/Drive/Process.hs 
b/compiler/supercompile/Supercompile/Drive/Process.hs
index 951bfed..11b922f 100644
--- a/compiler/supercompile/Supercompile/Drive/Process.hs
+++ b/compiler/supercompile/Supercompile/Drive/Process.hs
@@ -299,15 +299,20 @@ reduce' :: State -> (SCStats, State)
 reduce' orig_state = go (mkLinearHistory rEDUCE_WQO) orig_state
   where
     -- NB: it is important that we ensure that reduce is idempotent if we have 
rollback on. I use this property to improve memoisation.
-    go hist state = -- traceRender ("reduce:step", pPrintFullState state) $
-                    case step state of
-        Nothing -> (mempty, state)
-        Just state' -> case terminate hist state of
-          Continue hist' -> go hist' state'
-          Stop old_state -> pprTrace "reduce-stop" (pPrintFullState False 
old_state $$ pPrintFullState False state) 
-                            -- let smmrse s@(_, _, _, qa) = pPrintFullState s 
$$ case annee qa of Question _ -> text "Question"; Answer _ -> text "Answer" in
-                            -- pprPreview2 "reduce-stop" (smmrse old_state) 
(smmrse state) $
-                            (mempty { stat_reduce_stops = 1 }, if 
rEDUCE_ROLLBACK then old_state else state') -- TODO: generalise?
+    go hist state
+      = -- traceRender ("reduce:step", pPrintFullState state) $
+        case step state of
+          Just (deeds, heap, k, e)
+           | Just deeds' <- if bOUND_STEPS then claimStep deeds else Just deeds
+           , let state' = (deeds', heap, k, e)
+           -> case terminate hist state of
+            Continue hist' -> go hist' state'
+            Stop old_state -> pprTrace "reduce-stop" (pPrintFullState False 
old_state $$ pPrintFullState False state) 
+                              -- let smmrse s@(_, _, _, qa) = pPrintFullState 
s $$ case annee qa of Question _ -> text "Question"; Answer _ -> text "Answer" 
in
+                              -- pprPreview2 "reduce-stop" (smmrse old_state) 
(smmrse state) $
+                              (mempty { stat_reduce_stops = 1 }, if 
rEDUCE_ROLLBACK then old_state else state') -- TODO: generalise?
+          _ -> (mempty, state)
+
 
 
 --
diff --git a/compiler/supercompile/Supercompile/Drive/Process3.hs 
b/compiler/supercompile/Supercompile/Drive/Process3.hs
index e1c1559..07dc19a 100644
--- a/compiler/supercompile/Supercompile/Drive/Process3.hs
+++ b/compiler/supercompile/Supercompile/Drive/Process3.hs
@@ -205,7 +205,7 @@ memo opt state = join $ ScpM $ StateT $ \(ms, hist, fs) ->
                                      ; traceRenderM "<sc" (fun p, PrettyDoc 
(pPrintFullState False state), res)
                                      ; fulfillM p res }, (ms', hist, fs))
                 where (p, ms') = promise (state, reduced_state) ms
-  where reduced_state = reduce state
+  where reduced_state = reduce (case state of (_, h, k, e) -> (maxBound, h, k, 
e)) -- Reduce ignoring deeds for better normalisation
 
 supercompile :: M.Map Var Term -> Term -> Term
 supercompile unfoldings e = fVedTermToTerm $ runScpM $ liftM snd $ sc state
diff --git a/compiler/supercompile/Supercompile/Evaluator/Deeds.hs 
b/compiler/supercompile/Supercompile/Evaluator/Deeds.hs
index 6219502..018785e 100644
--- a/compiler/supercompile/Supercompile/Evaluator/Deeds.hs
+++ b/compiler/supercompile/Supercompile/Evaluator/Deeds.hs
@@ -32,6 +32,9 @@ emptyDeeds = Deeds { sizeLimit = 0, stepLimit = 0 }
 plusDeeds :: Deeds -> Deeds -> Deeds
 plusDeeds d1 d2 = d1 `seq` d2 `seq` Deeds { sizeLimit = sizeLimit d1 + 
sizeLimit d2, stepLimit = stepLimit d1 + stepLimit d2 }
 
+claimStep :: Deeds -> Maybe Deeds
+claimStep deeds = guard (stepLimit deeds > 0) >> return (deeds { stepLimit = 
stepLimit deeds - 1 })
+
 -- NB: it is OK if the number of deeds to claim is negative -- that just 
causes some deeds to be released
 claimDeeds :: Deeds -> Int -> Maybe Deeds
 claimDeeds deeds want = guard (not dEEDS || sizeLimit deeds >= want) >> return 
(deeds { sizeLimit = sizeLimit deeds - want })
diff --git a/compiler/supercompile/Supercompile/StaticFlags.hs 
b/compiler/supercompile/Supercompile/StaticFlags.hs
index b37f342..1512921 100644
--- a/compiler/supercompile/Supercompile/StaticFlags.hs
+++ b/compiler/supercompile/Supercompile/StaticFlags.hs
@@ -21,6 +21,10 @@ dEEDS :: Bool
 dEEDS = "--deeds" `elem` aRGS
 --dEEDS = True
 
+bOUND_STEPS :: Bool
+bOUND_STEPS = "--bound-steps" `elem` aRGS
+--bOUND_STEPS = True
+
 data DeedsPolicy = FCFS | Proportional
                  deriving (Read)
 



_______________________________________________
Cvs-ghc mailing list
Cvs-ghc@haskell.org
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to