From 9a734fe7d3d782dbce16b7f2b629f18f7b8a01cd Mon Sep 17 00:00:00 2001 From: simonpj Date: Mon, 28 Jun 1999 16:40:18 +0000 Subject: [PATCH] [project @ 1999-06-28 16:40:18 by simonpj] Add explanatory comments --- ghc/compiler/simplCore/SimplCore.lhs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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; -- 1.7.10.4