diff --git a/basis/compiler/cfg/ssa/destruction/destruction.factor b/basis/compiler/cfg/ssa/destruction/destruction.factor index a67f6a5fa7..d806f73771 100644 --- a/basis/compiler/cfg/ssa/destruction/destruction.factor +++ b/basis/compiler/cfg/ssa/destruction/destruction.factor @@ -13,8 +13,6 @@ IN: compiler.cfg.ssa.destruction SYMBOL: class-element-map -: class-elements ( vreg -- elts ) class-element-map get at ; - > ] [ src>> ] bi maybe-eliminate-copy-later ; + [ dst>> ] [ src>> ] bi 2array copies get push ; M: ##parallel-copy prepare-insn - values>> [ first2 maybe-eliminate-copy-later ] each ; + values>> copies get push-all ; : leaders ( vreg1 vreg2 -- vreg1' vreg2' ) [ leader ] bi@ ; : vregs-interfere? ( vreg1 vreg2 -- merged/f ? ) - [ class-elements ] bi@ sets-interfere? ; + [ class-element-map get at ] bi@ sets-interfere? ; ERROR: vregs-shouldn't-interfere vreg1 vreg2 ; :: must-eliminate-copy ( vreg1 vreg2 -- ) - ! Eliminate a copy. vreg1 vreg2 = [ vreg1 vreg2 vregs-interfere? [ vreg1 vreg2 vregs-shouldn't-interfere ] @@ -90,11 +84,9 @@ M: ##phi prepare-insn [ leaders must-eliminate-copy ] with each ; : prepare-coalescing ( cfg -- ) - init-coalescing - [ [ prepare-insn ] each ] simple-analysis ; + init-coalescing [ [ prepare-insn ] each ] simple-analysis ; :: maybe-eliminate-copy ( vreg1 vreg2 -- ) - ! Eliminate a copy if possible. vreg1 vreg2 = [ vreg1 vreg2 vregs-interfere? [ drop ] [ vreg1 vreg2 coalesce-vregs ] if