X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fdfo.lisp;h=51a5953bdf5cfb50a8dce43e73ecb38c1fc2d027;hb=b63c4fb9b98fa8188e17ba926e150ba417a74635;hp=18dcaeca2ff82328bab8a21d954087b981fd3e11;hpb=d18903c82a4856d5a65549b2913c0ee098c34f7e;p=sbcl.git diff --git a/src/compiler/dfo.lisp b/src/compiler/dfo.lisp index 18dcaec..51a5953 100644 --- a/src/compiler/dfo.lisp +++ b/src/compiler/dfo.lisp @@ -30,10 +30,8 @@ (do-blocks-backwards (block component :both) (if (block-flag block) (setf (block-number block) (incf num)) - (setf (block-delete-p block) t))) - (do-blocks (block component) - (when (block-delete-p block) - (delete-block block)))) + (delete-block-lazily block))) + (clean-component component (component-head component))) (values)) ;;; Move all the code and entry points from OLD to NEW. The code in @@ -93,6 +91,18 @@ (setf (block-flag block) t) (dolist (succ (block-succ block)) (find-dfo-aux succ head component)) + (when (component-nlx-info-generated-p component) + ;; FIXME: We also need (and do) this walk before physenv + ;; analysis, but at that time we are probably not very + ;; interested in the actual DF order. + ;; + ;; TODO: It is probable that one of successors have the same (or + ;; similar) set of NLXes; try to shorten the walk (but think + ;; about a loop, the only exit from which is non-local). + (map-block-nlxes (lambda (nlx-info) + (let ((nle (nlx-info-target nlx-info))) + (find-dfo-aux nle head component))) + block)) (remove-from-dfo block) (add-to-dfo block head)) (values)) @@ -355,7 +365,7 @@ (the simple-string (if (stringp leaf-debug-name) leaf-debug-name - (debug-namify "function ~S" leaf-debug-name))))) + (debug-namify "function " leaf-debug-name))))) ;;; Given a list of top level lambdas, return ;;; (VALUES NONTOP-COMPONENTS TOP-COMPONENTS HAIRY-TOP-COMPONENTS).