PRIVATE>
-: needs-dominance ( cfg -- cfg' )
+: needs-dominance ( cfg -- )
needs-predecessors
- dup dominance-valid?>> [ compute-dominance t >>dominance-valid? ] unless ;
+ dup dominance-valid?>> [ compute-dominance t >>dominance-valid? ] unless
+ drop ;
: dominates? ( bb1 bb2 -- ? )
swap [ pre-of ] [ [ pre-of ] [ maxpre-of ] bi ] bi* between? ;
! See http://factorcode.org/license.txt for BSD license.
USING: accessors arrays assocs bit-arrays bit-sets fry
hashtables hints kernel locals math namespaces sequences sets
-compiler.cfg compiler.cfg.dominance compiler.cfg.rpo ;
+combinators compiler.cfg compiler.cfg.dominance compiler.cfg.rpo ;
FROM: namespaces => set ;
FROM: assocs => change-at ;
IN: compiler.cfg.ssa.construction.tdmsc
PRIVATE>
: compute-merge-sets ( cfg -- )
- needs-dominance
-
- [ compute-levels ]
- [ init-merge-sets ]
- [ compute-merge-set-loop ]
- tri ;
+ {
+ [ needs-dominance ]
+ [ compute-levels ]
+ [ init-merge-sets ]
+ [ compute-merge-set-loop ]
+ } cleave ;
: merge-set ( bbs -- bbs' )
(merge-set) [ members ] dip nths ;
PRIVATE>
: compute-live-ranges ( cfg -- )
- needs-dominance
-
H{ } clone def-indices set
H{ } clone kill-indices set
- [ compute-local-live-ranges ] simple-analysis ;
+ [ needs-dominance ]
+ [ [ compute-local-live-ranges ] simple-analysis ] bi ;
: def-index ( vreg bb -- n )
def-indices get at at ;