From 945ee4d4f70e279c6fdcce5cd99287920f50650e Mon Sep 17 00:00:00 2001 From: Chris Hanson Date: Mon, 12 Dec 1988 21:30:21 +0000 Subject: [PATCH] Change to store the initial links as well as the transitive closure. --- v7/src/compiler/fgopt/simapp.scm | 50 +++++++++++++++++++------------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/v7/src/compiler/fgopt/simapp.scm b/v7/src/compiler/fgopt/simapp.scm index 8ead001dd..2f7bc3cc1 100644 --- a/v7/src/compiler/fgopt/simapp.scm +++ b/v7/src/compiler/fgopt/simapp.scm @@ -1,6 +1,6 @@ #| -*-Scheme-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/fgopt/simapp.scm,v 4.3 1988/06/14 08:35:26 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/fgopt/simapp.scm,v 4.4 1988/12/12 21:30:21 cph Rel $ Copyright (c) 1988 Massachusetts Institute of Technology @@ -36,9 +36,7 @@ MIT in each case. |# (declare (usual-integrations)) -(package (simulate-application) - -(define-export (simulate-application lvalues applications) +(define (simulate-application lvalues applications) (for-each initialize-lvalue-cache! lvalues) (for-each (lambda (application) (set-application-operators! application '())) @@ -137,7 +135,7 @@ MIT in each case. |# (for-each loop (lvalue-backward-links lvalue))))) (eq-set-union* (lvalue-initial-values (car lvalues)) (map lvalue-initial-values (cdr lvalues))))) - + (define (lvalue-unassigned! lvalue) (lvalue-connect! lvalue (make-constant (make-unassigned-reference-trap)))) @@ -167,19 +165,31 @@ MIT in each case. |# (lvalue-values-cache lvalue)))) (define (lvalue-connect!:lvalue to from) - (if (not (memq from (lvalue-backward-links to))) + (if (not (memq from (lvalue-initial-backward-links to))) (begin - (enqueue-nodes! (lvalue-applications to)) - (set-lvalue-backward-links! to (cons from (lvalue-backward-links to))) - (set-lvalue-forward-links! from (cons to (lvalue-forward-links from))) - (set-lvalue-values-cache! to - (eq-set-union (lvalue-values-cache from) - (lvalue-values-cache to))) - (for-each (lambda (from) - (lvalue-connect!:lvalue to from)) - (lvalue-backward-links from)) - (for-each (lambda (to) - (lvalue-connect!:lvalue to from)) - (lvalue-forward-links to))))) - -) \ No newline at end of file + (set-lvalue-initial-backward-links! + to + (cons from (lvalue-initial-backward-links to))) + (set-lvalue-initial-forward-links! + from + (cons to (lvalue-initial-forward-links from))))) + (letrec ((connect + (lambda (to from) + (if (not (memq from (lvalue-backward-links to))) + (begin + (enqueue-nodes! (lvalue-applications to)) + (set-lvalue-backward-links! + to + (cons from (lvalue-backward-links to))) + (set-lvalue-forward-links! + from + (cons to (lvalue-forward-links from))) + (set-lvalue-values-cache! + to + (eq-set-union (lvalue-values-cache from) + (lvalue-values-cache to))) + (for-each (lambda (from) (connect to from)) + (lvalue-backward-links from)) + (for-each (lambda (to) (connect to from)) + (lvalue-forward-links to))))))) + (connect to from))) \ No newline at end of file -- 2.25.1