[improve statistics gathering, switch around optimization ordering some.
John Meacham <john@repetae.net>**20060720041528] hunk ./E/Eta.hs 33
-import Stats
+import qualified Stats
hunk ./E/Eta.hs 108
-etaExpandProgram :: MonadStats m => Program -> m Program
+etaExpandProgram :: Stats.MonadStats m => Program -> m Program
hunk ./E/Eta.hs 153
-etaExpandDef :: (NameMonad Id m,MonadStats m) => DataTable -> TVr -> E -> m (Maybe (TVr,E))
+etaExpandDef :: (NameMonad Id m,Stats.MonadStats m) => DataTable -> TVr -> E -> m (Maybe (TVr,E))
hunk ./E/Eta.hs 173
-         then mtick ("EtaExpand." ++ zeroName)
-          else mtick ("EtaExpand.def.{" ++ tvrShowName t)
+         then Stats.mtick ("EtaExpand." ++ zeroName)
+          else Stats.mtick ("EtaExpand.def.{" ++ tvrShowName t)
hunk ./E/Eta.hs 186
-etaExpandAp :: (NameMonad Id m,MonadStats m) => DataTable -> TVr -> [E] -> m (Maybe E)
+etaExpandAp :: (NameMonad Id m,Stats.MonadStats m) => DataTable -> TVr -> [E] -> m (Maybe E)
hunk ./E/SSimplify.hs 46
-import Stats hiding(new,print,Stats)
+import Stats hiding(new,print,Stats,singleton)
hunk ./Main.hs 88
+collectPassStats = True
hunk ./Main.hs 155
-barendregtProgram prog | null $ progCombinators prog = prog
-barendregtProgram prog = programSetDs ds' prog where
-    Identity (ELetRec ds' Unknown) = renameTraverse' (ELetRec (programDs prog) Unknown)
-
-
hunk ./Main.hs 157
-transBarendregt = transformParms { transformCategory = "Barendregt", transformIterate = DontIterate, transformDumpProgress = corePass, transformOperation =  return . barendregtProgram }
+transBarendregt = transformParms {
+        transformCategory = "Barendregt",
+        transformIterate = DontIterate,
+        transformDumpProgress = corePass,
+        transformOperation =  return . barendregtProgram
+        } where
+    barendregtProgram prog | null $ progCombinators prog = prog
+    barendregtProgram prog = programSetDs ds' prog where
+        Identity (ELetRec ds' Unknown) = renameTraverse' (ELetRec (programDs prog) Unknown)
hunk ./Main.hs 259
-        lc <- atomizeAp False fullDataTable stats (progModule prog) lc -- doopt mangle False stats "FixupLets..." (\stats x -> atomizeAp False fullDataTable stats (progModule prog) x >>= coalesceLets stats)  lc
+        lc <- atomizeAp False fullDataTable stats (progModule prog) lc
hunk ./Main.hs 271
-    let entries = execWriter $ programMapDs_ (\ (t,_) -> when (getProperty prop_EXPORTED t) (tell [t])) prog
-    prog <- return $ prog { progEntryPoints = entries }
-    prog <- programPrune prog
+    let entryPoints = execWriter $ programMapDs_ (\ (t,_) -> when (getProperty prop_EXPORTED t) (tell [t])) prog
+    prog <- return $ prog { progEntryPoints = entryPoints }
hunk ./Main.hs 274
+    -- Create Specializations
hunk ./Main.hs 283
+    prog <- programPrune prog
hunk ./Main.hs 300
+    -- quick float inward pass to inline once used functions and prune unused ones
+    prog <- transformProgram transformParms {
+        transformPass = "PreInit",
+        transformDumpProgress = True,
+        transformCategory = "FloatInward",
+        transformOperation = programFloatInward
+        } prog
+    printProgram prog
+
hunk ./Main.hs 509
-programPrune prog = transformProgram transformParms { transformCategory = "Prune Unreachable", transformDumpProgress  = miniCorePass, transformOperation = return . programPruneUnreachable } prog
+programPrune prog = transformProgram transformParms { transformCategory = "PruneUnreachable", transformDumpProgress  = miniCorePass, transformOperation = return . programPruneUnreachable } prog
hunk ./Main.hs 516
+etaExpandProg' :: Program -> IO Program
+etaExpandProg' prog = do
+    let (prog',stats) = Stats.runStatM $  etaExpandProgram prog
+    transformProgram transformParms { transformCategory = "EtaExpansion", transformDumpProgress = True, transformPass = "PreInit",  transformOperation = const $ return prog' { progStats = progStats prog' `mappend` stats } } prog
+
hunk ./Main.hs 659
+
+    when collectPassStats $ do
+        Stats.print "PassStats" Stats.theStats
+        Stats.clear Stats.theStats
+
hunk ./Main.hs 802
-    when (dodump && (dump FD.Progress || coreSteps)) $ Stats.printStat ("Total: " ++ name) (progStats prog)
+    when (dodump && (dump FD.Progress || coreSteps)) $ Stats.printLStat (optStatLevel options) ("Total: " ++ name) (progStats prog)
hunk ./Main.hs 817
-    when (dodump && (dump FD.Progress || coreSteps)) $ Stats.printStat ("Total: " ++ name) (progStats prog)
+    when (dodump && (dump FD.Progress || coreSteps)) $ Stats.printLStat (optStatLevel options) ("Total: " ++ name) (progStats prog)
hunk ./Main.hs 859
+        scname = transformCategory tp ++ pname (transformPass tp)
hunk ./Main.hs 881
-    when (dodump && dump FD.CoreSteps) $ Stats.printStat name estat
+    when (dodump && dump FD.CoreSteps) $ Stats.printLStat (optStatLevel options) name estat
+    when collectPassStats $ do
+        Stats.tick Stats.theStats scname
+        Stats.tickStat Stats.theStats (Stats.prependStat scname estat)
hunk ./Main.hs 891
--- these are way to complicated and should be simplified
+-- these are way too complicated and should be simplified
hunk ./Main.hs 1042
+
+
hunk ./Stats.hs 17
+    singleton,
+    singletons,
hunk ./Stats.hs 165
+singletons n atom = Stat (Map.singleton (toAtom atom) n)
+singleton atom = singletons 1 atom
+