1 {-# GHC_PRAGMA INTERFACE VERSION 5 #-}
4 import BasicLit(BasicLit)
5 import BinderInfo(BinderInfo, DuplicationDanger, FunOrArg, InsideSCC)
7 import CmdLineOpts(GlobalSwitch)
8 import CoreSyn(CoreAtom, CoreBinding, CoreCaseAlternatives, CoreExpr)
9 import CostCentre(CostCentre)
11 import IdEnv(IdEnv(..))
12 import InstEnv(InstTemplate)
13 import MagicUFs(MagicUnfoldingFun)
15 import Outputable(Outputable)
16 import PlainCore(PlainCoreAtom(..), PlainCoreExpr(..))
17 import PreludePS(_PackedString)
18 import Pretty(Delay, PprStyle, Pretty(..), PrettyRep)
19 import PrimOps(PrimOp)
20 import SimplEnv(FormSummary, IdVal, InExpr(..), OutAtom(..), OutExpr(..), OutId(..), UnfoldingDetails(..), UnfoldingGuidance(..))
23 import TaggedCore(SimplifiableBinder(..), SimplifiableCoreExpr(..))
25 import UniType(UniType)
27 import Unique(UniqSM(..), Unique, UniqueSupply)
28 class OptIdInfo a where
30 getInfo :: IdInfo -> a
31 addInfo :: IdInfo -> a -> IdInfo
32 ppInfo :: PprStyle -> (Id -> Id) -> a -> Int -> Bool -> PrettyRep
33 data ArgUsage = ArgUsage Int | UnknownArgUsage
35 type ArgUsageType = [ArgUsage]
42 data DeforestInfo = Don'tDeforest | DoDeforest
43 data Demand = WwLazy Bool | WwStrict | WwUnpack [Demand] | WwPrim | WwEnum
45 data FBConsum = FBGoodConsum | FBBadConsum
46 data FBProd = FBGoodProd | FBBadProd
47 data FBType = FBType [FBConsum] FBProd
50 type IdEnv a = UniqFM a
53 data MagicUnfoldingFun
55 type PlainCoreAtom = CoreAtom Id
56 type PlainCoreExpr = CoreExpr Id Id
58 type Pretty = Int -> Bool -> PrettyRep
62 type InExpr = CoreExpr (Id, BinderInfo) Id
63 type OutAtom = CoreAtom Id
64 type OutExpr = CoreExpr Id Id
66 data UnfoldingDetails = NoUnfoldingDetails | LiteralForm BasicLit | OtherLiteralForm [BasicLit] | ConstructorForm Id [UniType] [CoreAtom Id] | OtherConstructorForm [Id] | GeneralForm Bool FormSummary (CoreExpr (Id, BinderInfo) Id) UnfoldingGuidance | MagicForm _PackedString MagicUnfoldingFun | IWantToBeINLINEd UnfoldingGuidance
67 data UnfoldingGuidance = UnfoldNever | UnfoldAlways | EssentialUnfolding | UnfoldIfGoodArgs Int Int [Bool] Int | BadUnfolding
70 type SimplifiableBinder = (Id, BinderInfo)
71 type SimplifiableCoreExpr = CoreExpr (Id, BinderInfo) Id
73 data SpecInfo = SpecInfo [Labda UniType] Int Id
74 data StrictnessInfo = NoStrictnessInfo | BottomGuaranteed | StrictnessInfo [Demand] (Labda Id)
77 type UniqSM a = UniqueSupply -> (UniqueSupply, a)
81 type UpdateSpec = [Int]
82 addInfo_UF :: IdInfo -> UnfoldingDetails -> IdInfo
83 addOneToSpecEnv :: SpecEnv -> SpecInfo -> SpecEnv
84 applySubstToIdInfo :: Subst -> IdInfo -> (Subst, IdInfo)
85 apply_to_IdInfo :: (UniType -> UniType) -> IdInfo -> IdInfo
86 arityMaybe :: ArityInfo -> Labda Int
87 boringIdInfo :: IdInfo -> Bool
88 bottomIsGuaranteed :: StrictnessInfo -> Bool
89 getArgUsage :: ArgUsageInfo -> [ArgUsage]
90 getFBType :: FBTypeInfo -> Labda FBType
91 getInfo_UF :: IdInfo -> UnfoldingDetails
92 getSrcLocIdInfo :: IdInfo -> SrcLoc
93 getWorkerId :: StrictnessInfo -> Id
94 getWrapperArgTypeCategories :: UniType -> StrictnessInfo -> Labda [Char]
95 iWantToBeINLINEd :: UnfoldingGuidance -> UnfoldingDetails
96 indicatesWorker :: [Demand] -> Bool
97 lookupConstMethodId :: Id -> UniType -> Labda Id
98 lookupSpecEnv :: SpecEnv -> [UniType] -> Labda (Id, [UniType], Int)
99 lookupSpecId :: Id -> [Labda UniType] -> Id
100 mkArgUsageInfo :: [ArgUsage] -> ArgUsageInfo
101 mkArityInfo :: Int -> ArityInfo
102 mkBottomStrictnessInfo :: StrictnessInfo
103 mkDemandInfo :: Demand -> DemandInfo
104 mkFBTypeInfo :: FBType -> FBTypeInfo
105 mkMagicUnfolding :: _PackedString -> UnfoldingDetails
106 mkSpecEnv :: [SpecInfo] -> SpecEnv
107 mkStrictnessInfo :: [Demand] -> Labda Id -> StrictnessInfo
108 mkUnfolding :: UnfoldingGuidance -> CoreExpr Id Id -> UnfoldingDetails
109 mkUpdateInfo :: [Int] -> UpdateInfo
111 noInfo_UF :: UnfoldingDetails
112 nonAbsentArgs :: [Demand] -> Int
113 nullSpecEnv :: SpecEnv
114 ppIdInfo :: PprStyle -> Id -> Bool -> (Id -> Id) -> UniqFM UnfoldingDetails -> IdInfo -> Int -> Bool -> PrettyRep
115 unknownArity :: ArityInfo
116 updateInfoMaybe :: UpdateInfo -> Labda [Int]
117 willBeDemanded :: DemandInfo -> Bool
118 workerExists :: StrictnessInfo -> Bool
123 wwUnpack :: [Demand] -> Demand
128 instance Eq UpdateInfo
129 instance OptIdInfo ArgUsageInfo
130 instance OptIdInfo ArityInfo
131 instance OptIdInfo DeforestInfo
132 instance OptIdInfo DemandInfo
133 instance OptIdInfo FBTypeInfo
134 instance OptIdInfo SpecEnv
135 instance OptIdInfo StrictnessInfo
136 instance OptIdInfo UpdateInfo
138 instance Ord UpdateInfo
139 instance Outputable Demand
141 instance Text UpdateInfo