diff options
Diffstat (limited to 'compiler/codeGen/CgProf.hs')
-rw-r--r-- | compiler/codeGen/CgProf.hs | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/compiler/codeGen/CgProf.hs b/compiler/codeGen/CgProf.hs index 13667c399a..3e247ff4d6 100644 --- a/compiler/codeGen/CgProf.hs +++ b/compiler/codeGen/CgProf.hs @@ -21,7 +21,7 @@ module CgProf ( enterCostCentreThunk, enterCostCentreFun, costCentreFrom, - curCCS, curCCSAddr, + curCCS, storeCurCCS, emitCostCentreDecl, emitCostCentreStackDecl, emitSetCCC, @@ -66,11 +66,10 @@ import Control.Monad -- Expression representing the current cost centre stack curCCS :: CmmExpr -curCCS = CmmLoad curCCSAddr bWord +curCCS = CmmReg (CmmGlobal CCCS) --- Address of current CCS variable, for storing into -curCCSAddr :: CmmExpr -curCCSAddr = CmmLit (CmmLabel (mkCmmDataLabel rtsPackageId (fsLit "CCCS"))) +storeCurCCS :: CmmExpr -> CmmStmt +storeCurCCS e = CmmAssign (CmmGlobal CCCS) e mkCCostCentre :: CostCentre -> CmmLit mkCCostCentre cc = CmmLabel (mkCCLabel cc) @@ -135,14 +134,15 @@ profAlloc words ccs enterCostCentreThunk :: CmmExpr -> Code enterCostCentreThunk closure = ifProfiling $ do - stmtC $ CmmStore curCCSAddr (costCentreFrom closure) + stmtC $ storeCurCCS (costCentreFrom closure) -enterCostCentreFun :: CostCentreStack -> CmmExpr -> Code -enterCostCentreFun ccs closure = +enterCostCentreFun :: CostCentreStack -> CmmExpr -> [GlobalReg] -> Code +enterCostCentreFun ccs closure vols = ifProfiling $ do if isCurrentCCS ccs - then emitRtsCall rtsPackageId (fsLit "enterFunCCS") - [CmmHinted (costCentreFrom closure) AddrHint] + then emitRtsCallWithVols rtsPackageId (fsLit "enterFunCCS") + [CmmHinted (CmmReg (CmmGlobal BaseReg)) AddrHint, + CmmHinted (costCentreFrom closure) AddrHint] vols else return () -- top-level function, nothing to do ifProfiling :: Code -> Code @@ -226,7 +226,7 @@ emitSetCCC cc tick push tmp <- newTemp bWord -- TODO FIXME NOW pushCostCentre tmp curCCS cc when tick $ stmtC (bumpSccCount (CmmReg (CmmLocal tmp))) - when push $ stmtC (CmmStore curCCSAddr (CmmReg (CmmLocal tmp))) + when push $ stmtC (storeCurCCS (CmmReg (CmmLocal tmp))) pushCostCentre :: LocalReg -> CmmExpr -> CostCentre -> Code pushCostCentre result ccs cc |