(defun find-rotated-loop-head (block)
(declare (type cblock block))
(let* ((num (block-number block))
- (env (block-environment block))
+ (env (block-physenv block))
(pred (dolist (pred (block-pred block) nil)
(when (and (not (block-flag pred))
- (eq (block-environment pred) env)
+ (eq (block-physenv pred) env)
(< (block-number pred) num))
(return pred)))))
(cond
((and pred
- (not (environment-nlx-info env))
- (not (eq (node-block (lambda-bind (block-home-lambda block)))
- block)))
+ (not (physenv-nlx-info env))
+ (not (eq (lambda-block (block-home-lambda block)) block)))
(let ((current pred)
(current-num (block-number pred)))
(block DONE
(when (eq pred block)
(return-from DONE))
(when (and (not (block-flag pred))
- (eq (block-environment pred) env)
+ (eq (block-physenv pred) env)
(> (block-number pred) current-num))
(setq current pred current-num (block-number pred))
(return)))))
;;; (end in an error, NLX or tail full call.) This is to discourage
;;; making error code the drop-through.
(defun control-analyze-block (block tail block-info-constructor)
- (declare (type cblock block) (type block-annotation tail))
+ (declare (type cblock block)
+ (type block-annotation tail)
+ (type function block-info-constructor))
(unless (block-flag block)
(let ((block (find-rotated-loop-head block)))
(setf (block-flag block) t)
(let ((last (block-last block)))
(cond ((and (combination-p last) (node-tail-p last)
(eq (basic-combination-kind last) :local)
- (not (eq (node-environment last)
- (lambda-environment (combination-lambda last)))))
+ (not (eq (node-physenv last)
+ (lambda-physenv (combination-lambda last)))))
(combination-lambda last))
(t
(let ((component-tail (component-tail (block-component block)))
;;; Analyze all of the NLX EPs first to ensure that code reachable
;;; only from a NLX is emitted contiguously with the code reachable
-;;; from the Bind. Code reachable from the Bind is inserted *before*
-;;; the NLX code so that the Bind marks the beginning of the code for
-;;; the function. If the walks from NLX EPs reach the bind block, then
+;;; from the BIND. Code reachable from the BIND is inserted *before*
+;;; the NLX code so that the BIND marks the beginning of the code for
+;;; the function. If the walks from NLX EPs reach the BIND block, then
;;; we just move it to the beginning.
;;;
-;;; If the walk from the bind node encountered a tail local call, then
+;;; If the walk from the BIND node encountered a tail local call, then
;;; we start over again there to help the call drop through. Of
;;; course, it will never get a drop-through if either function has
;;; NLX code.
(defun control-analyze-1-fun (fun component block-info-constructor)
- (declare (type clambda fun) (type component component))
+ (declare (type clambda fun)
+ (type component component)
+ (type function block-info-constructor))
(let* ((tail-block (block-info (component-tail component)))
(prev-block (block-annotation-prev tail-block))
(bind-block (node-block (lambda-bind fun))))
(unless (block-flag bind-block)
- (dolist (nlx (environment-nlx-info (lambda-environment fun)))
+ (dolist (nlx (physenv-nlx-info (lambda-physenv fun)))
(control-analyze-block (nlx-info-target nlx) tail-block
block-info-constructor))
(cond
block-info-constructor)))))))
(values))
-;;; Do control analysis on Component, finding the emit order. Our only
+;;; Do control analysis on COMPONENT, finding the emit order. Our only
;;; cleverness here is that we walk XEP's first to increase the
;;; probability that the tail call will be a drop-through.
;;;
(clear-flags component)
(dolist (fun (component-lambdas component))
- (when (external-entry-point-p fun)
+ (when (xep-p fun)
(control-analyze-1-fun fun component block-info-constructor)))
(dolist (fun (component-lambdas component))
(do-blocks (block component)
(unless (block-flag block)
- (event control-deleted-block (continuation-next (block-start block)))
+ (event control-deleted-block (block-start-node block))
(delete-block block))))
(let ((2comp (component-info component)))