Remove "fuel", adapt to Hoopl changes, fix warnings
authorSimon Marlow <marlowsd@gmail.com>
Thu, 5 Jul 2012 12:23:21 +0000 (13:23 +0100)
committerSimon Marlow <marlowsd@gmail.com>
Thu, 5 Jul 2012 12:23:21 +0000 (13:23 +0100)
27 files changed:
compiler/cmm/BlockId.hs
compiler/cmm/Cmm.hs
compiler/cmm/CmmBuildInfoTables.hs
compiler/cmm/CmmCallConv.hs
compiler/cmm/CmmCommonBlockElim.hs
compiler/cmm/CmmContFlowOpt.hs
compiler/cmm/CmmExpr.hs
compiler/cmm/CmmLayoutStack.hs
compiler/cmm/CmmLint.hs
compiler/cmm/CmmLive.hs
compiler/cmm/CmmNode.hs
compiler/cmm/CmmPipeline.hs
compiler/cmm/CmmProcPoint.hs
compiler/cmm/CmmRewriteAssignments.hs
compiler/cmm/CmmStackLayout.hs
compiler/cmm/CmmUtils.hs
compiler/cmm/Hoopl.hs
compiler/cmm/Hoopl/Dataflow.hs
compiler/cmm/MkGraph.hs
compiler/cmm/OldCmm.hs
compiler/cmm/OldPprCmm.hs
compiler/cmm/OptimizationFuel.hs [deleted file]
compiler/codeGen/StgCmmExpr.hs
compiler/ghc.cabal.in
compiler/main/CodeOutput.lhs
compiler/main/HscMain.hs
compiler/main/HscTypes.lhs

index d5a8e04..4aedcb7 100644 (file)
@@ -15,7 +15,7 @@ import Outputable
 import Unique
 
 import Compiler.Hoopl as Hoopl hiding (Unique)
-import Compiler.Hoopl.GHC (uniqueToInt, uniqueToLbl, lblToUnique)
+import Compiler.Hoopl.Internals (uniqueToLbl)
 
 ----------------------------------------------------------------
 --- Block Ids, their environments, and their sets
