1 {-# GHC_PRAGMA INTERFACE VERSION 5 #-}
2 interface MagicUFs where
3 import BasicLit(BasicLit)
5 import CmdLineOpts(SimplifierSwitch, SwitchResult)
6 import CoreSyn(CoreArg, CoreAtom, CoreBinding, CoreCaseAlternatives, CoreExpr)
7 import CostCentre(CostCentre)
8 import Id(Id, IdDetails)
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)
18 import TyVar(TyVar, TyVarTemplate)
19 import UniType(UniType)
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_ #-}