From: Michael D. Adams Date: Tue, 3 Jul 2007 21:17:34 +0000 (+0000) Subject: Factor cmmToRawCmm completely out of CPS X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=3d297c5eb17478cc40b543acff017b925f6ea3c2 Factor cmmToRawCmm completely out of CPS This patch also fixes how the CPS handles functions with an empty body. Factoring cmmToRawCmm out of the CPS pass made that fix easier. --- diff --git a/compiler/cmm/CmmCPS.hs b/compiler/cmm/CmmCPS.hs index 37a0251..cb36de4 100644 --- a/compiler/cmm/CmmCPS.hs +++ b/compiler/cmm/CmmCPS.hs @@ -43,7 +43,7 @@ import Data.List ----------------------------------------------------------------------------- cmmCPS :: DynFlags -- ^ Dynamic flags: -dcmm-lint -ddump-cps-cmm -> [GenCmm CmmStatic CmmInfo CmmStmt] -- ^ Input C-- with Proceedures - -> IO [GenCmm CmmStatic [CmmStatic] CmmStmt] -- ^ Output CPS transformed C-- + -> IO [GenCmm CmmStatic CmmInfo CmmStmt] -- ^ Output CPS transformed C-- cmmCPS dflags abstractC = do when (dopt Opt_DoCmmLinting dflags) $ do showPass dflags "CmmLint" @@ -112,9 +112,17 @@ force_gc_block old_info stack_use block_id fun_label formals = cpsProc :: UniqSupply -> GenCmmTop CmmStatic CmmInfo CmmStmt -- ^Input proceedure - -> [GenCmmTop CmmStatic [CmmStatic] CmmStmt] -- ^Output proceedure and continuations -cpsProc uniqSupply (CmmData sec dat) = [CmmData sec dat] -cpsProc uniqSupply (CmmProc info ident params blocks) = info_procs + -> [GenCmmTop CmmStatic CmmInfo CmmStmt] -- ^Output proceedure and continuations + +-- Data blocks don't need to be CPS transformed +cpsProc uniqSupply proc@(CmmData _ _) = [proc] + +-- Empty functions just don't work with the CPS algorithm, but +-- they don't need the transformation anyway so just output them directly +cpsProc uniqSupply proc@(CmmProc _ _ _ []) = [proc] + +-- CPS transform for those procs that actually need it +cpsProc uniqSupply (CmmProc info ident params blocks) = cps_procs where (uniqSupply1, uniqSupply2) = splitUniqSupply uniqSupply uniques :: [[Unique]] @@ -203,11 +211,6 @@ cpsProc uniqSupply (CmmProc info ident params blocks) = info_procs cps_procs :: [CmmTop] cps_procs = zipWith (continuationToProc formats' stack_use) proc_uniques continuations' - -- Convert the info tables from CmmInfo to [CmmStatic] - -- We might want to put this in another pass eventually - info_procs :: [RawCmmTop] - info_procs = concat (zipWith mkInfoTable info_uniques cps_procs) - ----------------------------------------------------------------------------- collectNonProcPointTargets ::