Same questions here.. Does this patch affect the new codegen path that Edward has been working on?
If not, do we need something similar in the new path? If the new path already has something similar (which I'm guessing it might), do we have a regression test that will show up whether or not it's working? Simon -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Simon Marlow Sent: 01 June 2011 10:57 To: [email protected] Subject: [commit: ghc] master: Fold constants during forward substitution in the Cmm mini-inliner (e97f298) Repository : ssh://darcs.haskell.org//srv/darcs/ghc On branch : master http://hackage.haskell.org/trac/ghc/changeset/e97f29804abdbf9b374aeb3661af340714ea1b60 >--------------------------------------------------------------- commit e97f29804abdbf9b374aeb3661af340714ea1b60 Author: Johan Tibell <[email protected]> Date: Fri May 6 17:10:15 2011 +0200 Fold constants during forward substitution in the Cmm mini-inliner This exposes new constants that can be propagated. >--------------------------------------------------------------- compiler/cmm/CmmOpt.hs | 25 +++++++++++++++++-------- 1 files changed, 17 insertions(+), 8 deletions(-) diff --git a/compiler/cmm/CmmOpt.hs b/compiler/cmm/CmmOpt.hs index 1355cd2..69df4fb 100644 --- a/compiler/cmm/CmmOpt.hs +++ b/compiler/cmm/CmmOpt.hs @@ -160,13 +160,13 @@ cmmMiniInline blocks = map do_inline blocks cmmMiniInlineStmts :: UniqFM Int -> [CmmStmt] -> [CmmStmt] cmmMiniInlineStmts uses [] = [] -cmmMiniInlineStmts uses (stmt@(CmmAssign (CmmLocal (LocalReg u _)) expr@(CmmLit _)) : stmts) +cmmMiniInlineStmts uses (stmt@(CmmAssign (CmmLocal (LocalReg u _)) expr) : stmts) -- not used: just discard this assignment | Nothing <- lookupUFM uses u = cmmMiniInlineStmts uses stmts - -- used: try to inline at all the use sites - | Just n <- lookupUFM uses u + -- used (literal): try to inline at all the use sites + | Just n <- lookupUFM uses u, isLit expr = #ifdef NCG_DEBUG trace ("nativeGen: inlining " ++ showSDoc (pprStmt stmt)) $ @@ -177,12 +177,21 @@ cmmMiniInlineStmts uses (stmt@(CmmAssign (CmmLocal (LocalReg u _)) expr@(CmmLit | otherwise -> stmt : cmmMiniInlineStmts (adjustUFM (\x -> x - m) uses u) stmts' -cmmMiniInlineStmts uses (stmt@(CmmAssign (CmmLocal (LocalReg u _)) expr : stmts)) - -- not used at all: just discard this assignment - | Nothing <- lookupUFM uses u - = cmmMiniInlineStmts uses stmts + -- used (foldable to literal): try to inline at all the use sites + | Just n <- lookupUFM uses u, + CmmMachOp op es <- expr, + e@(CmmLit _) <- cmmMachOpFold op es + = +#ifdef NCG_DEBUG + trace ("nativeGen: inlining " ++ showSDoc (pprStmt stmt)) $ +#endif + case lookForInlineLit u e stmts of + (m, stmts') + | n == m -> cmmMiniInlineStmts (delFromUFM uses u) stmts' + | otherwise -> + stmt : cmmMiniInlineStmts (adjustUFM (\x -> x - m) uses u) stmts' - -- used once: try to inline at the use site + -- used once (non-literal): try to inline at the use site | Just 1 <- lookupUFM uses u, Just stmts' <- lookForInline u expr stmts = _______________________________________________ Cvs-ghc mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-ghc _______________________________________________ Cvs-ghc mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-ghc
