From 280736ab00d6a9f57095a7ac7e07e3aaf6d91f67 Mon Sep 17 00:00:00 2001 From: Slava Pestov <slava@slava-pestovs-macbook-pro.local> Date: Fri, 29 May 2009 05:45:40 -0500 Subject: [PATCH] On second thought, linearization will be done after SSA destruction so live-in is accurate --- .../cfg/linearization/linearization.factor | 28 ++++--------------- 1 file changed, 5 insertions(+), 23 deletions(-) diff --git a/basis/compiler/cfg/linearization/linearization.factor b/basis/compiler/cfg/linearization/linearization.factor index 0d851ea483..9b328a43c0 100755 --- a/basis/compiler/cfg/linearization/linearization.factor +++ b/basis/compiler/cfg/linearization/linearization.factor @@ -13,37 +13,19 @@ IN: compiler.cfg.linearization GENERIC: linearize-insn ( basic-block insn -- ) : linearize-insns ( bb insns -- ) - [ linearize-insn ] with each ; + dup instructions>> [ linearize-insn ] with each ; : gc? ( bb -- ? ) instructions>> [ ##allocation? ] any? ; : object-pointer-regs ( basic-block -- vregs ) - live-out keys [ reg-class>> int-regs eq? ] filter ; - -: gc-check-position ( insns -- n ) - #! We want to insert the GC check before the final branch in a basic block. - #! If there is a ##epilogue or ##loop-entry we want to insert it before that too. - dup length - dup 2 >= [ - 2 - swap nth [ ##loop-entry? ] [ ##epilogue? ] bi or - 2 1 ? - ] [ 2drop 1 ] if ; - -: linearize-basic-block/gc ( bb -- ) - dup instructions>> dup gc-check-position - [ head* linearize-insns ] - [ 2drop object-pointer-regs _gc ] - [ tail* linearize-insns ] - 3tri ; + live-in keys [ reg-class>> int-regs eq? ] filter ; : linearize-basic-block ( bb -- ) [ number>> _label ] - [ - dup gc? - [ linearize-basic-block/gc ] - [ dup instructions>> linearize-insns ] if - ] bi ; + [ dup gc? [ object-pointer-regs _gc ] [ drop ] if ] + [ linearize-insns ] + tri ; M: insn linearize-insn , drop ;