[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