[switch main optimization pass to use new Program framework
John Meacham <john@repetae.net>**20061128063326] hunk ./Main.hs 7
+import Control.Monad.State
hunk ./Main.hs 287
-    let  namesInscope = fromList $ [ tvrIdent n | (n,_) <- Map.elems $ hoEs ho ] ++ [tvrIdent n | (n,_) <- ds ]
+    --let  namesInscope = fromList $ [ tvrIdent n | (n,_) <- Map.elems $ hoEs ho ] ++ [tvrIdent n | (n,_) <- ds ]
hunk ./Main.hs 341
-        mstats <- Stats.new
hunk ./Main.hs 351
-        mprog <- transformProgram tparms { transformCategory = "typeAnalyze", transformOperation = typeAnalyze True } mprog
hunk ./Main.hs 359
+        mprog <- transformProgram tparms { transformCategory = "typeAnalyze", transformOperation = typeAnalyze True } mprog
+
hunk ./Main.hs 381
-    prog <- barendregtProg prog
+    prog <- barendregtProg prog { progStats = mempty }
hunk ./Main.hs 392
-    prog <- barendregtProg prog
+    wdump FD.Progress $
+        Stats.printLStat (optStatLevel options) "Init-Big-One Stats" (progStats prog)
+
+    -- This is the main function that optimizes the routines before writing them out
+    let optWW mprog = do
+        let names = pprint [ n | (n,_) <- programDs mprog]
+        liftIO $ when coreMini $ putErrLn ("----\n" ++ names)
+        smap <- get
+        let tparms = transformParms { transformPass = "OptWW", transformDumpProgress = coreMini }
+            sopt = mempty {  SS.so_boundVars = smap, SS.so_dataTable = progDataTable mprog }
+
+        mprog <- simplifyProgram sopt "Simplify-One" coreMini mprog
+        mprog <- barendregtProg mprog
+        mprog <- transformProgram tparms { transformCategory = "FloatInward", transformOperation = programFloatInward } mprog
+        mprog <- Demand.analyzeProgram mprog
+        mprog <- simplifyProgram sopt "Simplify-Two" coreMini mprog
+        mprog <- transformProgram tparms { transformCategory = "FloatInward", transformOperation = programFloatInward } mprog
+        mprog <- Demand.analyzeProgram mprog
+        mprog <- return $ E.CPR.cprAnalyzeProgram mprog
+        mprog' <- transformProgram tparms { transformCategory = "WorkWrap", transformOperation = return . workWrapProgram } mprog
+        let wws = length (programDs mprog') - length (programDs mprog)
+        liftIO $ wdump FD.Progress $ putErr (replicate wws 'w')
+        mprog <- return mprog'
+
+        --smap <- return $ fromList [ (tvrIdent v,(v,lc)) | (v,lc) <- programDs mprog] `union` smap
+        --sopt <- return $ sopt { SS.so_boundVars = smap }
+
+        mprog <- simplifyProgram sopt "Simplify-Three" coreMini mprog
+
+
+        -- annotate our bindings for further passes
+        mprog <- return $ etaAnnotateProgram mprog
+        mprog <- Demand.analyzeProgram mprog
+        mprog <- return $ E.CPR.cprAnalyzeProgram mprog
hunk ./Main.hs 427
+        put $ fromList [ (tvrIdent v,(v,lc)) | (v,lc) <- programDs mprog] `union` smap
+
+        liftIO $ wdump FD.Progress $ let SubProgram rec = progType mprog in  putErr (if rec then "*" else ".")
+        return mprog
+
+    prog <- barendregtProg prog { progStats = mempty }
+    prog <- evalStateT (programMapProgGroups mempty optWW prog) (SS.so_boundVars sopt)
+    progress "!"
+    hFlush stdout >> hFlush stderr
+    wdump FD.Progress $
+        Stats.printLStat (optStatLevel options) "MainPass Stats" (progStats prog)
+    {-
hunk ./Main.hs 530
+    -}
hunk ./Main.hs 535
-    Stats.print "Optimization" stats
hunk ./Main.hs 540
+{-
hunk ./Main.hs 553
+    -}
hunk ./Main.hs 558
-    Stats.print "Optimization" stats
hunk ./Main.hs 938
-simplifyProgram sopt name dodump prog = do
+simplifyProgram sopt name dodump prog = liftIO $ do
hunk ./Main.hs 997
-transformProgram :: TransformParms -> Program -> IO Program
+transformProgram :: MonadIO m => TransformParms -> Program -> m Program
hunk ./Main.hs 1001
-transformProgram tp prog = do
+transformProgram tp prog = liftIO $ do