compiler.cfg.linearization: fix bootstrap

db4
Slava Pestov 2009-07-28 22:52:07 -05:00
parent 4359a10259
commit 50bf6f52b4
1 changed files with 5 additions and 2 deletions

View File

@ -2,7 +2,7 @@
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors assocs deques dlists kernel make USING: accessors assocs deques dlists kernel make
namespaces sequences combinators combinators.short-circuit 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 IN: compiler.cfg.linearization.order
! This is RPO except loops are rotated. Based on SBCL's src/compiler/control.lisp ! 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> PRIVATE>
: linearization-order ( cfg -- bbs ) : linearization-order ( cfg -- bbs )
! We call 'post-order drop' to ensure blocks receive their
! RPO numbers.
<dlist> work-list set <dlist> work-list set
H{ } clone visited set H{ } clone visited set
H{ } clone numbers set H{ } clone numbers set
0 next-number 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 ; [ work-list get [ process-block ] slurp-deque ] { } make ;
: block-number ( bb -- n ) numbers get at ; : block-number ( bb -- n ) numbers get at ;