add branch splitting pass to compiler.cfg
parent
1fab8efeee
commit
ea072731d4
|
@ -0,0 +1 @@
|
|||
Doug Coleman
|
|
@ -0,0 +1,29 @@
|
|||
! Copyright (C) 2009 Doug Coleman.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors combinators.short-circuit compiler.cfg.def-use
|
||||
compiler.cfg.rpo kernel math sequences ;
|
||||
IN: compiler.cfg.branch-splitting
|
||||
|
||||
: split-branch ( branch -- )
|
||||
[
|
||||
[ instructions>> ] [ predecessors>> ] bi [
|
||||
instructions>> [ pop* ] [ push-all ] bi
|
||||
] with each
|
||||
] [
|
||||
[ successors>> ] [ predecessors>> ] bi [
|
||||
[ drop clone ] change-successors drop
|
||||
] with each
|
||||
] bi ;
|
||||
|
||||
: split-branches? ( bb -- ? )
|
||||
{
|
||||
[ predecessors>> length 1 >= ]
|
||||
[ successors>> length 1 <= ]
|
||||
[ instructions>> [ defs-vregs ] any? not ]
|
||||
[ instructions>> [ temp-vregs ] any? not ]
|
||||
} 1&& ;
|
||||
|
||||
: split-branches ( cfg -- cfg' )
|
||||
dup [
|
||||
dup split-branches? [ split-branch ] [ drop ] if
|
||||
] each-basic-block f >>post-order ;
|
Loading…
Reference in New Issue