index d70fd8c..1c77409 100644 (file)
@@ -32,9 +32,9 @@ module Cmm (
 import CLabel
 import BlockId
 import CmmNode
-import OptimizationFuel as F
 import SMRep
 import CmmExpr
+import UniqSupply
 import Compiler.Hoopl
 
 import Data.Word        ( Word8 )
@@ -93,9 +93,9 @@ data GenCmmGraph n = CmmGraph { g_entry :: BlockId, g_graph :: Graph n C C }
 type CmmBlock = Block CmmNode C C
 
 type CmmReplGraph e x = GenCmmReplGraph CmmNode e x
-type GenCmmReplGraph n e x = FuelUniqSM (Maybe (Graph n e x))
-type CmmFwdRewrite f = FwdRewrite FuelUniqSM CmmNode f
-type CmmBwdRewrite f = BwdRewrite FuelUniqSM CmmNode f
+type GenCmmReplGraph n e x = UniqSM (Maybe (Graph n e x))
+type CmmFwdRewrite f = FwdRewrite UniqSM CmmNode f
+type CmmBwdRewrite f = BwdRewrite UniqSM CmmNode f
 
 -----------------------------------------------------------------------------
 --     Info Tables
index cd618bd..ebe7552 100644 (file)
@@ -38,7 +38,6 @@ import IdInfo
 import Data.List
 import Maybes
 import Name
-import OptimizationFuel
 import Outputable
 import SMRep
 import UniqSupply
@@ -149,7 +148,7 @@ srtToData srt = [CmmData RelocatableReadOnlyData (Statics (lbl srt) tbl)]
 -- we make sure they're all close enough to the bottom of the table that the
 -- bitmap will be able to cover all of them.
 buildSRTs :: TopSRT -> Map CLabel CAFSet -> CAFSet ->
-             FuelUniqSM (TopSRT, Maybe CmmDecl, C_SRT)
+             UniqSM (TopSRT, Maybe CmmDecl, C_SRT)
 buildSRTs topSRT topCAFMap cafs =
   do let liftCAF lbl z = -- get CAFs for functions without static closures
            case Map.lookup lbl topCAFMap of Just cafs -> z `Set.union` cafs
@@ -192,7 +191,7 @@ buildSRTs topSRT topCAFMap cafs =
 -- Construct an SRT bitmap.
 -- Adapted from simpleStg/SRT.lhs, which expects Id's.
 procpointSRT :: CLabel -> Map CLabel Int -> [CLabel] ->
-                FuelUniqSM (Maybe CmmDecl, C_SRT)
+                UniqSM (Maybe CmmDecl, C_SRT)
 procpointSRT _ _ [] =
  return (Nothing, NoC_SRT)
 procpointSRT top_srt top_table entries =
@@ -210,7 +209,7 @@ maxBmpSize :: Int
 maxBmpSize = widthInBits wordWidth `div` 2
 
 -- Adapted from codeGen/StgCmmUtils, which converts from SRT to C_SRT.
-to_SRT :: CLabel -> Int -> Int -> Bitmap -> FuelUniqSM (Maybe CmmDecl, C_SRT)
+to_SRT :: CLabel -> Int -> Int -> Bitmap -> UniqSM (Maybe CmmDecl, C_SRT)
 to_SRT top_srt off len bmp
   | len > maxBmpSize || bmp == [fromIntegral srt_escape]
   = do id <- getUniqueM
@@ -276,12 +275,12 @@ bundleCAFs _ t = (Set.empty, t)
 
 -- Construct the SRTs for the given procedure.
 setInfoTableSRT :: Map CLabel CAFSet -> TopSRT -> (CAFSet, CmmDecl) ->
-                   FuelUniqSM (TopSRT, [CmmDecl])
+                   UniqSM (TopSRT, [CmmDecl])
 setInfoTableSRT topCAFMap topSRT (cafs, t) =
   setSRT cafs topCAFMap topSRT t
 
 setSRT :: CAFSet -> Map CLabel CAFSet -> TopSRT ->
-          CmmDecl -> FuelUniqSM (TopSRT, [CmmDecl])
+          CmmDecl -> UniqSM (TopSRT, [CmmDecl])
 setSRT cafs topCAFMap topSRT t =
   do (topSRT, cafTable, srt) <- buildSRTs topSRT topCAFMap cafs
      let t' = updInfo id (const srt) t
index d3d9ba4..484e89c 100644 (file)
@@ -53,7 +53,6 @@ assignArgumentsPos conv arg_ty reps = assignments
                ([_], PrimOpReturn)     -> allRegs
                (_,   PrimOpReturn)     -> getRegsWithNode
                (_,   Slow)             -> noRegs
-               _ -> pprPanic "Unknown calling convention" (ppr conv)
       -- The calling conventions first assign arguments to registers,
       -- then switch to the stack when we first run out of registers
       -- (even if there are still available registers for args of a different type).
index 4df7304..eafa2a0 100644 (file)
@@ -20,7 +20,6 @@ import Hoopl hiding (ChangeFlag)
 import Data.Bits
 import qualified Data.List as List
 import Data.Word
-import FastString
 import Outputable
 import UniqFM
 
@@ -95,7 +94,7 @@ hash_block block =
         hash_lst m h = hash_node m + h `shiftL` 1
 
         hash_node :: CmmNode O x -> Word32
-        hash_node (CmmComment (FastString u _ _ _ _)) = 0 -- don't care
+        hash_node (CmmComment _) = 0 -- don't care
         hash_node (CmmAssign r e) = hash_reg r + hash_e e
         hash_node (CmmStore e e') = hash_e e + hash_e e'
         hash_node (CmmUnsafeForeignCall t _ as) = hash_tgt t + hash_list hash_e as
@@ -148,7 +147,7 @@ lookupBid subst bid = case mapLookup bid subst of
 --
 eqMiddleWith :: (BlockId -> BlockId -> Bool)
              -> CmmNode O O -> CmmNode O O -> Bool
-eqMiddleWith eqBid (CmmComment _) (CmmComment _) = True
+eqMiddleWith _ (CmmComment _) (CmmComment _) = True
 eqMiddleWith eqBid (CmmAssign r1 e1) (CmmAssign r2 e2)
   = r1 == r2 && eqExprWith eqBid e1 e2
 eqMiddleWith eqBid (CmmStore l1 r1) (CmmStore l2 r2)
index 36e7b8e..3fabf33 100644 (file)
@@ -97,7 +97,7 @@ blockConcat g@CmmGraph { g_entry = entry_id }
      maybe_concat :: CmmBlock
                   -> (BlockEnv CmmBlock, BlockEnv BlockId)
                   -> (BlockEnv CmmBlock, BlockEnv BlockId)
-     maybe_concat block unchanged@(blocks, shortcut_map)
+     maybe_concat block (blocks, shortcut_map)
         | CmmBranch b' <- last
         , Just blk' <- mapLookup b' blocks
         , shouldConcatWith b' blk'
index 939d4b7..646ecb5 100644 (file)
@@ -32,7 +32,6 @@ import BlockId
 import CLabel
 import Unique
 
-import Data.Map (Map)
 import Data.Set (Set)
 import qualified Data.Set as Set
 
index 573ce0e..f0dce4a 100644 (file)
@@ -17,7 +17,6 @@ import CmmLive
 import CmmProcPoint
 import SMRep
 import Hoopl hiding ((<*>), mkLast, mkMiddle)
-import OptimizationFuel
 import Constants
 import UniqSupply
 import Maybes
@@ -105,7 +104,7 @@ instance Outputable StackMap where
 
 
 cmmLayoutStack :: ProcPointSet -> ByteOff -> CmmGraph
-               -> FuelUniqSM (CmmGraph, BlockEnv StackMap)
+               -> UniqSM (CmmGraph, BlockEnv StackMap)
 cmmLayoutStack procpoints entry_args
                graph0@(CmmGraph { g_entry = entry })
   = do
@@ -114,12 +113,12 @@ cmmLayoutStack procpoints entry_args
     pprTrace "liveness" (ppr liveness) $ return ()
     let blocks = postorderDfs graph
 
-    (final_stackmaps, final_high_sp, new_blocks) <- liftUniq $
+    (final_stackmaps, final_high_sp, new_blocks) <-
           mfix $ \ ~(rec_stackmaps, rec_high_sp, _new_blocks) ->
             layout procpoints liveness entry entry_args
                    rec_stackmaps rec_high_sp blocks
 
-    new_blocks' <- liftUniq $ mapM lowerSafeForeignCall new_blocks
+    new_blocks' <- mapM lowerSafeForeignCall new_blocks
 
     pprTrace ("Sp HWM") (ppr final_high_sp) $
        return (ofBlockList entry new_blocks', final_stackmaps)
@@ -248,7 +247,7 @@ collectContInfo blocks
 -- Updating the StackMap from middle nodes
 
 -- Look for loads from stack slots, and update the StackMap.  This is
--- purelyu for optimisation reasons, so that we can avoid saving a
+-- purely for optimisation reasons, so that we can avoid saving a
 -- variable back to a different stack slot if it is already on the
 -- stack.
 --
@@ -361,6 +360,7 @@ handleLastNode procpoints liveness cont_info stackmaps
            = setupStackFrame lbl liveness cml_ret_off cml_ret_args stack0
 
 
+     -- For other last nodes (branches), if any of the targets is a
      -- proc point, we have to set up the stack to match what the proc
      -- point is expecting.
      --
@@ -701,7 +701,7 @@ manifestSp stackmaps stack0 sp0 sp_high
 
     final_block   = blockJoin first final_middle final_last
 
-    fixup_blocks' = map (blockMapNodes3 (id, adj_post_sp, id)) fixup_blocks
+    fixup_blocks' = map (mapBlock3' (id, adj_post_sp, id)) fixup_blocks
 
 
 getAreaOff :: BlockEnv StackMap -> (Area -> StackLoc)
@@ -982,7 +982,7 @@ stackSlotRegs sm = eltsUFM (sm_regs sm)
 -- *but*, that will invalidate the liveness analysis, and we'll have
 -- to re-do it.
 
-cmmSink :: CmmGraph -> FuelUniqSM CmmGraph
+cmmSink :: CmmGraph -> UniqSM CmmGraph
 cmmSink graph = do
   let liveness = cmmLiveness graph
   return $ cmmSink' liveness graph
index fd0659b..2e24dd7 100644 (file)
@@ -16,7 +16,6 @@ import CmmUtils
 import PprCmm ()
 import BlockId
 import FastString
-import CLabel
 import Outputable
 import Constants
 
index ac9c38b..f0163fe 100644 (file)
@@ -11,11 +11,10 @@ module CmmLive
     )
 where
 
+import UniqSupply
 import BlockId
 import Cmm
 import CmmUtils
-import Control.Monad
-import OptimizationFuel
 import PprCmmExpr ()
 
 import Hoopl
@@ -81,7 +80,7 @@ xferLive = mkBTransfer3 fst mid lst
 -- Removing assignments to dead variables
 -----------------------------------------------------------------------------
 
-removeDeadAssignments :: CmmGraph -> FuelUniqSM (CmmGraph, BlockEnv CmmLive)
+removeDeadAssignments :: CmmGraph -> UniqSM (CmmGraph, BlockEnv CmmLive)
 removeDeadAssignments g =
    dataflowPassBwd g [] $ analRewBwd liveLattice xferLive rewrites
    where rewrites = mkBRewrite3 nothing middle nothing
index cd46794..9e75387 100644 (file)
@@ -400,5 +400,5 @@ mapSuccessors :: (Label -> Label) -> CmmNode O C -> CmmNode O C
 mapSuccessors f (CmmBranch bid)        = CmmBranch (f bid)
 mapSuccessors f (CmmCondBranch p y n)  = CmmCondBranch p (f y) (f n)
 mapSuccessors f (CmmSwitch e arms)     = CmmSwitch e (map (fmap f) arms)
-mapSuccessors f n = n
+mapSuccessors _ n = n
 
index 296204b..bb8d5b2 100644 (file)
@@ -16,9 +16,9 @@ import CmmBuildInfoTables
 import CmmCommonBlockElim
 import CmmProcPoint
 import CmmContFlowOpt
-import OptimizationFuel
 import CmmLayoutStack
 
+import UniqSupply
 import DynFlags
 import ErrUtils
 import HscTypes
@@ -65,7 +65,7 @@ cmmPipeline hsc_env topSRT prog =
      let topCAFEnv = {-# SCC "topCAFEnv" #-} mkTopCAFInfo (concat cafEnvs)
 
      -- folding over the groups
-     (topSRT, tops) <- {-# SCC "toTops" #-} foldM (toTops hsc_env topCAFEnv) (topSRT, []) tops
+     (topSRT, tops) <- {-# SCC "toTops" #-} foldM (toTops topCAFEnv) (topSRT, []) tops
 
      let cmms :: CmmGroup
          cmms = reverse (concat tops)
@@ -101,17 +101,17 @@ cpsTop hsc_env (CmmProc h@(TopInfo {stack_info=StackInfo {arg_space=entry_off}})
 
        ----------- Proc points -------------------
        let callPPs = {-# SCC "callProcPoints" #-} callProcPoints g
-       procPoints <- {-# SCC "minimalProcPointSet" #-} run $
+       procPoints <- {-# SCC "minimalProcPointSet" #-} runUniqSM $
                      minimalProcPointSet (targetPlatform dflags) callPPs g
 
        ----------- Layout the stack and manifest Sp ---------------
        -- (also does: removeDeadAssignments, and lowerSafeForeignCalls)
        (g, stackmaps) <- {-# SCC "layoutStack" #-}
-                         run $ cmmLayoutStack procPoints entry_off g
+                         runUniqSM $ cmmLayoutStack procPoints entry_off g
        dump Opt_D_dump_cmmz_sp "Layout Stack" g
 
-       g <- {-# SCC "sink" #-} run $ cmmSink g
-       dump Opt_D_dump_cmmz_rewrite "Sink assignments" g
+--       g <- {-# SCC "sink" #-} runUniqSM $ cmmSink g
+--       dump Opt_D_dump_cmmz_rewrite "Sink assignments" g
 
 --       ----------- Sink and inline assignments -------------------
 --       g <- {-# SCC "rewriteAssignments" #-} runOptimization $
@@ -119,10 +119,10 @@ cpsTop hsc_env (CmmProc h@(TopInfo {stack_info=StackInfo {arg_space=entry_off}})
 --       dump Opt_D_dump_cmmz_rewrite "Post rewrite assignments" g
 
        ------------- Split into separate procedures ------------
-       procPointMap  <- {-# SCC "procPointAnalysis" #-} run $
+       procPointMap  <- {-# SCC "procPointAnalysis" #-} runUniqSM $
                         procPointAnalysis procPoints g
        dumpWith dflags Opt_D_dump_cmmz_procmap "procpoint map" procPointMap
-       gs <- {-# SCC "splitAtProcPoints" #-} run $
+       gs <- {-# SCC "splitAtProcPoints" #-} runUniqSM $
              splitAtProcPoints l callPPs procPoints procPointMap (CmmProc h l g)
        dumps Opt_D_dump_cmmz_split "Post splitting" gs
 
@@ -156,8 +156,10 @@ cpsTop hsc_env (CmmProc h@(TopInfo {stack_info=StackInfo {arg_space=entry_off}})
         dumps flag name
            = mapM_ (dumpWith dflags flag name)
 
-        -- Runs a required transformation/analysis
-        run = runInfiniteFuelIO (hsc_OptFuel hsc_env)
+runUniqSM :: UniqSM a -> IO a
+runUniqSM m = do
+  us <- mkSplitUniqSupply 'u'
+  return (initUs_ us m)
 
 
 dumpGraph :: DynFlags -> DynFlag -> String -> CmmGraph -> IO ()
@@ -183,11 +185,11 @@ dumpWith dflags flag txt g = do
 -- This probably belongs in CmmBuildInfoTables?
 -- We're just finishing the job here: once we know what CAFs are defined
 -- in non-static closures, we can build the SRTs.
-toTops :: HscEnv -> Map CLabel CAFSet -> (TopSRT, [[CmmDecl]])
-                 -> [(CAFSet, CmmDecl)] -> IO (TopSRT, [[CmmDecl]])
-toTops hsc_env topCAFEnv (topSRT, tops) gs =
+toTops :: Map CLabel CAFSet -> (TopSRT, [[CmmDecl]])
+       -> [(CAFSet, CmmDecl)] -> IO (TopSRT, [[CmmDecl]])
+toTops topCAFEnv (topSRT, tops) gs =
   do let setSRT (topSRT, rst) g =
            do (topSRT, gs) <- setInfoTableSRT topCAFEnv topSRT g
               return (topSRT, gs : rst)
-     (topSRT, gs') <- runFuelIO (hsc_OptFuel hsc_env) $ foldM setSRT (topSRT, []) gs
+     (topSRT, gs') <- runUniqSM $ foldM setSRT (topSRT, []) gs
      return (topSRT, concat gs' : tops)
index 8dda51b..6eb9266 100644 (file)
@@ -13,19 +13,14 @@ import Prelude hiding (last, unzip, succ, zip)
 import BlockId
 import CLabel
 import Cmm
+import PprCmm ()
 import CmmUtils
-import CmmContFlowOpt
 import CmmInfo
-import CmmLive
-import Constants
 import Data.List (sortBy)
 import Maybes
-import MkGraph
 import Control.Monad
-import OptimizationFuel
 import Outputable
 import Platform
-import UniqSet
 import UniqSupply
 
 import Hoopl
@@ -106,7 +101,7 @@ instance Outputable Status where
 --------------------------------------------------
 -- Proc point analysis
 
-procPointAnalysis :: ProcPointSet -> CmmGraph -> FuelUniqSM (BlockEnv Status)
+procPointAnalysis :: ProcPointSet -> CmmGraph -> UniqSM (BlockEnv Status)
 -- Once you know what the proc-points are, figure out
 -- what proc-points each block is reachable from
 procPointAnalysis procPoints g =
@@ -156,13 +151,13 @@ callProcPoints g = foldGraphBlocks add (setSingleton (g_entry g)) g
                       _ -> set
 
 minimalProcPointSet :: Platform -> ProcPointSet -> CmmGraph
-                    -> FuelUniqSM ProcPointSet
+                    -> UniqSM ProcPointSet
 -- Given the set of successors of calls (which must be proc-points)
 -- figure out the minimal set of necessary proc-points
 minimalProcPointSet platform callProcPoints g
   = extendPPSet platform g (postorderDfs g) callProcPoints
 
-extendPPSet :: Platform -> CmmGraph -> [CmmBlock] -> ProcPointSet -> FuelUniqSM ProcPointSet
+extendPPSet :: Platform -> CmmGraph -> [CmmBlock] -> ProcPointSet -> UniqSM ProcPointSet
 extendPPSet platform g blocks procPoints =
     do env <- procPointAnalysis procPoints g
        -- pprTrace "extensPPSet" (ppr env) $ return ()
@@ -212,10 +207,9 @@ extendPPSet platform g blocks procPoints =
 -- ToDo: use the _ret naming convention that the old code generator
 -- used. -- EZY
 splitAtProcPoints :: CLabel -> ProcPointSet-> ProcPointSet -> BlockEnv Status ->
-                     CmmDecl -> FuelUniqSM [CmmDecl]
+                     CmmDecl -> UniqSM [CmmDecl]
 splitAtProcPoints entry_label callPPs procPoints procMap
-                  (CmmProc (TopInfo {info_tbl=info_tbl,
-                                     stack_info=stack_info})
+                  (CmmProc (TopInfo {info_tbl=info_tbl})
                            top_l g@(CmmGraph {g_entry=entry})) =
   do -- Build a map from procpoints to the blocks they reach
      let addBlock b graphEnv =
index 2c33b7b..cf349a0 100644 (file)
@@ -18,10 +18,9 @@ module CmmRewriteAssignments
 import Cmm
 import CmmUtils
 import CmmOpt
-import OptimizationFuel
 import StgCmmUtils
 
-import Control.Monad
+import UniqSupply
 import Platform
 import UniqFM
 import Unique
@@ -29,12 +28,13 @@ import BlockId
 
 import Hoopl
 import Data.Maybe
+import Control.Monad
 import Prelude hiding (succ, zip)
 
 ----------------------------------------------------------------
 --- Main function
 
-rewriteAssignments :: Platform -> CmmGraph -> FuelUniqSM CmmGraph
+rewriteAssignments :: Platform -> CmmGraph -> UniqSM CmmGraph
 rewriteAssignments platform g = do
   -- Because we need to act on forwards and backwards information, we
   -- first perform usage analysis and bake this information into the
@@ -213,7 +213,7 @@ usageTransfer = mkBTransfer3 first middle last
           increaseUsage f r = addToUFM_C combine f r SingleUse
             where combine _ _ = ManyUse
 
-usageRewrite :: BwdRewrite FuelUniqSM (WithRegUsage CmmNode) UsageMap
+usageRewrite :: BwdRewrite UniqSM (WithRegUsage CmmNode) UsageMap
 usageRewrite = mkBRewrite3 first middle last
     where first  _ _ = return Nothing
           middle :: Monad m => WithRegUsage CmmNode O O -> UsageMap -> m (Maybe (Graph (WithRegUsage CmmNode) O O))
@@ -226,7 +226,7 @@ usageRewrite = mkBRewrite3 first middle last
           last   _ _ = return Nothing
 
 type CmmGraphWithRegUsage = GenCmmGraph (WithRegUsage CmmNode)
-annotateUsage :: CmmGraph -> FuelUniqSM (CmmGraphWithRegUsage)
+annotateUsage :: CmmGraph -> UniqSM (CmmGraphWithRegUsage)
 annotateUsage vanilla_g =
     let g = modifyGraph liftRegUsage vanilla_g
     in liftM fst $ dataflowPassBwd g [(g_entry g, fact_bot usageLattice)] $
@@ -524,7 +524,7 @@ assignmentTransfer = mkFTransfer3 (flip const) middleAssignment ((mkFactBase ass
 -- values from the assignment map, due to reassignment of the local
 -- register.)  This is probably not locally sound.
 
-assignmentRewrite :: FwdRewrite FuelUniqSM (WithRegUsage CmmNode) AssignmentMap
+assignmentRewrite :: FwdRewrite UniqSM (WithRegUsage CmmNode) AssignmentMap
 assignmentRewrite = mkFRewrite3 first middle last
     where
         first _ _ = return Nothing
@@ -605,7 +605,7 @@ assignmentRewrite = mkFRewrite3 first middle last
 -- in literals, which we can inline more aggressively, and inlining
 -- gives us opportunities for more folding.  However, we don't need any
 -- facts to do MachOp folding.
-machOpFoldRewrite :: Platform -> FwdRewrite FuelUniqSM (WithRegUsage CmmNode) a
+machOpFoldRewrite :: Platform -> FwdRewrite UniqSM (WithRegUsage CmmNode) a
 machOpFoldRewrite platform = mkFRewrite3 first middle last
   where first _ _ = return Nothing
         middle :: WithRegUsage CmmNode O O -> a -> GenCmmReplGraph (WithRegUsage CmmNode) O O
index c7fedad..726f98e 100644 (file)
@@ -35,7 +35,6 @@ import CmmProcPoint
 import Maybes
 import MkGraph (stackStubExpr)
 import Control.Monad
-import OptimizationFuel
 import Outputable
 import SMRep (ByteOff)
 
index d831a8a..f2e4d8e 100644 (file)
@@ -80,7 +80,6 @@ import Cmm
 import BlockId
 import CLabel
 import Outputable
-import OptimizationFuel as F
 import Unique
 import UniqSupply
 import Constants( wORD_SIZE, tAG_MASK )
@@ -89,7 +88,6 @@ import Util
 import Data.Word
 import Data.Maybe
 import Data.Bits
-import Control.Monad
 import Hoopl
 
 ---------------------------------------------------
@@ -431,10 +429,10 @@ mapGraphNodes :: ( CmmNode C O -> CmmNode C O
                  , CmmNode O C -> CmmNode O C)
               -> CmmGraph -> CmmGraph
 mapGraphNodes funs@(mf,_,_) g =
-  ofBlockMap (entryLabel $ mf $ CmmEntry $ g_entry g) $ mapMap (blockMapNodes3 funs) $ toBlockMap g
+  ofBlockMap (entryLabel $ mf $ CmmEntry $ g_entry g) $ mapMap (mapBlock3' funs) $ toBlockMap g
 
 mapGraphNodes1 :: (forall e x. CmmNode e x -> CmmNode e x) -> CmmGraph -> CmmGraph
-mapGraphNodes1 f g = modifyGraph (graphMapBlocks (blockMapNodes f)) g
+mapGraphNodes1 f = modifyGraph (mapGraph f)
 
 
 foldGraphBlocks :: (CmmBlock -> a -> a) -> a -> CmmGraph -> a
@@ -447,21 +445,21 @@ postorderDfs g = {-# SCC "postorderDfs" #-} postorder_dfs_from (toBlockMap g) (g
 -- Running dataflow analysis and/or rewrites
 
 -- Constructing forward and backward analysis-only pass
-analFwd    :: DataflowLattice f -> FwdTransfer n f -> FwdPass FuelUniqSM n f
-analBwd    :: DataflowLattice f -> BwdTransfer n f -> BwdPass FuelUniqSM n f
+analFwd    :: DataflowLattice f -> FwdTransfer n f -> FwdPass UniqSM n f
+analBwd    :: DataflowLattice f -> BwdTransfer n f -> BwdPass UniqSM n f
 
 analFwd lat xfer = analRewFwd lat xfer noFwdRewrite
 analBwd lat xfer = analRewBwd lat xfer noBwdRewrite
 
 -- Constructing forward and backward analysis + rewrite pass
 analRewFwd :: DataflowLattice f -> FwdTransfer n f
-           -> FwdRewrite FuelUniqSM n f
-           -> FwdPass FuelUniqSM n f
+           -> FwdRewrite UniqSM n f
+           -> FwdPass UniqSM n f
 
 analRewBwd :: DataflowLattice f
            -> BwdTransfer n f
-           -> BwdRewrite FuelUniqSM n f
-           -> BwdPass FuelUniqSM n f
+           -> BwdRewrite UniqSM n f
+           -> BwdPass UniqSM n f
 
 analRewFwd lat xfer rew = FwdPass {fp_lattice = lat, fp_transfer = xfer, fp_rewrite = rew}
 analRewBwd lat xfer rew = BwdPass {bp_lattice = lat, bp_transfer = xfer, bp_rewrite = rew}
@@ -469,23 +467,23 @@ analRewBwd lat xfer rew = BwdPass {bp_lattice = lat, bp_transfer = xfer, bp_rewr
 -- Running forward and backward dataflow analysis + optional rewrite
 dataflowPassFwd :: NonLocal n =>
                    GenCmmGraph n -> [(BlockId, f)]
-                -> FwdPass FuelUniqSM n f
-                -> FuelUniqSM (GenCmmGraph n, BlockEnv f)
+                -> FwdPass UniqSM n f
+                -> UniqSM (GenCmmGraph n, BlockEnv f)
 dataflowPassFwd (CmmGraph {g_entry=entry, g_graph=graph}) facts fwd = do
   (graph, facts, NothingO) <- analyzeAndRewriteFwd fwd (JustC [entry]) graph (mkFactBase (fp_lattice fwd) facts)
   return (CmmGraph {g_entry=entry, g_graph=graph}, facts)
 
 dataflowAnalFwd :: NonLocal n =>
                    GenCmmGraph n -> [(BlockId, f)]
-                -> FwdPass FuelUniqSM n f
+                -> FwdPass UniqSM n f
                 -> BlockEnv f
 dataflowAnalFwd (CmmGraph {g_entry=entry, g_graph=graph}) facts fwd =
   analyzeFwd fwd (JustC [entry]) graph (mkFactBase (fp_lattice fwd) facts)
 
 dataflowAnalFwdBlocks :: NonLocal n =>
                    GenCmmGraph n -> [(BlockId, f)]
-                -> FwdPass FuelUniqSM n f
-                -> FuelUniqSM (BlockEnv f)
+                -> FwdPass UniqSM n f
+                -> UniqSM (BlockEnv f)
 dataflowAnalFwdBlocks (CmmGraph {g_entry=entry, g_graph=graph}) facts fwd = do
 --  (graph, facts, NothingO) <- analyzeAndRewriteFwd fwd (JustC [entry]) graph (mkFactBase (fp_lattice fwd) facts)
 --  return facts
@@ -493,15 +491,15 @@ dataflowAnalFwdBlocks (CmmGraph {g_entry=entry, g_graph=graph}) facts fwd = do
 
 dataflowAnalBwd :: NonLocal n =>
                    GenCmmGraph n -> [(BlockId, f)]
-                -> BwdPass FuelUniqSM n f
+                -> BwdPass UniqSM n f
                 -> BlockEnv f
 dataflowAnalBwd (CmmGraph {g_entry=entry, g_graph=graph}) facts bwd =
   analyzeBwd bwd (JustC [entry]) graph (mkFactBase (bp_lattice bwd) facts)
 
 dataflowPassBwd :: NonLocal n =>
                    GenCmmGraph n -> [(BlockId, f)]
-                -> BwdPass FuelUniqSM n f
-                -> FuelUniqSM (GenCmmGraph n, BlockEnv f)
+                -> BwdPass UniqSM n f
+                -> UniqSM (GenCmmGraph n, BlockEnv f)
 dataflowPassBwd (CmmGraph {g_entry=entry, g_graph=graph}) facts bwd = do
   (graph, facts, NothingO) <- analyzeAndRewriteBwd bwd (JustC [entry]) graph (mkFactBase (bp_lattice bwd) facts)
   return (CmmGraph {g_entry=entry, g_graph=graph}, facts)
index 404482e..0eca85c 100644 (file)
@@ -1,7 +1,8 @@
 module Hoopl (
     module Compiler.Hoopl,
     module Hoopl.Dataflow,
-    deepBwdRw3, deepBwdRw,
+    deepFwdRw, deepFwdRw3,
+    deepBwdRw, deepBwdRw3,
     thenFwdRw
   ) where
 
@@ -10,7 +11,7 @@ import Compiler.Hoopl hiding
     FwdTransfer(..), FwdRewrite(..), FwdPass(..),
     BwdTransfer(..), BwdRewrite(..), BwdPass(..),
     noFwdRewrite, noBwdRewrite,
---    analyzeAndRewriteFwd, analyzeAndRewriteBwd,
+    analyzeAndRewriteFwd, analyzeAndRewriteBwd,
     mkFactBase, Fact,
     mkBRewrite, mkBRewrite3, mkBTransfer, mkBTransfer3,
     mkFRewrite, mkFRewrite3, mkFTransfer, mkFTransfer3,
@@ -19,53 +20,53 @@ import Compiler.Hoopl hiding
   )
 
 import Hoopl.Dataflow
-import OptimizationFuel
 import Control.Monad
+import UniqSupply
 
-deepFwdRw3 :: (n C O -> f -> FuelUniqSM (Maybe (Graph n C O)))
-           -> (n O O -> f -> FuelUniqSM (Maybe (Graph n O O)))
-           -> (n O C -> f -> FuelUniqSM (Maybe (Graph n O C)))
-           -> (FwdRewrite FuelUniqSM n f)
-deepFwdRw :: (forall e x . n e x -> f -> FuelUniqSM (Maybe (Graph n e x))) -> FwdRewrite FuelUniqSM n f
+deepFwdRw3 :: (n C O -> f -> UniqSM (Maybe (Graph n C O)))
+           -> (n O O -> f -> UniqSM (Maybe (Graph n O O)))
+           -> (n O C -> f -> UniqSM (Maybe (Graph n O C)))
+           -> (FwdRewrite UniqSM n f)
+deepFwdRw :: (forall e x . n e x -> f -> UniqSM (Maybe (Graph n e x))) -> FwdRewrite UniqSM n f
 deepFwdRw3 f m l = iterFwdRw $ mkFRewrite3 f m l
 deepFwdRw f = deepFwdRw3 f f f
 
 -- N.B. rw3, rw3', and rw3a are triples of functions.
 -- But rw and rw' are single functions.
 thenFwdRw :: forall n f.
-             FwdRewrite FuelUniqSM n f
-          -> FwdRewrite FuelUniqSM n f 
-          -> FwdRewrite FuelUniqSM n f
+             FwdRewrite UniqSM n f
+          -> FwdRewrite UniqSM n f 
+          -> FwdRewrite UniqSM n f
 thenFwdRw rw3 rw3' = wrapFR2 thenrw rw3 rw3'
  where
   thenrw :: forall e x t t1.
-               (t -> t1 -> FuelUniqSM (Maybe (Graph n e x, FwdRewrite FuelUniqSM n f)))
-            -> (t -> t1 -> FuelUniqSM (Maybe (Graph n e x, FwdRewrite FuelUniqSM n f)))
+               (t -> t1 -> UniqSM (Maybe (Graph n e x, FwdRewrite UniqSM n f)))
+            -> (t -> t1 -> UniqSM (Maybe (Graph n e x, FwdRewrite UniqSM n f)))
             -> t
             -> t1
-            -> FuelUniqSM (Maybe (Graph n e x, FwdRewrite FuelUniqSM n f))
+            -> UniqSM (Maybe (Graph n e x, FwdRewrite UniqSM n f))
   thenrw rw rw' n f = rw n f >>= fwdRes
      where fwdRes Nothing   = rw' n f
            fwdRes (Just gr) = return $ Just $ fadd_rw rw3' gr
 
-iterFwdRw :: forall n f.
-             FwdRewrite FuelUniqSM n f
-          -> FwdRewrite FuelUniqSM n f
+iterFwdRw :: forall n f.
+             FwdRewrite UniqSM n f
+          -> FwdRewrite UniqSM n f
 iterFwdRw rw3 = wrapFR iter rw3
  where iter :: forall a e x t.
-               (t -> a -> FuelUniqSM (Maybe (Graph n e x, FwdRewrite FuelUniqSM n f)))
+               (t -> a -> UniqSM (Maybe (Graph n e x, FwdRewrite UniqSM n f)))
                -> t
                -> a
-               -> FuelUniqSM (Maybe (Graph n e x, FwdRewrite FuelUniqSM n f))
+               -> UniqSM (Maybe (Graph n e x, FwdRewrite UniqSM n f))
        iter rw n = (liftM $ liftM $ fadd_rw (iterFwdRw rw3)) . rw n
 
 -- | Function inspired by 'rew' in the paper
-_frewrite_cps :: ((Graph n e x, FwdRewrite FuelUniqSM n f) -> FuelUniqSM a)
-             -> FuelUniqSM a
-             -> (forall e x . n e x -> f -> FuelUniqSM (Maybe (Graph n e x, FwdRewrite FuelUniqSM n f)))
+_frewrite_cps :: ((Graph n e x, FwdRewrite UniqSM n f) -> UniqSM a)
+             -> UniqSM a
+             -> (forall e x . n e x -> f -> UniqSM (Maybe (Graph n e x, FwdRewrite UniqSM n f)))
              -> n e x
              -> f
-             -> FuelUniqSM a
+             -> UniqSM a
 _frewrite_cps j n rw node f =
     do mg <- rw node f
        case mg of Nothing -> n
@@ -74,51 +75,51 @@ _frewrite_cps j n rw node f =
 
 
 -- | Function inspired by 'add' in the paper
-fadd_rw :: FwdRewrite FuelUniqSM n f
-        -> (Graph n e x, FwdRewrite FuelUniqSM n f)
-        -> (Graph n e x, FwdRewrite FuelUniqSM n f)
+fadd_rw :: FwdRewrite UniqSM n f
+        -> (Graph n e x, FwdRewrite UniqSM n f)
+        -> (Graph n e x, FwdRewrite UniqSM n f)
 fadd_rw rw2 (g, rw1) = (g, rw1 `thenFwdRw` rw2)
 
 
 
 deepBwdRw3 ::
-              (n C O -> f          -> FuelUniqSM (Maybe (Graph n C O)))
-           -> (n O O -> f          -> FuelUniqSM (Maybe (Graph n O O)))
-           -> (n O C -> FactBase f -> FuelUniqSM (Maybe (Graph n O C)))
-           -> (BwdRewrite FuelUniqSM n f)
-deepBwdRw  :: (forall e x . n e x -> Fact x f -> FuelUniqSM (Maybe (Graph n e x)))
-           -> BwdRewrite FuelUniqSM n f
+              (n C O -> f          -> UniqSM (Maybe (Graph n C O)))
+           -> (n O O -> f          -> UniqSM (Maybe (Graph n O O)))
+           -> (n O C -> FactBase f -> UniqSM (Maybe (Graph n O C)))
+           -> (BwdRewrite UniqSM n f)
+deepBwdRw  :: (forall e x . n e x -> Fact x f -> UniqSM (Maybe (Graph n e x)))
+           -> BwdRewrite UniqSM n f
 deepBwdRw3 f m l = iterBwdRw $ mkBRewrite3 f m l
 deepBwdRw  f = deepBwdRw3 f f f
 
 
-thenBwdRw :: forall n f. BwdRewrite FuelUniqSM n f -> BwdRewrite FuelUniqSM n f -> BwdRewrite FuelUniqSM n f
+thenBwdRw :: forall n f. BwdRewrite UniqSM n f -> BwdRewrite UniqSM n f -> BwdRewrite UniqSM n f
 thenBwdRw rw1 rw2 = wrapBR2 f rw1 rw2
   where f :: forall t t1 t2 e x.
              t
-             -> (t1 -> t2 -> FuelUniqSM (Maybe (Graph n e x, BwdRewrite FuelUniqSM n f)))
-             -> (t1 -> t2 -> FuelUniqSM (Maybe (Graph n e x, BwdRewrite FuelUniqSM n f)))
+             -> (t1 -> t2 -> UniqSM (Maybe (Graph n e x, BwdRewrite UniqSM n f)))
+             -> (t1 -> t2 -> UniqSM (Maybe (Graph n e x, BwdRewrite UniqSM n f)))
              -> t1
              -> t2
-             -> FuelUniqSM (Maybe (Graph n e x, BwdRewrite FuelUniqSM n f))
+             -> UniqSM (Maybe (Graph n e x, BwdRewrite UniqSM n f))
         f _ rw1 rw2' n f = do
           res1 <- rw1 n f
           case res1 of
             Nothing -> rw2' n f
             Just gr -> return $ Just $ badd_rw rw2 gr
 
-iterBwdRw :: forall n f. BwdRewrite FuelUniqSM n f -> BwdRewrite FuelUniqSM n f
+iterBwdRw :: forall n f. BwdRewrite UniqSM n f -> BwdRewrite UniqSM n f
 iterBwdRw rw = wrapBR f rw
   where f :: forall t e x t1 t2.
              t
-             -> (t1 -> t2 -> FuelUniqSM (Maybe (Graph n e x, BwdRewrite FuelUniqSM n f)))
+             -> (t1 -> t2 -> UniqSM (Maybe (Graph n e x, BwdRewrite UniqSM n f)))
              -> t1
              -> t2
-             -> FuelUniqSM (Maybe (Graph n e x, BwdRewrite FuelUniqSM n f))
+             -> UniqSM (Maybe (Graph n e x, BwdRewrite UniqSM n f))
         f _ rw' n f = liftM (liftM (badd_rw (iterBwdRw rw))) (rw' n f)
 
 -- | Function inspired by 'add' in the paper
-badd_rw :: BwdRewrite FuelUniqSM n f
-        -> (Graph n e x, BwdRewrite FuelUniqSM n f)
-        -> (Graph n e x, BwdRewrite FuelUniqSM n f)
+badd_rw :: BwdRewrite UniqSM n f
+        -> (Graph n e x, BwdRewrite UniqSM n f)
+        -> (Graph n e x, BwdRewrite UniqSM n f)
 badd_rw rw2 (g, rw1) = (g, rw1 `thenBwdRw` rw2)
index cdab2cd..9745eac 100644 (file)
@@ -1,3 +1,14 @@
+--
+-- Copyright (c) 2010, João Dias, Simon Marlow, Simon Peyton Jones,
+-- and Norman Ramsey
+--
+-- Modifications copyright (c) The University of Glasgow 2012
+--
+-- This module is a specialised and optimised version of
+-- Compiler.Hoopl.Dataflow in the hoopl package.  In particular it is
+-- specialised to the UniqSM monad.
+--
+
 {-# LANGUAGE RankNTypes, ScopedTypeVariables, GADTs, EmptyDataDecls, PatternGuards, TypeFamilies, MultiParamTypeClasses #-}
 #if __GLASGOW_HASKELL__ >= 703
 {-# OPTIONS_GHC -fprof-auto-top #-}
@@ -23,78 +34,64 @@ module Hoopl.Dataflow
   )
 where
 
-import OptimizationFuel
+import UniqSupply
 
 import Data.Maybe
 import Data.Array
 
-import Compiler.Hoopl.Collections
-import Compiler.Hoopl.Fuel
-import Compiler.Hoopl.Graph hiding (Graph) -- hiding so we can redefine
-                                           -- and include definition in paper
-import qualified Compiler.Hoopl.GraphUtil as U
-import Compiler.Hoopl.Label
-import Compiler.Hoopl.Dataflow (JoinFun)
-import Compiler.Hoopl.Util
-
-import Compiler.Hoopl.Dataflow (
-    DataflowLattice(..), OldFact(..), NewFact(..), Fact
-  , ChangeFlag(..), mkFactBase
-  , FwdPass(..), FwdRewrite(..), FwdTransfer(..), mkFRewrite,  getFRewrite3, mkFTransfer, mkFTransfer3
-  , wrapFR, wrapFR2
-  , BwdPass(..), BwdRewrite(..),  BwdTransfer(..), mkBTransfer, mkBTransfer3, getBTransfer3
+import Compiler.Hoopl hiding
+   ( mkBRewrite3, mkFRewrite3, noFwdRewrite, noBwdRewrite
+   , analyzeAndRewriteBwd, analyzeAndRewriteFwd
+   )
+import Compiler.Hoopl.Internals
+  ( wrapFR, wrapFR2
   , wrapBR, wrapBR2
-  , mkBRewrite,  getBRewrite3
+  , splice
   )
 
--- import Debug.Trace
 
-noRewrite :: a -> b -> FuelUniqSM (Maybe c)
+-- -----------------------------------------------------------------------------
+
+noRewrite :: a -> b -> UniqSM (Maybe c)
 noRewrite _ _ = return Nothing
 
-noFwdRewrite :: FwdRewrite FuelUniqSM n f
+noFwdRewrite :: FwdRewrite UniqSM n f
 noFwdRewrite = FwdRewrite3 (noRewrite, noRewrite, noRewrite)
 
 -- | Functions passed to 'mkFRewrite3' should not be aware of the fuel supply.
 -- The result returned by 'mkFRewrite3' respects fuel.
 mkFRewrite3 :: forall n f.
-               (n C O -> f -> FuelUniqSM (Maybe (Graph n C O)))
-            -> (n O O -> f -> FuelUniqSM (Maybe (Graph n O O)))
-            -> (n O C -> f -> FuelUniqSM (Maybe (Graph n O C)))
-            -> FwdRewrite FuelUniqSM n f
+               (n C O -> f -> UniqSM (Maybe (Graph n C O)))
+            -> (n O O -> f -> UniqSM (Maybe (Graph n O O)))
+            -> (n O C -> f -> UniqSM (Maybe (Graph n O C)))
+            -> FwdRewrite UniqSM n f
 mkFRewrite3 f m l = FwdRewrite3 (lift f, lift m, lift l)
-  where lift :: forall t t1 a. (t -> t1 -> FuelUniqSM (Maybe a))
-                             -> t -> t1 -> FuelUniqSM (Maybe (a, FwdRewrite FuelUniqSM n f))
+  where lift :: forall t t1 a. (t -> t1 -> UniqSM (Maybe a))
+                             -> t -> t1 -> UniqSM (Maybe (a, FwdRewrite UniqSM n f))
         {-# INLINE lift #-}
         lift rw node fact = do
              a <- rw node fact
              case a of
                Nothing -> return Nothing
-               Just a  -> do f <- getFuel
-                             if f == 0
-                                then return Nothing
-                                else setFuel (f-1) >> return (Just (a,noFwdRewrite))
+               Just a  -> return (Just (a,noFwdRewrite))
 
-noBwdRewrite :: BwdRewrite FuelUniqSM n f
+noBwdRewrite :: BwdRewrite UniqSM n f
 noBwdRewrite = BwdRewrite3 (noRewrite, noRewrite, noRewrite)
 
 mkBRewrite3 :: forall n f.
-               (n C O -> f          -> FuelUniqSM (Maybe (Graph n C O)))
-            -> (n O O -> f          -> FuelUniqSM (Maybe (Graph n O O)))
-            -> (n O C -> FactBase f -> FuelUniqSM (Maybe (Graph n O C)))
-            -> BwdRewrite FuelUniqSM n f
+               (n C O -> f          -> UniqSM (Maybe (Graph n C O)))
+            -> (n O O -> f          -> UniqSM (Maybe (Graph n O O)))
+            -> (n O C -> FactBase f -> UniqSM (Maybe (Graph n O C)))
+            -> BwdRewrite UniqSM n f
 mkBRewrite3 f m l = BwdRewrite3 (lift f, lift m, lift l)
-  where lift :: forall t t1 a. (t -> t1 -> FuelUniqSM (Maybe a))
-                             -> t -> t1 -> FuelUniqSM (Maybe (a, BwdRewrite FuelUniqSM n f))
+  where lift :: forall t t1 a. (t -> t1 -> UniqSM (Maybe a))
+                             -> t -> t1 -> UniqSM (Maybe (a, BwdRewrite UniqSM n f))
         {-# INLINE lift #-}
         lift rw node fact = do
              a <- rw node fact
              case a of
                Nothing -> return Nothing
-               Just a  -> do f <- getFuel
-                             if f == 0
-                                then return Nothing
-                                else setFuel (f-1) >> return (Just (a,noBwdRewrite))
+               Just a  -> return (Just (a,noBwdRewrite))
 
 -----------------------------------------------------------------------------
 --              Analyze and rewrite forward: the interface
@@ -104,10 +101,10 @@ mkBRewrite3 f m l = BwdRewrite3 (lift f, lift m, lift l)
 --   be no other entry point, or all goes horribly wrong...
 analyzeAndRewriteFwd
    :: forall n f e x .  NonLocal n =>
-      FwdPass FuelUniqSM n f
+      FwdPass UniqSM n f
    -> MaybeC e [Label]
    -> Graph n  e x -> Fact e f
-   -> FuelUniqSM (Graph n e x, FactBase f, MaybeO x f)
+   -> UniqSM (Graph n e x, FactBase f, MaybeO x f)
 analyzeAndRewriteFwd pass entries g f =
   do (rg, fout) <- arfGraph pass (fmap targetLabels entries) g f
      let (g', fb) = normalizeGraph rg
@@ -128,8 +125,8 @@ distinguishedExitFact g f = maybe g
 type Entries e = MaybeC e [Label]
 
 arfGraph :: forall n f e x .  NonLocal n =>
-            FwdPass FuelUniqSM n f ->
-            Entries e -> Graph n e x -> Fact e f -> FuelUniqSM (DG f n e x, Fact x f)
+            FwdPass UniqSM n f ->
+            Entries e -> Graph n e x -> Fact e f -> UniqSM (DG f n e x, Fact x f)
 arfGraph pass@FwdPass { fp_lattice = lattice,
                         fp_transfer = transfer,
                         fp_rewrite  = rewrite } entries g in_fact = graph g in_fact
@@ -138,32 +135,32 @@ arfGraph pass@FwdPass { fp_lattice = lattice,
     type ARF  thing = forall e x . thing e x -> f        -> m (DG f n e x, Fact x f)
     type ARFX thing = forall e x . thing e x -> Fact e f -> m (DG f n e x, Fact x f)
     -}
-    graph ::              Graph n e x -> Fact e f -> FuelUniqSM (DG f n e x, Fact x f)
+    graph ::              Graph n e x -> Fact e f -> UniqSM (DG f n e x, Fact x f)
     block :: forall e x .
-             Block n e x -> f -> FuelUniqSM (DG f n e x, Fact x f)
+             Block n e x -> f -> UniqSM (DG f n e x, Fact x f)
 
     body  :: [Label] -> LabelMap (Block n C C)
-          -> Fact C f -> FuelUniqSM (DG f n C C, Fact C f)
+          -> Fact C f -> UniqSM (DG f n C C, Fact C f)
                     -- Outgoing factbase is restricted to Labels *not* in
                     -- in the Body; the facts for Labels *in*
                     -- the Body are in the 'DG f n C C'
 
     cat :: forall e a x f1 f2 f3.
-           (f1 -> FuelUniqSM (DG f n e a, f2))
-        -> (f2 -> FuelUniqSM (DG f n a x, f3))
-        -> (f1 -> FuelUniqSM (DG f n e x, f3))
+           (f1 -> UniqSM (DG f n e a, f2))
+        -> (f2 -> UniqSM (DG f n a x, f3))
+        -> (f1 -> UniqSM (DG f n e x, f3))
 
     graph GNil            f = return (dgnil, f)
     graph (GUnit blk)     f = block blk f
     graph (GMany e bdy x) f = ((e `ebcat` bdy) `cat` exit x) f
      where
-      ebcat :: MaybeO e (Block n O C) -> Body n -> Fact e f -> FuelUniqSM (DG f n e C, Fact C f)
-      exit  :: MaybeO x (Block n C O)           -> Fact C f -> FuelUniqSM (DG f n C x, Fact x f)
+      ebcat :: MaybeO e (Block n O C) -> Body n -> Fact e f -> UniqSM (DG f n e C, Fact C f)
+      exit  :: MaybeO x (Block n C O)           -> Fact C f -> UniqSM (DG f n C x, Fact x f)
       exit (JustO blk) f = arfx block blk f
       exit NothingO    f = return (dgnilC, f)
       ebcat entry bdy f = c entries entry f
        where c :: MaybeC e [Label] -> MaybeO e (Block n O C)
-                -> Fact e f -> FuelUniqSM (DG f n e C, Fact C f)
+                -> Fact e f -> UniqSM (DG f n e C, Fact C f)
              c NothingC (JustO entry)   f = (block entry `cat` body (successors entry) bdy) f
              c (JustC entries) NothingO f = body entries bdy f
              c _ _ _ = error "bogus GADT pattern match failure"
@@ -181,7 +178,7 @@ arfGraph pass@FwdPass { fp_lattice = lattice,
 
     {-# INLINE node #-}
     node :: forall e x . (ShapeLifter e x)
-         => n e x -> f -> FuelUniqSM (DG f n e x, Fact x f)
+         => n e x -> f -> UniqSM (DG f n e x, Fact x f)
     node n f
      = do { grw <- frewrite rewrite n f
           ; case grw of
@@ -201,8 +198,8 @@ arfGraph pass@FwdPass { fp_lattice = lattice,
                        ; return (g, f2) }
 
     arfx :: forall x .
-            (Block n C x ->        f -> FuelUniqSM (DG f n C x, Fact x f))
-         -> (Block n C x -> Fact C f -> FuelUniqSM (DG f n C x, Fact x f))
+            (Block n C x ->        f -> UniqSM (DG f n C x, Fact x f))
+         -> (Block n C x -> Fact C f -> UniqSM (DG f n C x, Fact x f))
     arfx arf thing fb = 
       arf thing $ fromJust $ lookupFact (entryLabel thing) $ joinInFacts lattice fb
      -- joinInFacts adds debugging information
@@ -216,7 +213,7 @@ arfGraph pass@FwdPass { fp_lattice = lattice,
       where
         lattice = fp_lattice pass
         do_block :: forall x . Block n C x -> FactBase f
-                 -> FuelUniqSM (DG f n C x, Fact x f)
+                 -> UniqSM (DG f n C x, Fact x f)
         do_block b fb = block b entryFact
           where entryFact = getFact lattice (entryLabel b) fb
 
@@ -243,7 +240,7 @@ forwardBlockList entries blks = postorder_dfs_from blks entries
 --   be no other entry point, or all goes horribly wrong...
 analyzeFwd
    :: forall n f e .  NonLocal n =>
-      FwdPass FuelUniqSM n f
+      FwdPass UniqSM n f
    -> MaybeC e [Label]
    -> Graph n e C -> Fact e f
    -> FactBase f
@@ -286,7 +283,7 @@ analyzeFwd FwdPass { fp_lattice = lattice,
 --   be no other entry point, or all goes horribly wrong...
 analyzeFwdBlocks
    :: forall n f e .  NonLocal n =>
-      FwdPass FuelUniqSM n f
+      FwdPass UniqSM n f
    -> MaybeC e [Label]
    -> Graph n e C -> Fact e f
    -> FactBase f
@@ -315,6 +312,7 @@ analyzeFwdBlocks FwdPass { fp_lattice = lattice,
     block (BlockCO n _)   f = ftr n f
     block (BlockCC l _ n) f = (ftr l `cat` ltr n) f
     block (BlockOC   _ n) f = ltr n f
+    block _               _ = error "analyzeFwdBlocks"
 
     {-# INLINE cat #-}
     cat :: forall f1 f2 f3 . (f1 -> f2) -> (f2 -> f3) -> (f1 -> f3)
@@ -328,7 +326,7 @@ analyzeFwdBlocks FwdPass { fp_lattice = lattice,
 --   be no other entry point, or all goes horribly wrong...
 analyzeBwd
    :: forall n f e .  NonLocal n =>
-      BwdPass FuelUniqSM n f
+      BwdPass UniqSM n f
    -> MaybeC e [Label]
    -> Graph n e C -> Fact C f
    -> FactBase f
@@ -375,9 +373,9 @@ analyzeBwd BwdPass { bp_lattice = lattice,
 --   quite understand the implications of possible other exits
 analyzeAndRewriteBwd
    :: NonLocal n
-   => BwdPass FuelUniqSM n f
+   => BwdPass UniqSM n f
    -> MaybeC e [Label] -> Graph n e x -> Fact x f
-   -> FuelUniqSM (Graph n e x, FactBase f, MaybeO e f)
+   -> UniqSM (Graph n e x, FactBase f, MaybeO e f)
 analyzeAndRewriteBwd pass entries g f =
   do (rg, fout) <- arbGraph pass (fmap targetLabels entries) g f
      let (g', fb) = normalizeGraph rg
@@ -398,8 +396,8 @@ distinguishedEntryFact g f = maybe g
 
 arbGraph :: forall n f e x .
             NonLocal n =>
-            BwdPass FuelUniqSM n f ->
-            Entries e -> Graph n e x -> Fact x f -> FuelUniqSM (DG f n e x, Fact e f)
+            BwdPass UniqSM n f ->
+            Entries e -> Graph n e x -> Fact x f -> UniqSM (DG f n e x, Fact e f)
 arbGraph pass@BwdPass { bp_lattice  = lattice,
                         bp_transfer = transfer,
                         bp_rewrite  = rewrite } entries g in_fact = graph g in_fact
@@ -408,27 +406,27 @@ arbGraph pass@BwdPass { bp_lattice  = lattice,
     type ARB  thing = forall e x . thing e x -> Fact x f -> m (DG f n e x, f)
     type ARBX thing = forall e x . thing e x -> Fact x f -> m (DG f n e x, Fact e f)
     -}
-    graph ::              Graph n e x -> Fact x f -> FuelUniqSM (DG f n e x, Fact e f)
-    block :: forall e x . Block n e x -> Fact x f -> FuelUniqSM (DG f n e x, f)
-    body  :: [Label] -> Body n -> Fact C f -> FuelUniqSM (DG f n C C, Fact C f)
+    graph ::              Graph n e x -> Fact x f -> UniqSM (DG f n e x, Fact e f)
+    block :: forall e x . Block n e x -> Fact x f -> UniqSM (DG f n e x, f)
+    body  :: [Label] -> Body n -> Fact C f -> UniqSM (DG f n C C, Fact C f)
     node  :: forall e x . (ShapeLifter e x) 
-             => n e x       -> Fact x f -> FuelUniqSM (DG f n e x, f)
+             => n e x       -> Fact x f -> UniqSM (DG f n e x, f)
     cat :: forall e a x info info' info''.
-           (info' -> FuelUniqSM (DG f n e a, info''))
-        -> (info  -> FuelUniqSM (DG f n a x, info'))
-        -> (info  -> FuelUniqSM (DG f n e x, info''))
+           (info' -> UniqSM (DG f n e a, info''))
+        -> (info  -> UniqSM (DG f n a x, info'))
+        -> (info  -> UniqSM (DG f n e x, info''))
 
     graph GNil            f = return (dgnil, f)
     graph (GUnit blk)     f = block blk f
     graph (GMany e bdy x) f = ((e `ebcat` bdy) `cat` exit x) f
      where
-      ebcat :: MaybeO e (Block n O C) -> Body n -> Fact C f -> FuelUniqSM (DG f n e C, Fact e f)
-      exit  :: MaybeO x (Block n C O)           -> Fact x f -> FuelUniqSM (DG f n C x, Fact C f)
+      ebcat :: MaybeO e (Block n O C) -> Body n -> Fact C f -> UniqSM (DG f n e C, Fact e f)
+      exit  :: MaybeO x (Block n C O)           -> Fact x f -> UniqSM (DG f n C x, Fact C f)
       exit (JustO blk) f = arbx block blk f
       exit NothingO    f = return (dgnilC, f)
       ebcat entry bdy f = c entries entry f
        where c :: MaybeC e [Label] -> MaybeO e (Block n O C)
-                -> Fact C f -> FuelUniqSM (DG f n e C, Fact e f)
+                -> Fact C f -> UniqSM (DG f n e C, Fact e f)
              c NothingC (JustO entry)   f = (block entry `cat` body (successors entry) bdy) f
              c (JustC entries) NothingO f = body entries bdy f
              c _ _ _ = error "bogus GADT pattern match failure"
@@ -464,8 +462,8 @@ arbGraph pass@BwdPass { bp_lattice  = lattice,
                        ; return (g, f1) }
 
     arbx :: forall x .
-            (Block n C x -> Fact x f -> FuelUniqSM (DG f n C x, f))
-         -> (Block n C x -> Fact x f -> FuelUniqSM (DG f n C x, Fact C f))
+            (Block n C x -> Fact x f -> UniqSM (DG f n C x, f))
+         -> (Block n C x -> Fact x f -> UniqSM (DG f n C x, Fact C f))
 
     arbx arb thing f = do { (rg, f) <- arb thing f
                           ; let fb = joinInFacts (bp_lattice pass) $
@@ -479,7 +477,7 @@ arbGraph pass@BwdPass { bp_lattice  = lattice,
     body entries blockmap init_fbase
       = fixpoint Bwd (bp_lattice pass) do_block entries blockmap init_fbase
       where
-        do_block :: forall x. Block n C x -> Fact x f -> FuelUniqSM (DG f n C x, LabelMap f)
+        do_block :: forall x. Block n C x -> Fact x f -> UniqSM (DG f n C x, LabelMap f)
         do_block b f = do (g, f) <- block b f
                           return (g, mapSingleton (entryLabel b) f)
 
@@ -514,7 +512,7 @@ fixpointAnal :: forall n f. NonLocal n
  -> LabelMap (Block n C C)
  -> Fact C f -> FactBase f
 
-fixpointAnal direction DataflowLattice{ fact_bot = bot, fact_join = join }
+fixpointAnal direction DataflowLattice{ fact_bot = _, fact_join = join }
               do_block entries blockmap init_fbase
   = loop start init_fbase
   where
@@ -553,12 +551,12 @@ fixpointAnal direction DataflowLattice{ fact_bot = bot, fact_join = join }
 fixpoint :: forall n f. NonLocal n
  => Direction
  -> DataflowLattice f
- -> (Block n C C -> Fact C f -> FuelUniqSM (DG f n C C, Fact C f))
+ -> (Block n C C -> Fact C f -> UniqSM (DG f n C C, Fact C f))
  -> [Label]
  -> LabelMap (Block n C C)
- -> (Fact C f -> FuelUniqSM (DG f n C C, Fact C f))
+ -> (Fact C f -> UniqSM (DG f n C C, Fact C f))
 
-fixpoint direction DataflowLattice{ fact_bot = bot, fact_join = join }
+fixpoint direction DataflowLattice{ fact_bot = _, fact_join = join }
          do_block entries blockmap init_fbase
   = do
         -- trace ("fixpoint: " ++ show (case direction of Fwd -> True; Bwd -> False) ++ " " ++ show (mapKeys blockmap) ++ show entries ++ " " ++ show (mapKeys init_fbase)) $ return()
@@ -580,7 +578,7 @@ fixpoint direction DataflowLattice{ fact_bot = bot, fact_join = join }
        :: IntHeap
        -> FactBase f  -- current factbase (increases monotonically)
        -> LabelMap (DBlock f n C C)  -- transformed graph
-       -> FuelUniqSM (FactBase f, LabelMap (DBlock f n C C))
+       -> UniqSM (FactBase f, LabelMap (DBlock f n C C))
 
     loop [] fbase newblocks = return (fbase, newblocks)
     loop (ix:todo) fbase !newblocks = do
@@ -732,7 +730,6 @@ out that always recording a change is faster.
 --          TOTALLY internal to Hoopl; each block is decorated with a fact
 -----------------------------------------------------------------------------
 
-type Graph = Graph' Block
 type DG f  = Graph' (DBlock f)
 data DBlock f n e x = DBlock f (Block n e x) -- ^ block decorated with fact
 
@@ -754,7 +751,7 @@ normalizeGraph :: forall n f e x .
                  -- A Graph together with the facts for that graph
                  -- The domains of the two maps should be identical
 
-normalizeGraph g = (graphMapBlocks dropFact g, facts g)
+normalizeGraph g = (mapGraphBlocks dropFact g, facts g)
     where dropFact :: DBlock t t1 t2 t3 -> Block t1 t2 t3
           dropFact (DBlock _ b) = b
           facts :: DG f n e x -> FactBase f
@@ -774,9 +771,9 @@ normalizeGraph g = (graphMapBlocks dropFact g, facts g)
 dgnil  = GNil
 dgnilC = GMany NothingO emptyBody NothingO
 
-dgSplice = U.splice fzCat
+dgSplice = splice fzCat
   where fzCat :: DBlock f n e O -> DBlock t n O x -> DBlock f n e x
-        fzCat (DBlock f b1) (DBlock _ b2) = DBlock f $! b1 `U.cat` b2
+        fzCat (DBlock f b1) (DBlock _ b2) = DBlock f $! b1 `blockAppend` b2
         -- NB. strictness, this function is hammered.
 
 ----------------------------------------------------------------
index 797b785..ecd4d4f 100644 (file)
@@ -318,7 +318,7 @@ copyOutOflow conv transfer area actuals updfr_off
     (setRA, init_offset) =
       case area of
             Young id -> id `seq` -- Generate a store instruction for
-                                    -- the return address if making a call
+                                 -- the return address if making a call
                   if transfer == Call then
                     ([(CmmLit (CmmBlock id), StackParam init_offset)],
                      widthInBytes wordWidth)
index 00bbe6d..aa83afb 100644 (file)
@@ -9,7 +9,7 @@
 module OldCmm (
         CmmGroup, GenCmmGroup, RawCmmGroup, CmmDecl, RawCmmDecl,
         ListGraph(..),
-        UpdateFrame(..), CmmInfoTable(..), ClosureTypeInfo(..),
+        CmmInfoTable(..), ClosureTypeInfo(..),
         CmmStatic(..), CmmStatics(..), CmmFormal, CmmActual,
 
         cmmMapGraph, cmmTopMapGraph,
@@ -47,17 +47,6 @@ import ForeignCall
 -- with assembly-language labels.
 
 -----------------------------------------------------------------------------
---     Info Tables
------------------------------------------------------------------------------
-
--- | A frame that is to be pushed before entry to the function.
--- Used to handle 'update' frames.
-data UpdateFrame
-  = UpdateFrame
-        CmmExpr    -- Frame header.  Behaves like the target of a 'jump'.
-        [CmmExpr]  -- Frame remainder.  Behaves like the arguments of a 'jump'.
-
------------------------------------------------------------------------------
 --  Cmm, CmmDecl, CmmBasicBlock
 -----------------------------------------------------------------------------
 
index a30be9c..9990fd2 100644 (file)
@@ -137,18 +137,6 @@ pprStmt stmt = case stmt of
 instance (Outputable a) => Outputable (CmmHinted a) where
   ppr (CmmHinted a k) = ppr (a, k)
 
-pprUpdateFrame :: UpdateFrame -> SDoc
-pprUpdateFrame (UpdateFrame expr args) =
-    hcat [ ptext (sLit "jump")
-         , space
-         , if isTrivialCmmExpr expr
-                then pprExpr expr
-                else case expr of
-                    CmmLoad (CmmReg _) _ -> pprExpr expr
-                    _ -> parens (pprExpr expr)
-         , space
-         , parens  ( commafy $ map ppr args ) ]
-
 -- --------------------------------------------------------------------------
 -- goto local label. [1], section 6.6
 --
diff --git a/compiler/cmm/OptimizationFuel.hs b/compiler/cmm/OptimizationFuel.hs
deleted file mode 100644 (file)
index 6e968c0..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-{-# LANGUAGE TypeFamilies #-}
--- | Optimisation fuel is used to control the amount of work the optimiser does.
---
--- Every optimisation step consumes a certain amount of fuel and stops when
--- it runs out of fuel.  This can be used e.g. to debug optimiser bugs: Run
--- the optimiser with varying amount of fuel to find out the exact number of
--- steps where a bug is introduced in the output.
-module OptimizationFuel
-    ( OptimizationFuel, amountOfFuel, tankFilledTo, unlimitedFuel, anyFuelLeft, oneLessFuel
-    , OptFuelState, initOptFuelState
-    , FuelConsumer, FuelState
-    , runFuelIO, runInfiniteFuelIO
-    , FuelUniqSM
-    , liftUniq
-    )
-where
-
-import Data.IORef
-import Control.Monad
-import StaticFlags (opt_Fuel)
-import UniqSupply
-import Panic
-import Util
-
-import Compiler.Hoopl
-import Compiler.Hoopl.GHC (getFuel, setFuel)
-
-#include "HsVersions.h"
-
-
--- We limit the number of transactions executed using a record of flags
--- stored in an HscEnv. The flags store the name of the last optimization
--- pass and the amount of optimization fuel remaining.
-data OptFuelState =
-  OptFuelState { pass_ref :: IORef String
-               , fuel_ref :: IORef OptimizationFuel
-               }
-initOptFuelState :: IO OptFuelState
-initOptFuelState =
-  do pass_ref' <- newIORef "unoptimized program"
-     fuel_ref' <- newIORef (tankFilledTo opt_Fuel)
-     return OptFuelState {pass_ref = pass_ref', fuel_ref = fuel_ref'}
-
-type FuelConsumer a = OptimizationFuel -> (a, OptimizationFuel)
-
-tankFilledTo :: Int -> OptimizationFuel
-amountOfFuel :: OptimizationFuel -> Int
-
-anyFuelLeft :: OptimizationFuel -> Bool
-oneLessFuel :: OptimizationFuel -> OptimizationFuel
-unlimitedFuel :: OptimizationFuel
-
-newtype OptimizationFuel = OptimizationFuel Int
-  deriving Show
-
-tankFilledTo = OptimizationFuel
-amountOfFuel (OptimizationFuel f) = f
-
-anyFuelLeft (OptimizationFuel f) = f > 0
-oneLessFuel (OptimizationFuel f) = ASSERT (f > 0) (OptimizationFuel (f - 1))
-unlimitedFuel = OptimizationFuel infiniteFuel
-
-data FuelState = FuelState { fs_fuel :: {-# UNPACK #-} !OptimizationFuel,
-                             fs_lastpass :: String }
-newtype FuelUniqSM a = FUSM { unFUSM :: UniqSupply -> FuelState -> (# a, UniqSupply, FuelState #) }
-
-runFuelIO :: OptFuelState -> FuelUniqSM a -> IO a
-runFuelIO fs (FUSM f) =
-    do pass <- readIORef (pass_ref fs)
-       fuel <- readIORef (fuel_ref fs)
-       u    <- mkSplitUniqSupply 'u'
-       case f u (FuelState fuel pass) of
-          (# a, _, FuelState fuel' pass' #) -> do
-            writeIORef (pass_ref fs) pass'
-            writeIORef (fuel_ref fs) fuel'
-            return a
-
--- ToDo: Do we need the pass_ref when we are doing infinite fueld
--- transformations?
-runInfiniteFuelIO :: OptFuelState -> FuelUniqSM a -> IO a
-runInfiniteFuelIO fs (FUSM f) =
-    do pass <- readIORef (pass_ref fs)
-       u <- mkSplitUniqSupply 'u'
-       case f u (FuelState unlimitedFuel pass) of
-          (# a, _, FuelState _fuel pass' #) -> do
-            writeIORef (pass_ref fs) pass'
-            return a
-
-instance Monad FuelUniqSM where
-  FUSM f >>= k = FUSM (\u s -> case f u s of (# a, u', s' #) ->
-                                                unFUSM (k a) u' s')
-  return a     = FUSM (\u s -> (# a, u, s #))
-
-instance MonadUnique FuelUniqSM where
-    getUniqueSupplyM =
-       FUSM $ \us f -> case splitUniqSupply us of
-                         (us1,us2) -> (# us1, us2, f #)
-
-    getUniqueM =
-       FUSM $ \us f -> case splitUniqSupply us of
-                         (us1,us2) -> (# uniqFromSupply us1, us2, f #)
-
-    getUniquesM =
-       FUSM $ \us f -> case splitUniqSupply us of
-                         (us1,us2) -> (# uniqsFromSupply us1, us2, f #)
-
-
-liftUniq :: UniqSM x -> FuelUniqSM x
-liftUniq x = FUSM (\u s -> case initUs u x of (a,u') -> (# a, u', s #))
-
-class Monad m => FuelUsingMonad m where
-  fuelGet      :: m OptimizationFuel
-  fuelSet      :: OptimizationFuel -> m ()
-  lastFuelPass :: m String
-  setFuelPass  :: String -> m ()
-
-instance FuelUsingMonad FuelUniqSM where
-  fuelGet          = extract fs_fuel
-  lastFuelPass     = extract fs_lastpass
-  fuelSet fuel     = FUSM (\u s -> (# (), u, s { fs_fuel     = fuel } #))
-  setFuelPass pass = FUSM (\u s -> (# (), u, s { fs_lastpass = pass } #))
-
-extract :: (FuelState -> a) -> FuelUniqSM a
-extract f = FUSM (\u s -> (# f s, u, s #))
-
-instance FuelMonad FuelUniqSM where
-  getFuel = liftM amountOfFuel fuelGet
-  setFuel = fuelSet . tankFilledTo
-
--- Don't bother to checkpoint the unique supply; it doesn't matter
-instance CheckpointMonad FuelUniqSM where
-    type Checkpoint FuelUniqSM = FuelState
-    checkpoint = FUSM $ \u fuel -> (# fuel, u, fuel #)
-    restart fuel = FUSM $ \u _ -> (# (), u, fuel #)
-
index 4db1dff..68bfb6d 100644 (file)
@@ -572,7 +572,7 @@ cgAltRhss gc_plan retry_lbl bndr alts
           ; return con }
 
 maybeAltHeapCheck :: GcPlan -> Maybe BlockId -> FCode a -> FCode a
-maybeAltHeapCheck NoGcInAlts      mlbl code = code
+maybeAltHeapCheck NoGcInAlts      _    code = code
 maybeAltHeapCheck (GcInAlts regs) mlbl code =
   case mlbl of
      Nothing -> altHeapCheck regs code
index 0969f5b..3c13bb4 100644 (file)
@@ -194,7 +194,6 @@ Library
         OldCmmLint
         OldCmmUtils
         OldPprCmm
-        OptimizationFuel
         PprBase
         PprC
         PprCmm
index 3b23544..e92eb4f 100644 (file)
@@ -14,7 +14,7 @@ import LlvmCodeGen ( llvmCodeGen )
 import UniqSupply       ( mkSplitUniqSupply )
 
 import Finder           ( mkStubPaths )
-import PprC            ( writeCs )
+import PprC             ( writeCs )
 import OldCmmLint       ( cmmLint )
 import Packages
 import OldCmm           ( RawCmmGroup )
@@ -45,9 +45,9 @@ import System.IO
 \begin{code}
 codeOutput :: DynFlags
            -> Module
-          -> ModLocation
-          -> ForeignStubs
-          -> [PackageId]
+           -> ModLocation
+           -> ForeignStubs
+           -> [PackageId]
            -> Stream IO RawCmmGroup ()                       -- Compiled C--
            -> IO (Bool{-stub_h_exists-}, Maybe FilePath{-stub_c_exists-})
 
@@ -64,16 +64,16 @@ codeOutput dflags this_mod location foreign_stubs pkg_deps cmm_stream
                 { showPass dflags "CmmLint"
                 ; case cmmLint (targetPlatform dflags) cmm of
                         Just err -> do { log_action dflags dflags SevDump noSrcSpan defaultDumpStyle err
-                                      ; ghcExit dflags 1
-                                      }
-                       Nothing  -> return ()
+                                       ; ghcExit dflags 1
+                                       }
+                        Nothing  -> return ()
                 ; return cmm
                 }
 
-       ; showPass dflags "CodeOutput"
-       ; let filenm = hscOutName dflags 
-       ; stubs_exist <- outputForeignStubs dflags this_mod location foreign_stubs
-       ; case hscTarget dflags of {
+        ; showPass dflags "CodeOutput"
+        ; let filenm = hscOutName dflags 
+        ; stubs_exist <- outputForeignStubs dflags this_mod location foreign_stubs
+        ; case hscTarget dflags of {
              HscInterpreted -> return ();
              HscAsm         -> outputAsm dflags filenm linted_cmm_stream;
              HscC           -> outputC dflags filenm linted_cmm_stream pkg_deps;
@@ -127,7 +127,7 @@ outputC dflags filenm cmm_stream packages
 
        doOutput filenm $ \ h -> do
           hPutStr h ("/* GHC_PACKAGES " ++ unwords pkg_names ++ "\n*/\n")
-         hPutStr h cc_injects
+          hPutStr h cc_injects
           writeCs dflags h rawcmms
 \end{code}
 
@@ -256,4 +256,3 @@ outputForeignStubs_help fname doc_str header footer
    = do writeFile fname (header ++ doc_str ++ '\n':footer ++ "\n")
         return True
 \end{code}
-
index eecf814..0b03e83 100644 (file)
@@ -125,7 +125,6 @@ import CmmParse         ( parseCmmFile )
 import CmmBuildInfoTables
 import CmmPipeline
 import CmmInfo
-import OptimizationFuel ( initOptFuelState )
 import CmmCvt
 import CodeOutput
 import NameEnv          ( emptyNameEnv )
@@ -175,7 +174,6 @@ newHscEnv dflags = do
     nc_var  <- newIORef (initNameCache us knownKeyNames)
     fc_var  <- newIORef emptyUFM
     mlc_var <- newIORef emptyModuleEnv
-    optFuel <- initOptFuelState
     return HscEnv {  hsc_dflags       = dflags,
                      hsc_targets      = [],
                      hsc_mod_graph    = [],
@@ -185,7 +183,6 @@ newHscEnv dflags = do
                      hsc_NC           = nc_var,
                      hsc_FC           = fc_var,
                      hsc_MLC          = mlc_var,
-                     hsc_OptFuel      = optFuel,
                      hsc_type_env_var = Nothing }
 
 
index 156f081..adaa9a3 100644 (file)
@@ -142,7 +142,6 @@ import Packages hiding  ( Version(..) )
 import DynFlags
 import DriverPhases
 import BasicTypes
-import OptimizationFuel ( OptFuelState )
 import IfaceSyn
 import CoreSyn          ( CoreRule, CoreVect )
 import Maybes
@@ -318,11 +317,6 @@ data HscEnv
                 -- ^ This caches the location of modules, so we don't have to
                 -- search the filesystem multiple times. See also 'hsc_FC'.
 
-        hsc_OptFuel :: OptFuelState,
-                -- ^ Settings to control the use of \"optimization fuel\":
-                -- by limiting the number of transformations,
-                -- we can use binary search to help find compiler bugs.
-
         hsc_type_env_var :: Maybe (Module, IORef TypeEnv)
                 -- ^ Used for one-shot compilation only, to initialise
                 -- the 'IfGblEnv'. See 'TcRnTypes.tcg_type_env_var' for