summaryrefslogtreecommitdiff
path: root/compiler/nativeGen/RegAllocLinear.hs
diff options
context:
space:
mode:
authorBen.Lippmeier@anu.edu.au <unknown>2007-08-24 15:57:32 +0000
committerBen.Lippmeier@anu.edu.au <unknown>2007-08-24 15:57:32 +0000
commitf2033eff4f1f49728f2180e902db32ae9da29b0e (patch)
tree7c780ef69dd130fe1c8ee2787f42811bb4c3b82e /compiler/nativeGen/RegAllocLinear.hs
parentf8c572418898d4c0e703f6d67510c9c37b51cc6e (diff)
downloadhaskell-f2033eff4f1f49728f2180e902db32ae9da29b0e.tar.gz
Add count of reg-reg moves remaining for linear allocator stats
Diffstat (limited to 'compiler/nativeGen/RegAllocLinear.hs')
-rw-r--r--compiler/nativeGen/RegAllocLinear.hs33
1 files changed, 28 insertions, 5 deletions
diff --git a/compiler/nativeGen/RegAllocLinear.hs b/compiler/nativeGen/RegAllocLinear.hs
index d761bae3c0..d72a1696da 100644
--- a/compiler/nativeGen/RegAllocLinear.hs
+++ b/compiler/nativeGen/RegAllocLinear.hs
@@ -99,6 +99,7 @@ import UniqSet
import UniqFM
import UniqSupply
import Outputable
+import State
#ifndef DEBUG
import Data.Maybe ( fromJust )
@@ -1054,10 +1055,29 @@ binSpillReasons reasons
SpillJoinRM r -> (r, [0, 0, 0, 0, 1])) reasons)
+-- | Count reg-reg moves remaining in this code.
+countRegRegMovesNat :: NatCmmTop -> Int
+countRegRegMovesNat cmm
+ = execState (mapGenBlockTopM countBlock cmm) 0
+ where
+ countBlock b@(BasicBlock i instrs)
+ = do instrs' <- mapM countInstr instrs
+ return b
+
+ countInstr instr
+ | Just _ <- isRegRegMove instr
+ = do modify (+ 1)
+ return instr
+
+ | otherwise
+ = return instr
+
+
-- | Pretty print some RegAllocStats
-pprStats :: [RegAllocStats] -> SDoc
-pprStats statss
- = let spills = foldl' (plusUFM_C (zipWith (+)))
+pprStats :: [NatCmmTop] -> [RegAllocStats] -> SDoc
+pprStats code statss
+ = let -- sum up all the instrs inserted by the spiller
+ spills = foldl' (plusUFM_C (zipWith (+)))
emptyUFM
$ map ra_spillInstrs statss
@@ -1065,12 +1085,15 @@ pprStats statss
[0, 0, 0, 0, 0]
$ eltsUFM spills
+ -- count how many reg-reg-moves remain in the code
+ moves = sum $ map countRegRegMovesNat code
+
pprSpill (reg, spills)
= parens $ (hcat $ punctuate (text ", ") (doubleQuotes (ppr reg) : map ppr spills))
in ( text "-- spills-added-total"
- $$ text "-- (allocs, clobbers, loads, joinRR, joinRM)"
- $$ (parens $ (hcat $ punctuate (text ", ") (map ppr spillTotals)))
+ $$ text "-- (allocs, clobbers, loads, joinRR, joinRM, reg_reg_moves_remaining)"
+ $$ (parens $ (hcat $ punctuate (text ", ") (map ppr spillTotals ++ [ppr moves])))
$$ text ""
$$ text "-- spills-added"
$$ text "-- (reg_name, allocs, clobbers, loads, joinRR, joinRM)"