summaryrefslogtreecommitdiff
path: root/compiler/cmm/CmmOpt.hs
diff options
context:
space:
mode:
authorIan Lynagh <igloo@earth.li>2011-11-05 01:23:50 +0000
committerIan Lynagh <igloo@earth.li>2011-11-05 13:46:35 +0000
commit5fc9ac61dfb66537d78ceb01b6e460a8ccfbf4b9 (patch)
tree650d914edd89e2ab260139d6e8a7218a7f186264 /compiler/cmm/CmmOpt.hs
parent676a204efbf97747350c5792953ee4b58ae6f852 (diff)
downloadhaskell-5fc9ac61dfb66537d78ceb01b6e460a8ccfbf4b9.tar.gz
Fix bitrotted NCG_DEBUG code, and switch to using a Haskell conditional
Diffstat (limited to 'compiler/cmm/CmmOpt.hs')
-rw-r--r--compiler/cmm/CmmOpt.hs45
1 files changed, 22 insertions, 23 deletions
diff --git a/compiler/cmm/CmmOpt.hs b/compiler/cmm/CmmOpt.hs
index 5d0e2b247a..97daeeae3b 100644
--- a/compiler/cmm/CmmOpt.hs
+++ b/compiler/cmm/CmmOpt.hs
@@ -24,6 +24,7 @@ module CmmOpt (
#include "HsVersions.h"
import OldCmm
+import OldPprCmm
import CmmNode (wrapRecExp)
import CmmUtils
import CLabel
@@ -31,8 +32,10 @@ import StaticFlags
import UniqFM
import Unique
+import Util
import FastTypes
import Outputable
+import Platform
import BlockId
import Data.Bits
@@ -155,57 +158,53 @@ countUses :: UserOfLocalRegs a => a -> UniqFM Int
countUses a = foldRegsUsed (\m r -> addToUFM m r (count m r + 1)) emptyUFM a
where count m r = lookupWithDefaultUFM m (0::Int) r
-cmmMiniInline :: [CmmBasicBlock] -> [CmmBasicBlock]
-cmmMiniInline blocks = map do_inline blocks
+cmmMiniInline :: Platform -> [CmmBasicBlock] -> [CmmBasicBlock]
+cmmMiniInline platform blocks = map do_inline blocks
where do_inline (BasicBlock id stmts)
- = BasicBlock id (cmmMiniInlineStmts (countUses blocks) stmts)
+ = BasicBlock id (cmmMiniInlineStmts platform (countUses blocks) stmts)
-cmmMiniInlineStmts :: UniqFM Int -> [CmmStmt] -> [CmmStmt]
-cmmMiniInlineStmts uses [] = []
-cmmMiniInlineStmts uses (stmt@(CmmAssign (CmmLocal (LocalReg u _)) expr) : stmts)
+cmmMiniInlineStmts :: Platform -> UniqFM Int -> [CmmStmt] -> [CmmStmt]
+cmmMiniInlineStmts _ uses [] = []
+cmmMiniInlineStmts platform uses (stmt@(CmmAssign (CmmLocal (LocalReg u _)) expr) : stmts)
-- not used: just discard this assignment
| Nothing <- lookupUFM uses u
- = cmmMiniInlineStmts uses stmts
+ = cmmMiniInlineStmts platform uses stmts
-- 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)) $
-#endif
+ ncgDebugTrace ("nativeGen: inlining " ++ showSDoc (pprStmt platform stmt)) $
case lookForInlineLit u expr stmts of
(m, stmts')
- | n == m -> cmmMiniInlineStmts (delFromUFM uses u) stmts'
+ | n == m -> cmmMiniInlineStmts platform (delFromUFM uses u) stmts'
| otherwise ->
- stmt : cmmMiniInlineStmts (adjustUFM (\x -> x - m) uses u) stmts'
+ stmt : cmmMiniInlineStmts platform (adjustUFM (\x -> x - m) uses u) stmts'
-- used (foldable to literal): try to inline at all the use sites
| Just n <- lookupUFM uses u,
e@(CmmLit _) <- wrapRecExp foldExp expr
=
-#ifdef NCG_DEBUG
- trace ("nativeGen: inlining " ++ showSDoc (pprStmt stmt)) $
-#endif
+ ncgDebugTrace ("nativeGen: inlining " ++ showSDoc (pprStmt platform stmt)) $
case lookForInlineLit u e stmts of
(m, stmts')
- | n == m -> cmmMiniInlineStmts (delFromUFM uses u) stmts'
+ | n == m -> cmmMiniInlineStmts platform (delFromUFM uses u) stmts'
| otherwise ->
- stmt : cmmMiniInlineStmts (adjustUFM (\x -> x - m) uses u) stmts'
+ stmt : cmmMiniInlineStmts platform (adjustUFM (\x -> x - m) uses u) stmts'
-- used once (non-literal): try to inline at the use site
| Just 1 <- lookupUFM uses u,
Just stmts' <- lookForInline u expr stmts
=
-#ifdef NCG_DEBUG
- trace ("nativeGen: inlining " ++ showSDoc (pprStmt stmt)) $
-#endif
- cmmMiniInlineStmts uses stmts'
+ ncgDebugTrace ("nativeGen: inlining " ++ showSDoc (pprStmt platform stmt)) $
+ cmmMiniInlineStmts platform uses stmts'
where
foldExp (CmmMachOp op args) = cmmMachOpFold op args
foldExp e = e
-cmmMiniInlineStmts uses (stmt:stmts)
- = stmt : cmmMiniInlineStmts uses stmts
+ ncgDebugTrace str x = if ncgDebugIsOn then trace str x else x
+
+cmmMiniInlineStmts platform uses (stmt:stmts)
+ = stmt : cmmMiniInlineStmts platform uses stmts
-- | Takes a register, a 'CmmLit' expression assigned to that
-- register, and a list of statements. Inlines the expression at all