From 50bf6f52b40bd13cdb7c7868aa9f422a68cbb6d1 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 28 Jul 2009 22:52:07 -0500 Subject: [PATCH] compiler.cfg.linearization: fix bootstrap --- basis/compiler/cfg/linearization/order/order.factor | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/basis/compiler/cfg/linearization/order/order.factor b/basis/compiler/cfg/linearization/order/order.factor index daa536dd18..c09c2969ba 100644 --- a/basis/compiler/cfg/linearization/order/order.factor +++ b/basis/compiler/cfg/linearization/order/order.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: accessors assocs deques dlists kernel make namespaces sequences combinators combinators.short-circuit -fry math sets compiler.cfg.utilities ; +fry math sets compiler.cfg.rpo compiler.cfg.utilities ; IN: compiler.cfg.linearization.order ! This is RPO except loops are rotated. Based on SBCL's src/compiler/control.lisp @@ -60,11 +60,14 @@ SYMBOLS: work-list loop-heads visited numbers next-number ; PRIVATE> : linearization-order ( cfg -- bbs ) + ! We call 'post-order drop' to ensure blocks receive their + ! RPO numbers. work-list set H{ } clone visited set H{ } clone numbers set 0 next-number set - entry>> add-to-work-list + [ post-order drop ] + [ entry>> add-to-work-list ] bi [ work-list get [ process-block ] slurp-deque ] { } make ; : block-number ( bb -- n ) numbers get at ;