import TcRnTypes
import MkIface
import Id
+import Pair
import Name
import CoreSyn
import CoreSubst
final_prs = addExportFlagsAndRules target
export_set keep_alive rules_for_locals (fromOL all_prs)
- final_pgm = simplifyBinds $ combineEvBinds ds_ev_binds final_prs
+ final_pgm = let comb = combineEvBinds ds_ev_binds final_prs
+ in if dopt Opt_F_simpleopt_before_flatten dflags
+ then comb
+ else simplifyBinds comb
-- Notice that we put the whole lot in a big Rec, even the foreign binds
-- When compiling PrelFloat, which defines data Float = F# Float#
-- we want F# to be in scope in the foreign marshalling code!
simplify (App e1 e2) = App (simplify e1) (simplify e2)
simplify (Lit lit) = Lit lit
simplify (Note note e) = Note note (simplify e)
-simplify (Cast e co) = if tcEqType (fst $ coercionKind co) (snd $ coercionKind co)
+simplify (Cast e co) = if eqType (fst $ unPair $ coercionKind co) (snd $ unPair $ coercionKind co)
then simplify e
else Cast (simplify e) co
simplify (Lam v e) = Lam v (simplify e)
-simplify (Type t) = Type t
simplify (Case e b ty as) = Case (simplify e) b ty (map (\(a,b,e) -> (a,b,simplify e)) as)
simplify (Let bind body) = foldr Let (simplify body) (simplifyBind bind)
+simplify (Type t) = Type t
+simplify (Coercion co) = Coercion co
simplifyBind :: Bind CoreBndr -> [Bind CoreBndr]
simplifyBind (NonRec b e) = [NonRec b (simplify e)]