suited to spineless tagless code generation.
\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 StgSyn (
GenStgArg(..),
GenStgLiveVars,
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 Unique ( Unique )
import Bitmap
import StaticFlags ( opt_SccProfilingOn )
+import Module
\end{code}
%************************************************************************
\begin{code}
| StgLit Literal
+ -- StgConApp is vital for returning unboxed tuples
+ -- which can't be let-bound first
| StgConApp DataCon
[GenStgArg occ] -- Saturated
| 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,