X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Fcmm%2FCmmCPSZ.hs;h=b6b77f0f10b75ceb39510cb7807ab50c0b69716f;hp=a09c8a6052bcca055e41f2ec7fdb08a1ca49a677;hb=0d80489c9b9f2421f65d8dd86c1e50c6bb429715;hpb=724a9e83f9498382e3580d26a7dd7cd6b108408c diff --git a/compiler/cmm/CmmCPSZ.hs b/compiler/cmm/CmmCPSZ.hs index a09c8a6..b6b77f0 100644 --- a/compiler/cmm/CmmCPSZ.hs +++ b/compiler/cmm/CmmCPSZ.hs @@ -5,6 +5,7 @@ module CmmCPSZ ( protoCmmCPSZ ) where +import BlockId import Cmm import CmmCommonBlockElimZ import CmmContFlowOpt @@ -53,14 +54,13 @@ cpsTop _ p@(CmmData {}) = return p cpsTop hsc_env (CmmProc h l args g) = do dump Opt_D_dump_cmmz "Pre Proc Points Added" g let callPPs = callProcPoints g - procPoints <- run $ minimalProcPointSet callPPs (runTx cmmCfgOptsZ g) - let varSlots = emptyFM g <- return $ map_nodes id NotSpillOrReload id g -- Change types of middle nodes to allow spill/reload g <- dual_rewrite Opt_D_dump_cmmz "spills and reloads" - (dualLivenessWithInsertion emptyBlockSet) g - (varSlots, g) <- trim g >>= run . elimSpillAndReload varSlots - g <- run $ addProcPointProtocols callPPs procPoints args g + (dualLivenessWithInsertion callPPs) g + (varSlots, g) <- trim g >>= return . elimSpillAndReload emptyFM + procPoints <- run $ minimalProcPointSet callPPs (runTx cmmCfgOptsZ g) + g <- run $ addProcPointProtocols callPPs procPoints g dump Opt_D_dump_cmmz "Post Proc Points Added" g g <- return $ map_nodes id NotSpillOrReload id g -- Change types of middle nodes to allow spill/reload @@ -72,7 +72,7 @@ cpsTop hsc_env (CmmProc h l args g) = g <- trim g >>= dual_rewrite Opt_D_dump_cmmz "Dead Assignment Elimination" (removeDeadAssignmentsAndReloads procPoints) -- Remove redundant reloads (and any other redundant asst) - (_, g) <- trim g >>= run . elimSpillAndReload varSlots + (_, g) <- trim g >>= return . elimSpillAndReload varSlots gs <- run $ splitAtProcPoints args l procPoints g gs `seq` dump Opt_D_dump_cmmz "Pre common block elimination" g g <- return $ elimCommonBlocks g