1 Breaks the loop between SimplEnv and MagicUFs, by telling SimplEnv all
2 it needs to know about MagicUFs (not much).
4 Also break the loop between SimplVar/SimplCase (which use
5 Simplify.simplExpr) and SimplExpr (which uses whatever
6 SimplVar/SimplCase cough up).
9 interface SmplLoop where
11 import MagicUFs ( MagicUnfoldingFun )
12 import SimplEnv ( SimplEnv, InBinding(..), InExpr(..),
13 OutArg(..), OutExpr(..), OutType(..)
15 import Simplify ( simplExpr, simplBind )
17 import BinderInfo(BinderInfo)
18 import CoreSyn(GenCoreArg, GenCoreBinding, GenCoreExpr)
20 import SimplMonad(SimplCount)
21 import TyVar(GenTyVar)
23 import UniqSupply(UniqSupply)
25 import Usage(GenUsage)
27 data MagicUnfoldingFun
30 simplBind :: SimplEnv -> GenCoreBinding (GenId (GenType (GenTyVar (GenUsage Unique)) Unique), BinderInfo) (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenTyVar (GenUsage Unique)) Unique -> (SimplEnv -> UniqSupply -> SimplCount -> (GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenTyVar (GenUsage Unique)) Unique, SimplCount)) -> GenType (GenTyVar (GenUsage Unique)) Unique -> UniqSupply -> SimplCount -> (GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenTyVar (GenUsage Unique)) Unique, SimplCount)
31 simplExpr :: SimplEnv -> GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique), BinderInfo) (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenTyVar (GenUsage Unique)) Unique -> [GenCoreArg (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenTyVar (GenUsage Unique)) Unique] -> UniqSupply -> SimplCount -> (GenCoreExpr (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenId (GenType (GenTyVar (GenUsage Unique)) Unique)) (GenTyVar (GenUsage Unique)) Unique, SimplCount)