diff --git a/basis/compiler/cfg/dominance/dominance-tests.factor b/basis/compiler/cfg/dominance/dominance-tests.factor index 210d5614c2..d73871c25f 100644 --- a/basis/compiler/cfg/dominance/dominance-tests.factor +++ b/basis/compiler/cfg/dominance/dominance-tests.factor @@ -74,3 +74,25 @@ V{ } 5 test-bb [ ] [ test-dominance ] unit-test [ t ] [ 0 5 [a,b] [ get dom-parent 0 get eq? ] all? ] unit-test + +V{ } 0 test-bb +V{ } 1 test-bb +V{ } 2 test-bb +V{ } 3 test-bb +V{ } 4 test-bb +V{ } 5 test-bb +V{ } 6 test-bb + +0 get 1 get 5 get V{ } 2sequence >>successors drop +1 get 2 get 3 get V{ } 2sequence >>successors drop +2 get 4 get 1vector >>successors drop +3 get 4 get 1vector >>successors drop +4 get 6 get 1vector >>successors drop +5 get 6 get 1vector >>successors drop + +[ ] [ test-dominance ] unit-test + +[ t ] [ + 2 get 3 get 2array iterated-dom-frontier + 4 get 6 get 2array set= +] unit-test \ No newline at end of file diff --git a/basis/compiler/cfg/dominance/dominance.factor b/basis/compiler/cfg/dominance/dominance.factor index 9c8fc79619..73d9f58eec 100644 --- a/basis/compiler/cfg/dominance/dominance.factor +++ b/basis/compiler/cfg/dominance/dominance.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: accessors assocs combinators sets math fry kernel math.order -namespaces sequences sorting compiler.cfg.rpo ; +dlists deques namespaces sequences sorting compiler.cfg.rpo ; IN: compiler.cfg.dominance ! Reference: @@ -85,8 +85,31 @@ PRIVATE> PRIVATE> -: compute-dominance ( cfg -- cfg' ) +: compute-dominance ( cfg -- ) [ compute-dom-parents compute-dom-children ] [ compute-dom-frontiers ] - [ ] - tri ; + bi ; + + + +: iterated-dom-frontier ( bbs -- bbs' ) + [ + work-list set + H{ } clone visited set + [ add-to-work-list ] each + work-list get [ iterated-dom-frontier-step ] slurp-deque + visited get keys + ] with-scope ; \ No newline at end of file