From: Simon Marlow Date: Thu, 20 Dec 2007 15:17:34 +0000 (+0000) Subject: Add dead code elimination in cmmMiniInline X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=ae72991e2f0343c075a30c0a5a7d4ac18e9ef500;hp=55030d7a875891de3ae2ccf4673711d1eae090ce Add dead code elimination in cmmMiniInline cmmMiniInline counts the uses of local variables, so it can easily eliminate assigments to unused locals. This almost never gets triggered, as we don't generate any dead assignments, but it will be needed by a forthcoming cleanup in CgUtils.emitSwitch. --- diff --git a/compiler/cmm/CmmOpt.hs b/compiler/cmm/CmmOpt.hs index 379d7a2..b96aa4a 100644 --- a/compiler/cmm/CmmOpt.hs +++ b/compiler/cmm/CmmOpt.hs @@ -102,6 +102,11 @@ cmmMiniInline blocks = map do_inline blocks cmmMiniInlineStmts :: UniqFM Int -> [CmmStmt] -> [CmmStmt] cmmMiniInlineStmts uses [] = [] 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 once: try to inline at the use site | Just 1 <- lookupUFM uses u, Just stmts' <- lookForInline u expr stmts =