e22065b459d968858ab26161f089b46e138dcb73
[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 FastString       ( FastString )
8 import PreludeStdIO     ( Maybe )
9
10 import BinderInfo       ( BinderInfo )
11 import CoreSyn          ( CoreExpr(..), GenCoreExpr, GenCoreArg )
12 import CoreUnfold       ( Unfolding(..), UnfoldingGuidance(..), mkUnfolding,
13                           SimpleUnfolding(..), FormSummary(..), noUnfolding  )
14 import CoreUtils        ( unTagBinders )
15 import Id               ( externallyVisibleId, isDataCon, isWorkerId, isWrapperId,
16                           unfoldingUnfriendlyId, getIdInfo, nmbrId, pprId,
17                           nullIdEnv, lookupIdEnv, IdEnv(..),
18                           Id(..), GenId
19                         )
20 import CostCentre       ( CostCentre,
21                           noCostCentre, subsumedCosts, cafifyCC,
22                           useCurrentCostCentre, dontCareCostCentre,
23                           overheadCostCentre, preludeCafsCostCentre,
24                           preludeDictsCostCentre, mkAllCafsCC,
25                           mkAllDictsCC, mkUserCC
26                         )
27 import IdInfo           ( IdInfo, DemandInfo )
28 import SpecEnv          ( SpecEnv, nullSpecEnv, isNullSpecEnv )
29 import Literal          ( Literal )
30 import MagicUFs         ( mkMagicUnfoldingFun, MagicUnfoldingFun )
31 import OccurAnal        ( occurAnalyseGlobalExpr )
32 import Outputable       ( Outputable(..), PprStyle )
33 import PprEnv           ( NmbrEnv )
34 import PprType          ( pprParendGenType )
35 import PragmaInfo       ( PragmaInfo )
36 import Pretty           ( Doc )
37 import Type             ( GenType )
38 import TyVar            ( GenTyVar )
39 import UniqFM           ( UniqFM )
40 import Unique           ( Unique )
41 import Usage            ( GenUsage )
42 import Util             ( Ord3(..) )
43 import WwLib            ( mAX_WORKER_ARGS )
44 import StdIdInfo        ( addStandardIdInfo )   -- Used in Id, but StdIdInfo needs lots of stuff from Id
45
46 addStandardIdInfo :: Id -> Id
47
48 nullSpecEnv   :: SpecEnv
49 isNullSpecEnv :: SpecEnv -> Bool
50
51 -- 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
52 -- unTagBinders :: GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique), a) b c d -> GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) b c d
53
54 externallyVisibleId     :: Id       -> Bool
55 isDataCon               :: GenId ty -> Bool
56 isWorkerId              :: GenId ty -> Bool
57 nmbrId                  :: Id -> NmbrEnv -> (NmbrEnv, Id)
58 pprId                   :: Outputable ty => PprStyle -> GenId ty -> Doc
59 mkMagicUnfoldingFun     :: Unique -> MagicUnfoldingFun
60
61
62 type IdEnv a = UniqFM a
63 type CoreExpr = GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique))
64                             (GenId (GenType (GenTyVar (GenUsage Unique)) Unique))
65                             (GenTyVar (GenUsage Unique)) Unique
66
67 instance Outputable UnfoldingGuidance
68 instance Eq         Unique
69 instance Outputable Unique
70 instance Eq         (GenTyVar a)
71 instance Ord3       (GenTyVar a)
72 instance Outputable (GenTyVar a)
73 instance (Outputable a) => Outputable (GenId a)
74 instance (Eq a, Outputable a, Eq b, Outputable b) => Outputable (GenType a b)
75
76 data DemandInfo
77 data SpecEnv
78 data NmbrEnv
79 data MagicUnfoldingFun
80 data FormSummary = VarForm | ValueForm | BottomForm | OtherForm
81
82 -- data Unfolding
83 --  = NoUnfolding
84 --  | CoreUnfolding SimpleUnfolding
85 --  | MagicUnfolding Unique MagicUnfoldingFun
86
87 data Unfolding
88 noUnfolding :: Unfolding
89 mkUnfolding :: PragmaInfo -> CoreExpr -> Unfolding
90
91 -- data SimpleUnfolding = SimpleUnfolding FormSummary UnfoldingGuidance (GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique), BinderInfo) (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenTyVar (GenUsage Unique)) Unique) 
92
93
94 data UnfoldingGuidance
95   = UnfoldNever
96   | UnfoldAlways
97   | UnfoldIfGoodArgs Int Int [Bool] Int
98
99 data CostCentre
100
101 noCostCentre           :: CostCentre
102 subsumedCosts          :: CostCentre
103 useCurrentCostCentre   :: CostCentre
104 dontCareCostCentre     :: CostCentre
105 overheadCostCentre     :: CostCentre
106 preludeCafsCostCentre  :: CostCentre
107 preludeDictsCostCentre :: Bool -> CostCentre
108 mkAllCafsCC            :: FastString -> FastString -> CostCentre
109 mkAllDictsCC           :: FastString -> FastString -> Bool -> CostCentre
110 mkUserCC               :: FastString -> FastString -> FastString -> CostCentre
111 cafifyCC               :: CostCentre -> CostCentre
112 \end{code}