From: Chris Hanson Date: Thu, 18 Dec 1986 12:11:09 +0000 (+0000) Subject: Fix algorithm so that it handles CFG joins correctly. X-Git-Tag: 20090517-FFI~13789 X-Git-Url: https://birchwood-abbey.net/git?a=commitdiff_plain;h=63be67cf13c72645f6259fb4ca8407e70e8ff427;p=mit-scheme.git Fix algorithm so that it handles CFG joins correctly. --- diff --git a/v7/src/compiler/rtlopt/rcse1.scm b/v7/src/compiler/rtlopt/rcse1.scm index c599350ea..b64e968c5 100644 --- a/v7/src/compiler/rtlopt/rcse1.scm +++ b/v7/src/compiler/rtlopt/rcse1.scm @@ -38,7 +38,7 @@ ;;;; RTL Common Subexpression Elimination ;;; Based on the GNU C Compiler -;;; $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlopt/rcse1.scm,v 1.94 1986/12/17 08:00:35 cph Exp $ +;;; $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlopt/rcse1.scm,v 1.95 1986/12/18 12:10:53 cph Exp $ (declare (usual-integrations)) (using-syntax (access compiler-syntax-table compiler-package) @@ -54,6 +54,7 @@ (walk-rnode block)) (define (walk-rnode rnode) + (if (node-previous>1? rnode) (state:reset!)) ;Easy non-optimal solution. ((vector-method rnode walk-rnode) rnode)) (define-vector-method rtl-snode-tag walk-rnode diff --git a/v7/src/compiler/rtlopt/rlife.scm b/v7/src/compiler/rtlopt/rlife.scm index 091a244e2..17340727d 100644 --- a/v7/src/compiler/rtlopt/rlife.scm +++ b/v7/src/compiler/rtlopt/rlife.scm @@ -38,7 +38,7 @@ ;;;; RTL Register Lifetime Analysis ;;; Based on the GNU C Compiler -;;; $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlopt/rlife.scm,v 1.51 1986/12/18 06:11:04 cph Exp $ +;;; $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlopt/rlife.scm,v 1.52 1986/12/18 12:11:09 cph Exp $ (declare (usual-integrations)) (using-syntax (access compiler-syntax-table compiler-package) @@ -164,9 +164,10 @@ (not (regset-member? needed register)))))))) (define (rtl-snode-delete! rnode) - (let ((previous (node-previous-disconnect! rnode)) - (next (snode-next-disconnect! rnode)) + (let ((previous (node-previous rnode)) + (next (snode-next rnode)) (bblock (rnode-bblock rnode))) + (snode-delete! rnode) (if (eq? rnode (bblock-entry bblock)) (if (eq? rnode (bblock-exit bblock)) (set! *bblocks* (delq! bblock *bblocks*))