From 9a734fe7d3d782dbce16b7f2b629f18f7b8a01cd Mon Sep 17 00:00:00 2001
From: simonpj <unknown>
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 2f4aecf85656..e3ab3d493ae9 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;
-- 
GitLab