From 332b493b0f9703a2a371f1d83e57c5ac2b9f2457 Mon Sep 17 00:00:00 2001 From: Chris Hanson Date: Tue, 20 Dec 1988 23:13:20 +0000 Subject: [PATCH] If combination has a `continuation-push', prevent that continuation from being pushed when the combination is constant folded in any way. --- v7/src/compiler/base/ctypes.scm | 10 +++++++--- v7/src/compiler/fgopt/sideff.scm | 15 +++------------ 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/v7/src/compiler/base/ctypes.scm b/v7/src/compiler/base/ctypes.scm index f445b1e97..544a6da7c 100644 --- a/v7/src/compiler/base/ctypes.scm +++ b/v7/src/compiler/base/ctypes.scm @@ -1,6 +1,6 @@ #| -*-Scheme-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/base/ctypes.scm,v 4.8 1988/12/13 13:02:21 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/base/ctypes.scm,v 4.9 1988/12/20 23:13:08 cph Exp $ Copyright (c) 1988 Massachusetts Institute of Technology @@ -154,7 +154,11 @@ MIT in each case. |# (let ((continuation (combination/continuation combination))) (set-application-type! combination 'RETURN) (set-application-operator! combination continuation) - (set-application-operands! combination (list rvalue)))) + (set-application-operands! combination (list rvalue))) + (let ((push (combination/continuation-push combination))) + (if (and push (rvalue-known-value (combination/continuation combination))) + (set-virtual-continuation/type! (virtual-return-operator push) + continuation-type/effect)))) (define-integrable (make-return block continuation rvalue) (make-application 'RETURN block continuation (list rvalue) false)) @@ -164,7 +168,7 @@ MIT in each case. |# (define-integrable return/context application-context) (define-integrable return/operator application-operator) - +(define-integrable return/continuation-push application-continuation-push) (define-integrable (return/operand return) (car (application-operands return))) diff --git a/v7/src/compiler/fgopt/sideff.scm b/v7/src/compiler/fgopt/sideff.scm index 4e6472efe..3a711219c 100644 --- a/v7/src/compiler/fgopt/sideff.scm +++ b/v7/src/compiler/fgopt/sideff.scm @@ -1,6 +1,6 @@ #| -*-Scheme-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/fgopt/sideff.scm,v 1.3 1988/12/13 18:21:52 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/fgopt/sideff.scm,v 1.4 1988/12/20 23:13:20 cph Exp $ Copyright (c) 1988 Massachusetts Institute of Technology @@ -317,7 +317,8 @@ MIT in each case. |# (define (analyze-combination! app) (define (simplify-combination! value) - (combination/trivial! app value) + (combination/constant! app + (r/lvalue->rvalue (combination/context app) value)) (enqueue-node! (block-procedure (application-block app)))) (define (check value op-vals) @@ -403,16 +404,6 @@ MIT in each case. |# (make-reference context r/lvalue false) r/lvalue)) -(define (combination/trivial! comb r/lvalue) - (let ((push (combination/continuation-push comb))) - (if (and push (rvalue-known-value (combination/continuation comb))) - (set-virtual-continuation/type! - (virtual-return-operator push) - continuation-type/effect))) - (combination/constant! - comb - (r/lvalue->rvalue (combination/context comb) r/lvalue))) - (define (procedure/trivial! procedure kind) (let ((place (assq 'TRIVIAL (procedure-properties procedure)))) (cond ((not place) -- 2.25.1