[commit: ghc] newcg: optimise foldExpDeep (d855955)

Simon Marlow marlowsd at gmail.com
Thu Jan 26 17:02:11 CET 2012


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

On branch  : newcg

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

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

commit d855955d1bcf304f83553994897ab9ec55aaed79
Author: Simon Marlow <marlowsd at gmail.com>
Date:   Wed Jan 25 10:06:12 2012 +0000

    optimise foldExpDeep

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

 compiler/cmm/CmmNode.hs |   11 ++++++++++-
 1 files changed, 10 insertions(+), 1 deletions(-)

diff --git a/compiler/cmm/CmmNode.hs b/compiler/cmm/CmmNode.hs
index 3c3fd89..26bc7a4 100644
--- a/compiler/cmm/CmmNode.hs
+++ b/compiler/cmm/CmmNode.hs
@@ -420,5 +420,14 @@ foldExp f (CmmSwitch e _) z                       = f e z
 foldExp f (CmmCall {cml_target=tgt}) z            = f tgt z
 foldExp f (CmmForeignCall {tgt=tgt, args=args}) z = foldr f (foldExpForeignTarget f tgt z) args
 
+{-# INLINE foldExpDeep #-}
 foldExpDeep :: (CmmExpr -> z -> z) -> CmmNode e x -> z -> z
-foldExpDeep f = foldExp $ wrapRecExpf f
+foldExpDeep f = foldExp go
+  where -- go :: CmmExpr -> z -> z
+        go e@(CmmMachOp _ es) z = gos es $! f e z
+        go e@(CmmLoad addr _) z = go addr $! f e z
+        go e                  z = f e z
+
+        gos [] z = z
+        gos (e:es) z = gos es $! f e z
+





More information about the Cvs-ghc mailing list