Add {-# OPTIONS_GHC -w #-} and some blurb to all compiler modules
[ghc-hetmet.git] / compiler / nativeGen / RegLiveness.hs
index 8f313ae..737ce5a 100644 (file)
@@ -6,6 +6,12 @@
 --
 -----------------------------------------------------------------------------
 
+{-# 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 RegLiveness (
        RegSet,
@@ -178,9 +184,6 @@ mapGenBlockTopM f (CmmProc header label params blocks)
        return  $ CmmProc header label params blocks'
 
 
-
-
-
 -- | Slurp out the list of register conflicts from this top level thing.
 
 slurpConflicts :: LiveCmmTop -> Bag (UniqSet Reg)
@@ -248,22 +251,25 @@ spillNatBlock :: NatBasicBlock -> NatBasicBlock
 spillNatBlock (BasicBlock i instrs)
  =     BasicBlock i instrs'
  where         (instrs', _)
-               = runState (mapM spillNat instrs) 0
+               = runState (spillNat [] instrs) 0
+
+       spillNat acc []
+        =      return (reverse acc)
 
-       spillNat instr@(DELTA i)
+       spillNat acc (instr@(DELTA i) : instrs)
         = do   put i
-               return instr
+               spillNat acc instrs
 
-       spillNat (SPILL reg slot)
+       spillNat acc (SPILL reg slot : instrs)
         = do   delta   <- get
-               return  $ mkSpillInstr reg delta slot
+               spillNat (mkSpillInstr reg delta slot : acc) instrs
 
-       spillNat (RELOAD slot reg)
+       spillNat acc (RELOAD slot reg : instrs)
         = do   delta   <- get
-               return  $ mkLoadInstr reg delta slot
+               spillNat (mkLoadInstr reg delta slot : acc) instrs
 
-       spillNat instr
-        =      return instr
+       spillNat acc (instr : instrs)
+        =      spillNat (instr : acc) instrs
 
 
 -- | Slurp out a map of how many times each register was live upon entry to an instruction.