#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/back/linear.scm,v 4.3 1988/09/07 06:23:24 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/back/linear.scm,v 4.4 1988/09/15 05:05:02 cph Exp $
Copyright (c) 1987, 1988 Massachusetts Institute of Technology
(node-mark! bblock)
(queue-continuations! bblock)
(if (and (not (bblock-label bblock))
- (node-previous>1? bblock))
- (bblock-label! bblock))
+ (let ((edges (node-previous-edges bblock)))
+ (and (not (null? edges))
+ (not (null? (cdr edges)))))) (bblock-label! bblock))
(let ((kernel
(lambda ()
(LAP ,@(bblock-instructions bblock)
(kernel))))
(define (linearize-sblock-next bblock)
- (cond ((not bblock) (LAP))
+ (cond ((not bblock)
+ (LAP))
((node-marked? bblock)
- (LAP ,(lap:make-unconditional-branch (bblock-label! bblock))))
- (else (linearize-bblock bblock))))
+ (LAP ,(lap:make-unconditional-branch (get-bblock-label bblock))))
+ (else
+ (linearize-bblock bblock))))
(define (linearize-pblock pblock cn an)
(if (node-marked? cn)
+ (let ((clabel (get-bblock-label cn)))
+ (if (node-marked? an)
+ (let ((alabel (get-bblock-label an)))
+ (LAP ,@((pblock-consequent-lap-generator pblock) clabel)
+ ,(lap:make-unconditional-branch alabel)))
+ (LAP ,@((pblock-consequent-lap-generator pblock) clabel)
+ ,@(linearize-bblock an))))
(if (node-marked? an)
- (LAP ,@((pblock-consequent-lap-generator pblock)
- (bblock-label! cn))
- ,(lap:make-unconditional-branch (bblock-label! an)))
- (LAP ,@((pblock-consequent-lap-generator pblock)
- (bblock-label! cn))
- ,@(linearize-bblock an)))
- (if (node-marked? an)
- (LAP ,@((pblock-alternative-lap-generator pblock)
- (bblock-label! an))
- ,@(linearize-bblock cn))
- (let ((label (bblock-label! cn))
- (alternative (linearize-bblock an)))
- (LAP ,@((pblock-consequent-lap-generator pblock) label)
+ (let ((alabel (get-bblock-label an)))
+ (LAP ,@((pblock-alternative-lap-generator pblock) alabel)
+ ,@(linearize-bblock cn)))
+ (let* ((clabel (bblock-label! cn))
+ (alternative (linearize-bblock an)))
+ (LAP ,@((pblock-consequent-lap-generator pblock) clabel)
,@alternative
,@(if (node-marked? cn)
(LAP)
(linearize-bblock bblock))
+(define (get-bblock-label bblock)
+ (or (bblock-label bblock)
+ (error "GET-BBLOCK-LABEL: block not labeled" bblock)))
+
(define linearize-bits
(make-linearizer bblock-linearize-bits
(lambda () (LAP))
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlbase/rtline.scm,v 4.4 1988/09/07 06:22:54 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlbase/rtline.scm,v 4.5 1988/09/15 05:05:44 cph Exp $
Copyright (c) 1988 Massachusetts Institute of Technology
(node-mark! bblock)
(queue-continuations! bblock)
(if (and (not (bblock-label bblock))
- (node-previous>1? bblock))
+ (let ((edges (node-previous-edges bblock)))
+ (and (not (null? edges))
+ (not (null? (cdr edges))))))
(bblock-label! bblock))
(let ((kernel
(lambda ()
(cond ((not sblock)
'())
((node-marked? sblock)
- `(,(rtl:make-jump-statement (bblock-label! sblock))))
+ `(,(rtl:make-jump-statement (get-bblock-label sblock))))
(else
(linearize-bblock sblock))))
(define (linearize-pblock pblock predicate cn an)
pblock
(if (node-marked? cn)
+ (let ((clabel (get-bblock-label cn)))
+ (if (node-marked? an)
+ (let ((alabel (get-bblock-label an)))
+ `(,(rtl:make-jumpc-statement predicate clabel)
+ ,(rtl:make-jump-statement alabel)))
+ `(,(rtl:make-jumpc-statement predicate clabel)
+ ,@(linearize-bblock an))))
(if (node-marked? an)
- `(,(rtl:make-jumpc-statement predicate (bblock-label! cn))
- ,(rtl:make-jump-statement (bblock-label! an)))
- `(,(rtl:make-jumpc-statement predicate (bblock-label! cn))
- ,@(linearize-bblock an)))
- (if (node-marked? an)
- `(,(rtl:make-jumpc-statement (rtl:negate-predicate predicate)
- (bblock-label! an))
- ,@(linearize-bblock cn))
- (let ((label (bblock-label! cn))
- (alternative (linearize-bblock an)))
+ (let ((alabel (get-bblock-label an)))
+ `(,(rtl:make-jumpc-statement (rtl:negate-predicate predicate)
+ alabel)
+ ,@(linearize-bblock cn)))
+ (let* ((label (bblock-label! cn))
+ (alternative (linearize-bblock an)))
`(,(rtl:make-jumpc-statement predicate label)
,@alternative
,@(if (node-marked? cn)
(linearize-bblock bblock))
+(define (get-bblock-label bblock)
+ (or (bblock-label bblock)
+ (error "GET-BBLOCK-LABEL: block not labeled" bblock)))
+
(define linearize-rtl
(make-linearizer bblock-linearize-rtl
(lambda ()