compiler.cfg.dependence/scheduling: refactoring, trying to get rid of the ugly usage of nodes dynamic variable

db4
Björn Lindqvist 2014-11-08 22:18:02 +01:00 committed by Doug Coleman
parent 0a7726b66d
commit 2cfd55b864
3 changed files with 17 additions and 17 deletions

View File

@ -84,13 +84,12 @@ M: object add-control-edge 2drop ;
: set-roots ( nodes -- ) : set-roots ( nodes -- )
[ ready? ] V{ } filter-as roots set ; [ ready? ] V{ } filter-as roots set ;
: build-dependence-graph ( instructions -- ) : build-dependence-graph ( nodes -- )
[ <node> ] map { {
[ add-control-edges ] [ add-control-edges ]
[ add-data-edges ] [ add-data-edges ]
[ set-follows ] [ set-follows ]
[ set-roots ] [ set-roots ]
[ nodes set ]
} cleave ; } cleave ;
! Sethi-Ulmann numbering ! Sethi-Ulmann numbering
@ -121,8 +120,7 @@ M: object add-control-edge 2drop ;
] if-empty ] if-empty
] [ drop ] if ; ] [ drop ] if ;
: make-trees ( -- trees ) : make-trees ( nodes -- trees )
nodes get
[ [ choose-parent ] each ] [ [ choose-parent ] each ]
[ [ parent>> not ] filter ] bi ; [ [ parent>> not ] filter ] bi ;
@ -146,8 +144,8 @@ ERROR: node-missing-children trees nodes ;
: verify-trees ( trees -- trees ) : verify-trees ( trees -- trees )
verify-parents verify-children ; verify-parents verify-children ;
: build-fan-in-trees ( -- ) : build-fan-in-trees ( nodes -- )
make-trees verify-trees [ dup nodes set make-trees verify-trees [
-1/0. >>parent-index -1/0. >>parent-index
calculate-registers drop calculate-registers drop
] each ; ] each ;

View File

@ -1,10 +1,6 @@
USING: compiler.cfg compiler.cfg.height help.markup help.syntax sequences ; USING: compiler.cfg compiler.cfg.height help.markup help.syntax sequences ;
IN: compiler.cfg.scheduling IN: compiler.cfg.scheduling
HELP: number-insns
{ $values { "insns" sequence } }
{ $description "Assigns a sequence number to the " { $slot "insn#" } " slot of each instruction in the sequence." } ;
HELP: schedule-instructions HELP: schedule-instructions
{ $values { "cfg" cfg } { "cfg'" cfg } } { $values { "cfg" cfg } { "cfg'" cfg } }
{ $description "Performs a instruction scheduling optimization pass over the CFG to attempt to reduce the number of spills. The step must be performed after " { $link normalize-height } " or else invalid peeks might be inserted into the CFG." } ; { $description "Performs a instruction scheduling optimization pass over the CFG to attempt to reduce the number of spills. The step must be performed after " { $link normalize-height } " or else invalid peeks might be inserted into the CFG." } ;

View File

@ -66,15 +66,21 @@ conditional-branch-insn
: final-insn-start ( insns -- n ) : final-insn-start ( insns -- n )
[ final-insn? not ] find-last drop [ 1 + ] [ 0 ] if* ; [ final-insn? not ] find-last drop [ 1 + ] [ 0 ] if* ;
! hack to get bootstrapping working
: split-indices-int ( seq indices -- pieces )
over length suffix 0 swap [ dup swapd 2array ] map nip
[ first2 rot subseq ] with map ;
: split-insns ( insns -- pre/body/post ) : split-insns ( insns -- pre/body/post )
dup [ initial-insn-end ] [ final-insn-start ] bi 2array split-indices ; dup [ initial-insn-end ] [ final-insn-start ] bi 2array split-indices-int ;
: reorder-body ( body -- body' )
[ <node> ] map
[ build-dependence-graph ] [ build-fan-in-trees ] bi
[ (reorder) ] V{ } make reverse ;
: reorder ( insns -- insns' ) : reorder ( insns -- insns' )
split-insns first3 [ split-insns first3 [ reorder-body ] dip 3append ;
build-dependence-graph
build-fan-in-trees
[ (reorder) ] V{ } make reverse
] dip 3append ;
: schedule-block ( bb -- ) : schedule-block ( bb -- )
[ reorder ] change-instructions drop ; [ reorder ] change-instructions drop ;