-- -----------------------------------------------------------------------------
\begin{code}
+{-# OPTIONS_GHC -w #-}
+-- The above warning supression flag is a temporary kludge.
+-- While working on this module you are encouraged to remove it and fix
+-- any warnings in the module. See
+-- http://hackage.haskell.org/trac/ghc/wiki/WorkingConventions#Warnings
+-- for details
+
module AsmCodeGen ( nativeCodeGen ) where
#include "HsVersions.h"
(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)
Opt_D_dump_asm_coalesce "Reg-Reg moves coalesced"
(vcat $ map ppr coalesced)
+ -- if any of these dump flags are turned on we want to hang on to
+ -- intermediate structures in the allocator - otherwise ditch
+ -- them early so we don't end up creating space leaks.
+ let generateRegAllocStats = or
+ [ dopt Opt_D_dump_asm_regalloc_stages dflags
+ , dopt Opt_D_dump_asm_stats dflags
+ , dopt Opt_D_dump_asm_conflicts dflags ]
+
-- graph coloring register allocation
let ((alloced, regAllocStats), usAlloc)
= initUs usCoalesce
$ Color.regAlloc
+ generateRegAllocStats
alloc_regs
(mkUniqSet [0..maxSpillSlots])
coalesced
+ -- dump out what happened during register allocation
dumpIfSet_dyn dflags
Opt_D_dump_asm_regalloc "Registers allocated"
(vcat $ map (docToSDoc . pprNatCmmTop) alloced)