summaryrefslogtreecommitdiff
path: root/src/compiler/dfo.lisp
diff options
context:
space:
mode:
authorStas Boukarev <stassats@gmail.com>2023-12-15 23:24:18 +0300
committerStas Boukarev <stassats@gmail.com>2023-12-16 00:24:58 +0300
commit5cace3b4f8632899c2fd93726e6d1b64ef337631 (patch)
tree7c397d5bc2aa4d2361dada68af272cba15755229 /src/compiler/dfo.lisp
parentd6def056e49f79150d19a2c58b9df571634f7572 (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.lisp12
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))))