From: Stephen Adams Date: Wed, 8 Mar 1995 05:14:24 +0000 (+0000) Subject: Fixed bug in (AND ...) expression X-Git-Tag: 20090517-FFI~6556 X-Git-Url: https://birchwood-abbey.net/git?a=commitdiff_plain;h=f1505e59204795d78ab2f2893ab931b9bd4b56dd;p=mit-scheme.git Fixed bug in (AND ...) expression --- diff --git a/v8/src/compiler/base/parass.scm b/v8/src/compiler/base/parass.scm index 5fe51a118..b09900b18 100644 --- a/v8/src/compiler/base/parass.scm +++ b/v8/src/compiler/base/parass.scm @@ -1,6 +1,6 @@ #| -*-Scheme-*- -$Id: parass.scm,v 1.1 1994/11/19 02:02:36 adams Exp $ +$Id: parass.scm,v 1.2 1995/03/08 05:14:24 adams Exp $ Copyright (c) 1994 Massachusetts Institute of Technology @@ -46,33 +46,34 @@ MIT in each case. |# (topo-node/make dependency))) dependencies))) (for-each - (lambda (pair) - (let ((before (cdr pair))) - (for-each - (lambda (dependent) - (let ((pair (assq dependent pairs))) - (and pair - (let ((after (cdr pair))) - ;; For parallel assignment, - ;; self-dependence is irrelevant. - (and (not (eq? after before)) - (set-topo-node/before! - after - (cons before (topo-node/before after))) - (set-topo-node/after! - before - (cons after (topo-node/after before)))))))) - (cdr (topo-node/contents before))))) - pairs) + (lambda (pair) + (let ((before (cdr pair))) + (for-each + (lambda (dependent) + (let ((pair (assq dependent pairs))) + (if pair + (let ((after (cdr pair))) + ;; For parallel assignment, + ;; self-dependence is irrelevant. + (if (not (eq? after before)) + (begin + (set-topo-node/before! + after + (cons before (topo-node/before after))) + (set-topo-node/after! + before + (cons after (topo-node/after before))))))))) + (cdr (topo-node/contents before))))) + pairs) ;; *** This should use the heuristics for n < 6 *** - (let loop ((nodes* (reverse (sort-topologically (map cdr pairs)))) - (result '()) + (let loop ((nodes* (reverse (sort-topologically (map cdr pairs)))) + (result '()) (needed-to-right '())) (if (null? nodes*) result - (let* ((node (car nodes*)) - (dependency (topo-node/contents node)) - (references (cdr dependency))) + (let* ((node (car nodes*)) + (dependency (topo-node/contents node)) + (references (cdr dependency))) (loop (cdr nodes*) (cons (vector (topo-node/early? node) dependency @@ -84,15 +85,15 @@ MIT in each case. |# (conc-name topo-node/) (constructor topo-node/make (contents))) (contents false read-only true) - (before '() read-only false) - (after '() read-only false) - (nbefore false read-only false) - (early? false read-only false) + (before '() read-only false) + (after '() read-only false) + (nbefore false read-only false) + (early? false read-only false) (dequeued false read-only false)) (define (sort-topologically nodes) - (let* ((nnodes (length nodes)) - (buckets (make-vector (+ 1 nnodes) '()))) + (let* ((nnodes (length nodes)) + (buckets (make-vector (+ 1 nnodes) '()))) (define (update! node) (set-topo-node/dequeued! node true) (for-each (lambda (node*) @@ -108,7 +109,7 @@ MIT in each case. |# nbefore* (cons node* (vector-ref buckets nbefore*)))))) - (topo-node/after node))) + (topo-node/after node))) (define (phase-2 left accum) ;; There must be a cycle, remove an early block @@ -143,5 +144,5 @@ MIT in each case. |# (vector-set! buckets n (cons node (vector-ref buckets n))))) - nodes) + nodes) (phase-1 nnodes '()))) \ No newline at end of file