desugar: do not bother simplifying if we are doing simpleopt-before-flatten
[ghc-hetmet.git] / compiler / deSugar / Desugar.lhs
index 0e7c032..c8f6390 100644 (file)
@@ -15,6 +15,7 @@ import HsSyn
 import TcRnTypes
 import MkIface
 import Id
+import Pair
 import Name
 import CoreSyn
 import CoreSubst
@@ -234,7 +235,10 @@ deSugar hsc_env
               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!
@@ -535,6 +539,8 @@ switching off EnableRewriteRules.  See DsExpr.dsExplicitList.
 
 That keeps the desugaring of list comprehensions simple too.
 
+
+
 Nor do we want to warn of conversion identities on the LHS;
 the rule is precisly to optimise them:
   {-# RULES "fromRational/id" fromRational = id :: Rational -> Rational #-}
@@ -575,13 +581,14 @@ simplify (Var v)                 = Var v
 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)]
@@ -592,4 +599,4 @@ simplifyBind (Rec (rbs@((b,e):rbs'))) =
     else (NonRec b (simplify e)):(simplifyBind $ Rec rbs')
 
 simplifyBinds = concatMap simplifyBind
-\end{code}
\ No newline at end of file
+\end{code}