summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2012-01-27 11:22:07 +0000
committerSimon Marlow <marlowsd@gmail.com>2012-01-27 11:22:07 +0000
commit79c8c5cb20aa57e7b0a9fa27cbf3e4287acb203f (patch)
tree40e893bfa7723e879e518457be5ebc4dcb04af2a
parent293054a611f3f43126e1f45c2fb3c973cee87c15 (diff)
downloadhaskell-79c8c5cb20aa57e7b0a9fa27cbf3e4287acb203f.tar.gz
Move the 2nd control-flow optimisation pass
It was causing wrong info tables where it was; I'm not entirely sure why.
-rw-r--r--compiler/cmm/CmmPipeline.hs8
1 files changed, 5 insertions, 3 deletions
diff --git a/compiler/cmm/CmmPipeline.hs b/compiler/cmm/CmmPipeline.hs
index 7af9f5729d..8bccc9d103 100644
--- a/compiler/cmm/CmmPipeline.hs
+++ b/compiler/cmm/CmmPipeline.hs
@@ -160,15 +160,17 @@ cpsTop hsc_env (CmmProc h@(TopInfo {stack_info=StackInfo {arg_space=entry_off}})
gs <- {-# SCC "lowerSafeForeignCalls" #-} run $ mapM (lowerSafeForeignCalls areaMap) gs
dumps Opt_D_dump_cmmz_lower "Post lowerSafeForeignCalls" gs
+ -- NO MORE GRAPH TRANSFORMATION AFTER HERE -- JUST MAKING INFOTABLES
+ gs <- {-# SCC "setInfoTableStackMap" #-} return $ map (setInfoTableStackMap slotEnv areaMap) gs
+ dumps Opt_D_dump_cmmz_info "after setInfoTableStackMap" gs
+
----------- Control-flow optimisations ---------------
gs <- {-# SCC "cmmCfgOpts(2)" #-} return $ map cmmCfgOptsProc gs
dumps Opt_D_dump_cmmz_cfg "Post control-flow optimsations" gs
- -- NO MORE GRAPH TRANSFORMATION AFTER HERE -- JUST MAKING INFOTABLES
- gs <- {-# SCC "setInfoTableStackMap" #-} return $ map (setInfoTableStackMap slotEnv areaMap) gs
- dumps Opt_D_dump_cmmz_info "after setInfoTableStackMap" gs
gs <- {-# SCC "bundleCAFs" #-} return $ map (bundleCAFs cafEnv) gs
dumps Opt_D_dump_cmmz_cafs "after bundleCAFs" gs
+
return (localCAFs, gs)
-- gs :: [ (CAFSet, CmmDecl) ]