455902d4df7ff2060e73d92a3dc65fc93c7b0927
[ghc-hetmet.git] / ghc / compiler / basicTypes / IdLoop.lhi
1 Breaks the IdInfo/<everything> loops.
2
3 \begin{code}
4 interface IdLoop where
5
6 import PreludePS        ( _PackedString )
7 import PreludeStdIO     ( Maybe )
8
9 import BinderInfo       ( BinderInfo )
10 import CoreSyn          ( CoreExpr(..), GenCoreExpr, GenCoreArg )
11 import CoreUnfold       ( FormSummary(..), UnfoldingDetails(..), UnfoldingGuidance(..) )
12 import CoreUtils        ( unTagBinders )
13 import Id               ( externallyVisibleId, isDataCon, isWorkerId, isWrapperId,
14                           unfoldingUnfriendlyId, getIdInfo, nmbrId,
15                           nullIdEnv, lookupIdEnv, IdEnv(..),
16                           Id(..), GenId
17                         )
18 import IdInfo           ( IdInfo )
19 import Literal          ( Literal )
20 import MagicUFs         ( mkMagicUnfoldingFun, MagicUnfoldingFun )
21 import OccurAnal        ( occurAnalyseGlobalExpr )
22 import Outputable       ( Outputable(..) )
23 import PprEnv           ( NmbrEnv )
24 import PprStyle         ( PprStyle )
25 import PprType          ( pprParendGenType )
26 import Pretty           ( PrettyRep )
27 import Type             ( GenType )
28 import TyVar            ( GenTyVar )
29 import UniqFM           ( UniqFM )
30 import Unique           ( Unique )
31 import Usage            ( GenUsage )
32 import Util             ( Ord3(..) )
33 import WwLib            ( mAX_WORKER_ARGS )
34
35 occurAnalyseGlobalExpr  :: GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenTyVar (GenUsage Unique)) Unique -> GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique), BinderInfo) (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenTyVar (GenUsage Unique)) Unique
36 externallyVisibleId     :: Id       -> Bool
37 isDataCon               :: GenId ty -> Bool
38 isWorkerId              :: GenId ty -> Bool
39 isWrapperId             :: Id       -> Bool
40 unfoldingUnfriendlyId   :: Id       -> Bool
41 getIdInfo               :: Id       -> IdInfo
42 nullIdEnv               :: UniqFM a
43 lookupIdEnv             :: UniqFM b -> GenId a -> Maybe b
44 mAX_WORKER_ARGS         :: Int
45 nmbrId                  :: Id -> NmbrEnv -> (NmbrEnv, Id)
46 pprParendGenType                :: (Eq a, Outputable a, Eq b, Outputable b) => PprStyle -> GenType a b -> Int -> Bool -> PrettyRep
47 unTagBinders :: GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique), a) b c d -> GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) b c d
48
49 mkMagicUnfoldingFun     :: Unique -> MagicUnfoldingFun
50
51 type IdEnv a = UniqFM a
52 type CoreExpr = GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique))
53                             (GenId (GenType (GenTyVar (GenUsage Unique)) Unique))
54                             (GenTyVar (GenUsage Unique)) Unique
55
56 instance Outputable UnfoldingGuidance
57 instance Eq         Unique
58 instance Outputable Unique
59 instance Eq         (GenTyVar a)
60 instance Ord3       (GenTyVar a)
61 instance Outputable (GenTyVar a)
62 instance (Outputable a) => Outputable (GenId a)
63 instance (Eq a, Outputable a, Eq b, Outputable b) => Outputable (GenType a b)
64
65 data NmbrEnv
66 data MagicUnfoldingFun
67 data FormSummary   = WhnfForm | BottomForm | OtherForm
68 data UnfoldingDetails
69   = NoUnfoldingDetails
70   | OtherLitForm [Literal]
71   | OtherConForm [GenId (GenType (GenTyVar (GenUsage Unique)) Unique)]
72   | GenForm FormSummary (GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique), BinderInfo) (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenTyVar (GenUsage Unique)) Unique) UnfoldingGuidance
73   | MagicForm Unique MagicUnfoldingFun
74
75 data UnfoldingGuidance
76   = UnfoldNever
77   | UnfoldAlways
78   | EssentialUnfolding
79   | UnfoldIfGoodArgs Int Int [Bool] Int
80   | BadUnfolding
81 \end{code}