desugar: do not bother simplifying if we are doing simpleopt-before-flatten
[ghc-hetmet.git] / compiler / deSugar / Desugar.lhs
index f219c01..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!
@@ -246,6 +250,10 @@ deSugar hsc_env
                (vcat [ pprCoreBindings final_pgm
                      , pprRules rules_for_imps ])
 
+       ; (final_pgm', rules_for_imps') <- if dopt Opt_F_simpleopt_before_flatten dflags
+                                            then simpleOptPgm dflags final_pgm rules_for_imps
+                                            else return (final_pgm, rules_for_imps)
+
         ; ds_binds <- if dopt Opt_F_coqpass dflags
                        then do { us <- mkSplitUniqSupply '~'
                                ; let do_flatten   = dopt Opt_F_flatten dflags
@@ -259,7 +267,7 @@ deSugar hsc_env
                                              hetmet_unflatten
                                              hetmet_flattened_id
                                              us
-                                             final_pgm
+                                             final_pgm'
                                              hetmet_PGArrow
                                              hetmet_PGArrow_unit
                                              hetmet_PGArrow_tensor
@@ -284,7 +292,9 @@ deSugar hsc_env
                                }
                        else return final_pgm
 
-       ; (ds_binds', ds_rules_for_imps) <- simpleOptPgm dflags ds_binds rules_for_imps
+       ; (ds_binds', ds_rules_for_imps) <- if dopt Opt_F_simpleopt_before_flatten dflags
+                                            then return (ds_binds, rules_for_imps')
+                                            else simpleOptPgm dflags ds_binds rules_for_imps'
                         -- The simpleOptPgm gets rid of type 
                         -- bindings plus any stupid dead code
 
@@ -529,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 #-}
@@ -569,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)]
@@ -586,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}