[project @ 1996-01-08 20:28:12 by partain]
[ghc-hetmet.git] / ghc / compiler / simplCore / MagicUFs.hi
1 {-# GHC_PRAGMA INTERFACE VERSION 5 #-}
2 interface MagicUFs where
3 import BasicLit(BasicLit)
4 import Class(Class)
5 import CmdLineOpts(SimplifierSwitch, SwitchResult)
6 import CoreSyn(CoreArg, CoreAtom, CoreBinding, CoreCaseAlternatives, CoreExpr)
7 import CostCentre(CostCentre)
8 import Id(Id, IdDetails)
9 import IdInfo(IdInfo)
10 import Maybes(Labda)
11 import PlainCore(PlainCoreArg(..), PlainCoreAtom(..), PlainCoreExpr(..))
12 import PreludePS(_PackedString)
13 import PrimOps(PrimOp)
14 import SimplEnv(EnclosingCcDetails, IdVal, SimplEnv, UnfoldEnv)
15 import SimplMonad(SimplCount, SmplM(..), TickType)
16 import SplitUniq(SplitUniqSupply)
17 import TyCon(TyCon)
18 import TyVar(TyVar, TyVarTemplate)
19 import UniType(UniType)
20 import UniqFM(UniqFM)
21 import Unique(Unique)
22 data CoreArg a  {-# GHC_PRAGMA TypeArg UniType | ValArg (CoreAtom a) #-}
23 data CoreAtom a         {-# GHC_PRAGMA CoVarAtom a | CoLitAtom BasicLit #-}
24 data CoreExpr a b       {-# GHC_PRAGMA CoVar b | CoLit BasicLit | CoCon Id [UniType] [CoreAtom b] | CoPrim PrimOp [UniType] [CoreAtom b] | CoLam [a] (CoreExpr a b) | CoTyLam TyVar (CoreExpr a b) | CoApp (CoreExpr a b) (CoreAtom b) | CoTyApp (CoreExpr a b) UniType | CoCase (CoreExpr a b) (CoreCaseAlternatives a b) | CoLet (CoreBinding a b) (CoreExpr a b) | CoSCC CostCentre (CoreExpr a b) #-}
25 data Id         {-# GHC_PRAGMA Id Unique UniType IdInfo IdDetails #-}
26 data Labda a    {-# GHC_PRAGMA Hamna | Ni a #-}
27 data MagicUnfoldingFun  {-# GHC_PRAGMA MUF (SimplEnv -> [CoreArg Id] -> SplitUniqSupply -> SimplCount -> (Labda (CoreExpr Id Id), SimplCount)) #-}
28 type PlainCoreArg = CoreArg Id
29 type PlainCoreAtom = CoreAtom Id
30 type PlainCoreExpr = CoreExpr Id Id
31 data SimplEnv   {-# GHC_PRAGMA SimplEnv (SimplifierSwitch -> SwitchResult) EnclosingCcDetails (UniqFM UniType) (UniqFM IdVal) UnfoldEnv #-}
32 data SimplCount         {-# GHC_PRAGMA SimplCount Int# [(TickType, Int)] #-}
33 type SmplM a = SplitUniqSupply -> SimplCount -> (a, SimplCount)
34 data TickType   {-# GHC_PRAGMA UnfoldingDone | FoldrBuild | MagicUnfold | ConReused | CaseFloatFromLet | CaseOfCase | LetFloatFromLet | LetFloatFromCase | KnownBranch | Let2Case | CaseMerge | CaseElim | CaseIdentity | AtomicRhs | EtaExpansion | CaseOfError | FoldrConsNil | Foldr_Nil | FoldrFoldr | Foldr_List | FoldrCons | FoldrInline | TyBetaReduction | BetaReduction #-}
35 data SplitUniqSupply    {-# GHC_PRAGMA MkSplitUniqSupply Int SplitUniqSupply SplitUniqSupply #-}
36 data UniType    {-# GHC_PRAGMA UniTyVar TyVar | UniFun UniType UniType | UniData TyCon [UniType] | UniSyn TyCon [UniType] UniType | UniDict Class UniType | UniTyVarTemplate TyVarTemplate | UniForall TyVarTemplate UniType #-}
37 applyMagicUnfoldingFun :: MagicUnfoldingFun -> SimplEnv -> [CoreArg Id] -> SplitUniqSupply -> SimplCount -> (Labda (CoreExpr Id Id), SimplCount)
38         {-# GHC_PRAGMA _A_ 3 _U_ 12222 _N_ _S_ "U(S)LL" {_A_ 3 _U_ 12222 _N_ _N_ _F_ _IF_ARGS_ 0 3 XXX 3 \ (u0 :: SimplEnv -> [CoreArg Id] -> SplitUniqSupply -> SimplCount -> (Labda (CoreExpr Id Id), SimplCount)) (u1 :: SimplEnv) (u2 :: [CoreArg Id]) -> _APP_  u0 [ u1, u2 ] _N_} _F_ _IF_ARGS_ 0 3 CXX 4 \ (u0 :: MagicUnfoldingFun) (u1 :: SimplEnv) (u2 :: [CoreArg Id]) -> case u0 of { _ALG_ _ORIG_ MagicUFs MUF (u3 :: SimplEnv -> [CoreArg Id] -> SplitUniqSupply -> SimplCount -> (Labda (CoreExpr Id Id), SimplCount)) -> _APP_  u3 [ u1, u2 ]; _NO_DEFLT_ } _N_ #-}
39 mkMagicUnfoldingFun :: _PackedString -> MagicUnfoldingFun
40         {-# GHC_PRAGMA _A_ 1 _U_ 2 _N_ _N_ _N_ _N_ #-}
41