From: simonpj Date: Mon, 28 Jun 1999 16:40:18 +0000 (+0000) Subject: [project @ 1999-06-28 16:40:18 by simonpj] X-Git-Tag: Approximately_9120_patches~6060 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=9a734fe7d3d782dbce16b7f2b629f18f7b8a01cd;p=ghc-hetmet.git [project @ 1999-06-28 16:40:18 by simonpj] Add explanatory comments --- diff --git a/ghc/compiler/simplCore/SimplCore.lhs b/ghc/compiler/simplCore/SimplCore.lhs index 2f4aecf..e3ab3d4 100644 --- a/ghc/compiler/simplCore/SimplCore.lhs +++ b/ghc/compiler/simplCore/SimplCore.lhs @@ -209,6 +209,21 @@ simplifyPgm (imported_rule_ids, rule_lhs_fvs) -- Glom all binds together in one Rec, in case any -- transformations have introduced any new dependencies + -- + -- NB: the global invariant is this: + -- *** the top level bindings are never cloned, and are always unique *** + -- + -- We sort them into dependency order, but applying transformation rules may + -- make something at the top refer to something at the bottom: + -- f = \x -> p (q x) + -- h = \y -> 3 + -- + -- RULE: p (q x) = h x + -- + -- Applying this rule makes f refer to h, although it doesn't appear to in the + -- source program. Our solution is to do this occasional glom-together step, + -- just once per overall simplfication step. + let { recd_binds = [Rec (flattenBinds binds)] }; (termination_msg, it_count, counts_out, binds') <- iteration us 1 zeroSimplCount recd_binds;