diff options
author | Stas Boukarev <stassats@gmail.com> | 2023-12-15 23:24:18 +0300 |
---|---|---|
committer | Stas Boukarev <stassats@gmail.com> | 2023-12-16 00:24:58 +0300 |
commit | 5cace3b4f8632899c2fd93726e6d1b64ef337631 (patch) | |
tree | 7c397d5bc2aa4d2361dada68af272cba15755229 /src/compiler/dfo.lisp | |
parent | d6def056e49f79150d19a2c58b9df571634f7572 (diff) |
Fix find-dominators.
The algorithm depends on BLOCK-NUMBER, adding dfo-as-needed wasn't
enough.
Diffstat (limited to 'src/compiler/dfo.lisp')
-rw-r--r-- | src/compiler/dfo.lisp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/compiler/dfo.lisp b/src/compiler/dfo.lisp index 479562129..144845876 100644 --- a/src/compiler/dfo.lisp +++ b/src/compiler/dfo.lisp @@ -48,6 +48,12 @@ (aver cleanup) (block-flag (node-block (cleanup-mess-up cleanup))))))) +(defun number-blocks (component) + (let ((num 0)) + (declare (fixnum num)) + (do-blocks-backwards (block component :both) + (setf (block-number block) (incf num))))) + ;;; Find the DFO for a component, deleting any unreached blocks and ;;; merging any other components we reach. We repeatedly iterate over ;;; the entry points, since new ones may show up during the walk. @@ -417,11 +423,7 @@ (delete-component initial-component)))) ;; When we are done, we assign DFNs. - (dolist (component (components)) - (let ((num 0)) - (declare (fixnum num)) - (do-blocks-backwards (block component :both) - (setf (block-number block) (incf num))))) + (mapc #'number-blocks (components)) ;; Pull out top-level-ish code. (separate-toplevelish-components (components)))) |