From: simonpj Date: Wed, 21 Feb 2001 11:04:17 +0000 (+0000) Subject: [project @ 2001-02-21 11:04:17 by simonpj] X-Git-Tag: Approximately_9120_patches~2575 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=846fa07b0789a1aaef7d7ccd140df1e778119603;p=ghc-hetmet.git [project @ 2001-02-21 11:04:17 by simonpj] Be a bit more careful in CoreSat.deLam --- diff --git a/ghc/compiler/coreSyn/CoreSat.lhs b/ghc/compiler/coreSyn/CoreSat.lhs index 62eda2e..c993d48 100644 --- a/ghc/compiler/coreSyn/CoreSat.lhs +++ b/ghc/compiler/coreSyn/CoreSat.lhs @@ -41,6 +41,7 @@ MAJOR CONSTRAINT: So we must not change the arity of any top-level function, because we've already fixed it and put it out into the interface file. + Nor must we change a value (e.g. constructor) into a thunk. It's ok to introduce extra bindings, which don't appear in the interface file. We don't put arity info on these extra bindings, @@ -418,6 +419,13 @@ mkBinds binds body deLam :: CoreExpr -> UniqSM CoreExpr -- Remove top level lambdas by let-bindinig + +deLam (Note n expr) + = -- You can get things like + -- case e of { p -> coerce t (\s -> ...) } + deLam expr `thenUs` \ expr' -> + returnUs (Note n expr') + deLam expr | null bndrs = returnUs expr | otherwise = case tryEta bndrs body of @@ -427,6 +435,11 @@ deLam expr where (bndrs,body) = collectBinders expr +-- Why try eta reduction? Hasn't the simplifier already done eta? +-- But the simplifier only eta reduces if that leaves something +-- trivial (like f, or f Int). But for deLam it would be enough to +-- get to a partial application, like (map f). + tryEta bndrs expr@(App _ _) | ok_to_eta_reduce f && n_remaining >= 0 && @@ -496,3 +509,5 @@ safeDem, onceDem :: RhsDemand safeDem = RhsDemand False False -- always safe to use this onceDem = RhsDemand False True -- used at most once \end{code} + +