Add count of reg-reg moves remaining for linear allocator stats
authorBen.Lippmeier@anu.edu.au <unknown>
Fri, 24 Aug 2007 15:57:32 +0000 (15:57 +0000)
committerBen.Lippmeier@anu.edu.au <unknown>
Fri, 24 Aug 2007 15:57:32 +0000 (15:57 +0000)
compiler/nativeGen/AsmCodeGen.lhs
compiler/nativeGen/RegAllocLinear.hs

index 38c28b4..be64428 100644 (file)
@@ -151,7 +151,7 @@ nativeCodeGen dflags cmms us
        (case catMaybes mLinearStats of
                []      -> return ()
                stats   -> dumpSDoc dflags Opt_D_dump_asm_stats "NCG stats"
-                               $ Linear.pprStats (concat stats))
+                               $ Linear.pprStats (concat native) (concat stats))
 
        return  $ makeAsmDoc (concat native) (concat imports)
 
index d761bae..d72a169 100644 (file)
@@ -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)"