Move StableLoc (and assoc. access functions) from CgBindery to CgMonad. Done to avoid having to give the home of Maybe in CgBindery.hi-boot.
_interface_ CgBindery 1
_exports_
-CgBindery CgBindings CgIdInfo(MkCgIdInfo) VolatileLoc StableLoc nukeVolatileBinds maybeAStkLoc maybeBStkLoc;
+CgBindery CgBindings CgIdInfo(MkCgIdInfo) VolatileLoc nukeVolatileBinds;
_declarations_
1 type CgBindings = Id.IdEnv CgIdInfo;
-1 data CgIdInfo = MkCgIdInfo Id.Id CgBindery.VolatileLoc CgBindery.StableLoc ClosureInfo!LambdaFormInfo;
+1 data CgIdInfo = MkCgIdInfo Id.Id CgBindery.VolatileLoc CgMonad.StableLoc ClosureInfo!LambdaFormInfo;
1 data VolatileLoc;
-1 data StableLoc;
1 nukeVolatileBinds _:_ CgBindery.CgBindings -> CgBindery.CgBindings ;;
-1 maybeAStkLoc _:_ CgBindery.StableLoc -> PrelBase.Maybe HeapOffs.VirtualSpAOffset ;;
-1 maybeBStkLoc _:_ CgBindery.StableLoc -> PrelBase.Maybe HeapOffs.VirtualSpBOffset ;;
module CgBindery (
SYN_IE(CgBindings), CgIdInfo(..){-dubiously concrete-},
- StableLoc, VolatileLoc,
+ VolatileLoc, StableLoc, -- (the latter is defined in CgMonad)
- maybeAStkLoc, maybeBStkLoc,
+-- maybeAStkLoc, maybeBStkLoc,
stableAmodeIdInfo, heapIdInfo, newTempAmodeAndIdInfo,
letNoEscapeIdInfo, idInfoToAmode,
idSetToList,
GenId{-instance NamedThing-}, SYN_IE(Id)
)
-import Literal ( Literal )
import Maybes ( catMaybes )
import Name ( isLocallyDefined, isWiredInName,
Name{-instance NamedThing-}, NamedThing(..) )
| VirNodeLoc VirtualHeapOffset -- Cts of offset indirect from Node
-- ie *(Node+offset)
-data StableLoc
- = NoStableLoc
- | VirAStkLoc VirtualSpAOffset
- | VirBStkLoc VirtualSpBOffset
- | LitLoc Literal
- | StableAmodeLoc CAddrMode
-
--- these are so StableLoc can be abstract:
-
-maybeAStkLoc (VirAStkLoc offset) = Just offset
-maybeAStkLoc _ = Nothing
-
-maybeBStkLoc (VirBStkLoc offset) = Just offset
-maybeBStkLoc _ = Nothing
\end{code}
%************************************************************************
import PreludeStdIO ( Maybe )
import CgBindery ( CgBindings(..), CgIdInfo(..),
- VolatileLoc, StableLoc,
- nukeVolatileBinds,
- maybeAStkLoc, maybeBStkLoc
+ VolatileLoc, nukeVolatileBinds
)
import CgUsages ( getSpBRelOffset )
import AbsCSyn ( RegRelative )
-import CgMonad ( FCode(..) )
+import CgMonad ( FCode(..), StableLoc, maybeAStkLoc, maybeBStkLoc )
import ClosureInfo ( LambdaFormInfo )
import HeapOffs ( VirtualSpAOffset(..), VirtualSpBOffset(..) )
import Id ( IdEnv(..), Id(..) )
Sequel(..), -- ToDo: unabstract?
sequelToAmode,
+ StableLoc(..), maybeAStkLoc, maybeBStkLoc,
+
-- out of general friendliness, we also export ...
CgInfoDownwards(..), CgState(..), -- non-abstract
CompilationInfo(..)
SYN_IE(ConTag), GenId{-instance Outputable-},
SYN_IE(Id)
)
+import Literal ( Literal )
import Maybes ( maybeToBool )
import Outputable ( PprStyle(..), Outputable(..) )
import PprType ( GenType{-instance Outputable-} )
sequelToAmode (CaseAlts amode _) = returnFC amode
\end{code}
+@StableLoc@ encodes where an Id can be found, used by
+the @CgBindings@ environment in @CgBindery@.
+
+The natural home for @StableLoc@ is @CgBindery@, but it is
+stuck out here to avoid giving the type for @maybeBStkLoc@
+and @maybeAStkLoc@ in the @.hi-boot@ file for @CgBindery@.
+This is problematic since they're both returning @Maybe@ types,
+which lives in @PrelBase@ (< ghc-2.09) or @PrelMaybe@ (> 2.09).
+ToDo: after the next major release, move it back.
+
+\begin{code}
+data StableLoc
+ = NoStableLoc
+ | VirAStkLoc VirtualSpAOffset
+ | VirBStkLoc VirtualSpBOffset
+ | LitLoc Literal
+ | StableAmodeLoc CAddrMode
+
+-- these are so StableLoc can be abstract:
+
+maybeAStkLoc (VirAStkLoc offset) = Just offset
+maybeAStkLoc _ = Nothing
+
+maybeBStkLoc (VirBStkLoc offset) = Just offset
+maybeBStkLoc _ = Nothing
+\end{code}
+
See the NOTES about the details of stack/heap usage tracking.
\begin{code}
%************************************************************************
%* *
-\subsection[CgStackery-deadslots]{Finding dead stack slots}
+\subsection[CgMonad-deadslots]{Finding dead stack slots}
%* *
%************************************************************************