: height-state>insns ( state -- insns )
[ second ] map { ds-loc rs-loc } [ new swap >>n ] 2map
- [ n>> 0 = not ] filter [ ##inc new swap >>loc ] map ;
+ [ n>> 0 = ] reject [ ##inc new swap >>loc ] map ;
: translate-local-loc ( loc state -- loc' )
[ clone ] dip over >loc< 0 1 ? rot nth first - >>n ;
-: untranslate-local-loc ( loc state -- loc' )
- [ clone ] dip over >loc< 0 1 ? rot nth first + >>n ;
-
: clone-height-state ( state -- state' )
[ clone ] map ;
: replaces>copy-insns ( replaces -- insns )
[ [ loc>vreg ] dip ] assoc-map parallel-copy ;
-: replaces>replace-insns ( replaces height-state -- insns )
- [ keys ] dip
- '[ [ loc>vreg ] [ _ untranslate-local-loc ] bi f ##replace boa ] map
- [ loc>> n>> 0 >= ] filter ;
-
: changes>insns ( replaces height-state -- insns )
[ replaces>copy-insns ] [ height-state>insns ] bi* append ;
height-state get translate-local-loc replaces get set-at ;
: compute-local-kill-set ( basic-block -- set )
- [ rs-heights get at ] [ ds-heights get at ] bi
+ [ ds-heights get at ] [ rs-heights get at ] bi
height-state get local-kill-set ;
: begin-local-analysis ( basic-block -- )