diff --git a/compiler/ir1opt.lisp b/compiler/ir1opt.lisp index a63ee046f8fc57bf93193130e0ef57d498783d51..036cd7a797e28b6d8e6cc1e6d88d04743216f99c 100644 --- a/compiler/ir1opt.lisp +++ b/compiler/ir1opt.lisp @@ -7,7 +7,7 @@ ;;; Scott Fahlman or slisp-group@cs.cmu.edu. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/ir1opt.lisp,v 1.43 1992/04/02 15:25:38 ram Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/ir1opt.lisp,v 1.44 1992/04/14 18:09:01 ram Exp $") ;;; ;;; ********************************************************************** ;;; @@ -1104,14 +1104,18 @@ ;;; CONSTANT-REFERENCE-P -- Interface ;;; ;;; Return true if the value of Ref will always be the same (and is thus -;;; legal to substitute.) +;;; legal to substitute.) Even though the value of a FUNCTIONAL really can't +;;; change, we consider it non-constant when it is marker :NOTINLINE, since +;;; this is used as a flag to inhibit local call conversion, and must not be +;;; lost. ;;; (defun constant-reference-p (ref) (declare (type ref ref)) (let ((leaf (ref-leaf ref))) (typecase leaf (constant t) - (functional t) + (functional + (not (eq (ref-inlinep ref) :notinline))) (lambda-var (null (lambda-var-sets leaf))) (global-var