- print $ "live slot analysis results: " ++ (showSDoc $ ppr slotEnv)
- cafEnv <- run $ cafAnal g
- print $ "live CAF analysis results: " ++ (showSDoc $ ppr cafEnv)
- slotIGraph <- return $ igraph areaBuilder slotEnv g
- print $ "slot IGraph: " ++ (showSDoc $ ppr slotIGraph)
- print $ "graph before procPointMap: " ++ (showSDoc $ ppr g)
- procPointMap <- run $ procPointAnalysis procPoints g
- let areaMap = layout procPoints slotEnv g
- g <- run $ manifestSP procPoints procPointMap areaMap g
- procPointMap <- run $ procPointAnalysis procPoints g
- gs <- run $ splitAtProcPoints l callPPs procPoints procPointMap slotEnv areaMap
- (CmmProc h l args g)
- return gs
- --return $ [CmmProc h l args (runTx cmmCfgOptsZ g)]
+ mbpprTrace "live slot analysis results: " (ppr slotEnv) $ return ()
+ cafEnv <-
+ -- trace "post liveSlotAnal" $
+ run $ cafAnal g
+ (cafEnv, slotEnv) <-
+ -- trace "post print cafAnal" $
+ return $ extendEnvsForSafeForeignCalls cafEnv slotEnv g
+ mbpprTrace "slotEnv extended for safe foreign calls: " (ppr slotEnv) $ return ()
+ let areaMap = layout procPoints slotEnv entry_off g
+ mbpprTrace "areaMap" (ppr areaMap) $ return ()
+
+ ------------ Manifest the the stack pointer --------
+ g <- run $ manifestSP areaMap entry_off g
+ dump Opt_D_dump_cmmz "after manifestSP" g
+ -- UGH... manifestSP can require updates to the procPointMap.
+ -- We can probably do something quicker here for the update...
+
+ ------------- Split into separate procedures ------------
+ procPointMap <- run $ procPointAnalysis procPoints g
+ dump Opt_D_dump_cmmz "procpoint map" procPointMap
+ gs <- run $ splitAtProcPoints l callPPs procPoints procPointMap
+ (CmmProc h l args (stackInfo, g))
+ mapM_ (dump Opt_D_dump_cmmz "after splitting") gs
+
+ ------------- More CAFs and foreign calls ------------
+ let localCAFs = catMaybes $ map (localCAFInfo cafEnv) gs
+ mbpprTrace "localCAFs" (ppr localCAFs) $ return ()
+ gs <- liftM concat $ run $ foldM lowerSafeForeignCalls [] gs
+ mapM_ (dump Opt_D_dump_cmmz "after lowerSafeForeignCalls") gs
+
+ -- NO MORE GRAPH TRANSFORMATION AFTER HERE -- JUST MAKING INFOTABLES
+ let gs' = map (setInfoTableStackMap slotEnv areaMap) gs
+ mapM_ (dump Opt_D_dump_cmmz "after setInfoTableStackMap") gs'
+ let gs'' = map (bundleCAFs cafEnv) gs'
+ mapM_ (dump Opt_D_dump_cmmz "after bundleCAFs") gs''
+ return (localCAFs, gs'')