diff options
author | Simon Marlow <marlowsd@gmail.com> | 2012-07-06 11:27:07 +0100 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2012-07-06 16:49:58 +0100 |
commit | 147b54230624617ef7c3056b627053ce9a0a80e9 (patch) | |
tree | 36b40473d7612556e83f233f459520892e50c7bb | |
parent | 7d7c284bbc7204ee430e0717e8883e0d38035bb8 (diff) | |
download | haskell-147b54230624617ef7c3056b627053ce9a0a80e9.tar.gz |
Generate slightly less crap to be cleaned up later
-rw-r--r-- | compiler/codeGen/StgCmmHeap.hs | 17 | ||||
-rw-r--r-- | compiler/codeGen/StgCmmMonad.hs | 8 |
2 files changed, 14 insertions, 11 deletions
diff --git a/compiler/codeGen/StgCmmHeap.hs b/compiler/codeGen/StgCmmHeap.hs index 611304b5e0..bc61cf5b97 100644 --- a/compiler/codeGen/StgCmmHeap.hs +++ b/compiler/codeGen/StgCmmHeap.hs @@ -45,6 +45,8 @@ import FastString( mkFastString, fsLit ) import Constants import Util +import Control.Monad (when) + ----------------------------------------------------------- -- Initialise dynamic heap objects ----------------------------------------------------------- @@ -491,20 +493,15 @@ do_checks :: Bool -- Should we check the stack? -> FCode () do_checks checkStack alloc do_gc = do gc_id <- newLabelC - hp_check <- if alloc == 0 - then return mkNop - else do - ifthen <- mkCmmIfThen hp_oflo (alloc_n <*> mkBranch gc_id) - return (mkAssign hpReg bump_hp <*> ifthen) - if checkStack - then emit =<< mkCmmIfThenElse sp_oflo (mkBranch gc_id) hp_check - else emit hp_check + when checkStack $ + emit =<< mkCmmIfGoto sp_oflo gc_id - emit $ mkComment (mkFastString "outOfLine should follow:") + when (alloc /= 0) $ do + emitAssign hpReg bump_hp + emit =<< mkCmmIfThen hp_oflo (alloc_n <*> mkBranch gc_id) emitOutOfLine gc_id $ - mkComment (mkFastString "outOfLine here") <*> do_gc -- this is expected to jump back somewhere -- Test for stack pointer exhaustion, then diff --git a/compiler/codeGen/StgCmmMonad.hs b/compiler/codeGen/StgCmmMonad.hs index cc9919a4a0..602bdebcad 100644 --- a/compiler/codeGen/StgCmmMonad.hs +++ b/compiler/codeGen/StgCmmMonad.hs @@ -29,7 +29,8 @@ module StgCmmMonad ( getCmm, cgStmtsToBlocks, getCodeR, getCode, getHeapUsage, - mkCmmIfThenElse, mkCmmIfThen, mkCall, mkCmmCall, mkSafeCall, + mkCmmIfThenElse, mkCmmIfThen, mkCmmIfGoto, + mkCall, mkCmmCall, mkSafeCall, forkClosureBody, forkStatics, forkAlts, forkProc, codeOnly, @@ -676,6 +677,11 @@ mkCmmIfThenElse e tbranch fbranch = do mkLabel tid <*> tbranch <*> mkBranch endif <*> mkLabel fid <*> fbranch <*> mkLabel endif +mkCmmIfGoto :: CmmExpr -> BlockId -> FCode CmmAGraph +mkCmmIfGoto e tid = do + endif <- newLabelC + return $ mkCbranch e tid endif <*> mkLabel endif + mkCmmIfThen :: CmmExpr -> CmmAGraph -> FCode CmmAGraph mkCmmIfThen e tbranch = do endif <- newLabelC |