1----------------------------------------------------------------------------- 2-- 3-- Code generation for coverage 4-- 5-- (c) Galois Connections, Inc. 2006 6-- 7----------------------------------------------------------------------------- 8 9module GHC.StgToCmm.Hpc ( initHpc, mkTickBox ) where 10 11import GhcPrelude 12 13import GHC.StgToCmm.Monad 14 15import MkGraph 16import CmmExpr 17import CLabel 18import Module 19import CmmUtils 20import GHC.StgToCmm.Utils 21import HscTypes 22import DynFlags 23 24import Control.Monad 25 26mkTickBox :: DynFlags -> Module -> Int -> CmmAGraph 27mkTickBox dflags mod n 28 = mkStore tick_box (CmmMachOp (MO_Add W64) 29 [ CmmLoad tick_box b64 30 , CmmLit (CmmInt 1 W64) 31 ]) 32 where 33 tick_box = cmmIndex dflags W64 34 (CmmLit $ CmmLabel $ mkHpcTicksLabel $ mod) 35 n 36 37initHpc :: Module -> HpcInfo -> FCode () 38-- Emit top-level tables for HPC and return code to initialise 39initHpc _ (NoHpcInfo {}) 40 = return () 41initHpc this_mod (HpcInfo tickCount _hashNo) 42 = do dflags <- getDynFlags 43 when (gopt Opt_Hpc dflags) $ 44 do emitDataLits (mkHpcTicksLabel this_mod) 45 [ (CmmInt 0 W64) 46 | _ <- take tickCount [0 :: Int ..] 47 ] 48 49