import Id ( Id, idName, idType, idCafInfo )
import IdInfo ( mayHaveCafRefs )
import Packages ( isDllName )
+import PackageConfig ( PackageId )
import Literal ( Literal, literalType )
import ForeignCall ( ForeignCall )
import DataCon ( DataCon, dataConName )
import UniqSet ( isEmptyUniqSet, uniqSetToList, UniqSet )
import Unique ( Unique )
import Bitmap
-import DynFlags ( DynFlags )
-import Packages ( HomeModules )
import StaticFlags ( opt_SccProfilingOn )
+import Module ( Module, pprModule )
\end{code}
%************************************************************************
isStgTypeArg (StgTypeArg _) = True
isStgTypeArg other = False
-isDllArg :: HomeModules -> StgArg -> Bool
+isDllArg :: PackageId -> StgArg -> Bool
-- Does this argument refer to something in a different DLL?
-isDllArg hmods (StgTypeArg v) = False
-isDllArg hmods (StgVarArg v) = isDllName hmods (idName v)
-isDllArg hmods (StgLitArg lit) = False
+isDllArg this_pkg (StgTypeArg v) = False
+isDllArg this_pkg (StgVarArg v) = isDllName this_pkg (idName v)
+isDllArg this_pkg (StgLitArg lit) = False
-isDllConApp :: HomeModules -> DataCon -> [StgArg] -> Bool
+isDllConApp :: PackageId -> DataCon -> [StgArg] -> Bool
-- Does this constructor application refer to
-- anything in a different DLL?
-- If so, we can't allocate it statically
-isDllConApp hmods con args
- = isDllName hmods (dataConName con) || any (isDllArg hmods) args
+isDllConApp this_pkg con args
+ = isDllName this_pkg (dataConName con) || any (isDllArg this_pkg) args
stgArgType :: StgArg -> Type
-- Very half baked becase we have lost the type arguments
| StgOpApp StgOp -- Primitive op or foreign call
[GenStgArg occ] -- Saturated
- Type -- Result type; we need to know the result type
- -- so that we can assign result registers.
+ Type -- Result type
+ -- We need to know this so that we can
+ -- assign result registers
\end{code}
%************************************************************************
| StgSCC
CostCentre -- label of SCC expression
(GenStgExpr bndr occ) -- scc expression
+\end{code}
+
+%************************************************************************
+%* *
+\subsubsection{@GenStgExpr@: @hpc@ expressions}
+%* *
+%************************************************************************
+
+Finally for @scc@ expressions we introduce a new STG construct.
+
+\begin{code}
+ | StgTick
+ Module -- the module of the source of this tick
+ Int -- tick number
+ (GenStgExpr bndr occ) -- sub expression
-- end of GenStgExpr
\end{code}
= sep [ hsep [ptext SLIT("_scc_"), ppr cc],
pprStgExpr expr ]
+pprStgExpr (StgTick m n expr)
+ = sep [ hsep [ptext SLIT("_tick_"), pprModule m,text (show n)],
+ pprStgExpr expr ]
+
pprStgExpr (StgCase expr lvs_whole lvs_rhss bndr srt alt_type alts)
= sep [sep [ptext SLIT("case"),
nest 4 (hsep [pprStgExpr expr,