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

On branch  : supercompiler

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

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

commit d7cf9dbf5e982f97297ffdb0c36587407a41b6b2
Author: Max Bolingbroke <batterseapo...@hotmail.com>
Date:   Thu Oct 6 07:41:18 2011 +0100

    Eliminate trivial CastIt frames as well

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

 .../Supercompile/Evaluator/Evaluate.hs             |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/compiler/supercompile/Supercompile/Evaluator/Evaluate.hs 
b/compiler/supercompile/Supercompile/Evaluator/Evaluate.hs
index feae8f0..01a6ce9 100644
--- a/compiler/supercompile/Supercompile/Evaluator/Evaluate.hs
+++ b/compiler/supercompile/Supercompile/Evaluator/Evaluate.hs
@@ -17,7 +17,7 @@ import qualified Data.Map as M
 
 import qualified CoreSyn as CoreSyn
 import CoreUnfold (exprIsConApp_maybe)
-import Coercion (liftCoSubstWith, coercionKind)
+import Coercion (liftCoSubstWith, coercionKind, isReflCo)
 import TyCon
 import Type
 import PrelRules
@@ -126,7 +126,10 @@ step' normalising ei_state =
           | otherwise    -> pprPanic "step': nullary primops unsupported" (ppr 
pop)
         Case e x ty alts -> go (deeds, Heap h ids', Tagged tg (Scrutinise x' 
(renameType ids rn ty) (rn', alts))                 : k, (rn, e))
           where (ids', rn', x') = renameNonRecBinder ids rn x
-        Cast e co        -> go (deeds, heap,        Tagged tg (CastIt 
(renameCoercion ids rn co))                                : k, (rn, e))
+        Cast e co        
+          | isReflCo co' -> go (deeds, heap,                                   
                                                    k, (rn, e))
+          | otherwise    -> go (deeds, heap,        Tagged tg (CastIt co')     
                                                  : k, (rn, e))
+          where co' = renameCoercion ids rn co
         Let x e1 e2
           | isUnLiftedType (idType x) -> go (deeds,     Heap h                 
                      ids', Tagged tg (StrictLet x' (rn', e2)) : k, in_e1)
           | otherwise                 -> go (deeds + 1, Heap (M.insert x' 
(internallyBound in_e1) h) ids',                                      k, (rn', 
e2))



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

Reply via email to