X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Fprofiling%2FSCCfinal.lhs;h=dd72341f59b589fcc9f34063e44dca013ee24b9f;hp=7aaf1096978115f19d8de7a2af73dc78b376b90c;hb=1a7d1b77334529ca96ed4cbc03fcb5f55dc2de4a;hpb=e07e2550074ddc7d96e2092e56add418403bd29a diff --git a/compiler/profiling/SCCfinal.lhs b/compiler/profiling/SCCfinal.lhs index 7aaf109..dd72341 100644 --- a/compiler/profiling/SCCfinal.lhs +++ b/compiler/profiling/SCCfinal.lhs @@ -23,23 +23,28 @@ This is now a sort-of-normal STG-to-STG pass (WDP 94/06), run by stg2stg. * "Distributes" given cost-centres to all as-yet-unmarked RHSs. \begin{code} +{-# OPTIONS -w #-} +-- The above warning supression flag is a temporary kludge. +-- While working on this module you are encouraged to remove it and fix +-- any warnings in the module. See +-- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings +-- for details + module SCCfinal ( stgMassageForProfiling ) where #include "HsVersions.h" import StgSyn -import PackageConfig ( PackageId ) import StaticFlags ( opt_AutoSccsOnIndividualCafs ) import CostCentre -- lots of things import Id import Name -import Module ( Module ) +import Module import UniqSupply ( splitUniqSupply, UniqSupply ) #ifdef PROF_DO_BOXING import UniqSupply ( uniqFromSupply ) #endif -import Unique ( Unique ) import VarSet import ListSetOps ( removeDups ) import Outputable @@ -137,7 +142,7 @@ stgMassageForProfiling this_pkg mod_name us stg_binds modl | Just m <- nameModule_maybe (idName binder) = m | otherwise = mod_name in - collectCC cc `thenMM_` + collectNewCC cc `thenMM_` collectCCS ccs `thenMM_` returnMM ccs else @@ -418,6 +423,14 @@ collectCC cc mod_name scope_cc us ids (local_ccs, extern_ccs, ccss) else -- must declare it "extern" ((local_ccs, cc : extern_ccs, ccss), ()) +-- Version of collectCC used when we definitely want to declare this +-- CC as local, even if its module name is not the same as the current +-- module name (eg. the special :Main module) see bug #249, #1472, +-- test prof001,prof002. +collectNewCC :: CostCentre -> MassageM () +collectNewCC cc mod_name scope_cc us ids (local_ccs, extern_ccs, ccss) + = ((cc : local_ccs, extern_ccs, ccss), ()) + collectCCS :: CostCentreStack -> MassageM () collectCCS ccs mod_name scope_cc us ids (local_ccs, extern_ccs, ccss)