compiler.cfg.dependence: if node subclasses identity-tuple it doesn't need the number slot

db4
Björn Lindqvist 2014-11-11 08:21:45 +01:00 committed by Doug Coleman
parent eb9ca1c6fe
commit 9d0379b9ba
3 changed files with 13 additions and 35 deletions

View File

@ -4,23 +4,10 @@ grouping kernel math namespaces random sequences tools.test vectors ;
IN: compiler.cfg.dependence.tests IN: compiler.cfg.dependence.tests
FROM: sets => members set= ; FROM: sets => members set= ;
{ { t } [
V{
T{ node
{ number 1 }
{ insn T{ ##inc-r } }
{ precedes H{ } }
}
T{ node
{ number 2 }
{ insn T{ ##inc-d } }
{ precedes H{ } }
}
}
} [
0 node-number set-global
V{ T{ ##inc-r } T{ ##inc-d } } [ <node> ] map dup V{ T{ ##inc-r } T{ ##inc-d } } [ <node> ] map dup
build-dependence-graph build-dependence-graph
first2 [ insn>> ##inc-r? ] [ insn>> ##inc-d? ] bi* and
] unit-test ] unit-test
{ 0 } [ { 0 } [
@ -28,11 +15,11 @@ FROM: sets => members set= ;
] unit-test ] unit-test
: 2node-tree ( -- tree ) : 2node-tree ( -- tree )
2 iota [ node new swap >>number ] map first2 over attach-parent ; 2 [ node new ] replicate first2 over attach-parent ;
! 0 -> 1 -> 2 ! 0 -> 1 -> 2
: 3node-tree ( -- tree ) : 3node-tree ( -- tree )
3 iota [ node new swap >>number ] map first3 3 [ node new ] replicate first3
over attach-parent over attach-parent ; over attach-parent over attach-parent ;
! Verification tests ! Verification tests
@ -73,7 +60,7 @@ ERROR: node-missing-children trees nodes ;
] unit-test ] unit-test
: dummy-node ( number -- node ) : dummy-node ( number -- node )
node new over >>number ##allot new rot >>insn# >>insn ; ##allot new swap >>insn# node new swap >>insn ;
! No parent because it has +control+ ! No parent because it has +control+
{ f } [ { f } [
@ -121,7 +108,7 @@ ERROR: node-missing-children trees nodes ;
] unit-test ] unit-test
: test-some-kind-of-dep ( -- insns ) : test-some-kind-of-dep ( -- insns )
0 node-number set-global ! 0 node-number set-global
V{ V{
T{ ##peek { dst 275 } { loc D 2 } } T{ ##peek { dst 275 } { loc D 2 } }
T{ ##load-tagged { dst 277 } { val 0 } } T{ ##load-tagged { dst 277 } { val 0 } }
@ -178,9 +165,9 @@ ERROR: node-missing-children trees nodes ;
[ parent-index>> -1/0. = ] count [ parent-index>> -1/0. = ] count
] unit-test ] unit-test
{ V{ 1 4 7 8 } } [ { V{ 0 6 12 14 } } [
test-some-kind-of-dep test-some-kind-of-dep
dup build-dependence-graph dup build-dependence-graph
dup build-fan-in-trees dup build-fan-in-trees
[ parent-index>> -1/0. = ] filter [ number>> ] map [ parent-index>> -1/0. = ] filter [ insn>> insn#>> ] map
] unit-test ] unit-test

View File

@ -6,20 +6,13 @@ namespaces sequences sorting make math math.vectors sets vectors ;
FROM: namespaces => set ; FROM: namespaces => set ;
IN: compiler.cfg.dependence IN: compiler.cfg.dependence
SYMBOL: node-number
SYMBOL: +data+ SYMBOL: +data+
SYMBOL: +control+ SYMBOL: +control+
TUPLE: node number insn precedes children registers parent-index ; TUPLE: node < identity-tuple insn precedes children registers parent-index ;
M: node equal? over node? [ [ number>> ] same? ] [ 2drop f ] if ;
M: node hashcode* nip number>> ;
: <node> ( insn -- node ) : <node> ( insn -- node )
node new node new
node-number counter >>number
swap >>insn swap >>insn
H{ } clone >>precedes ; H{ } clone >>precedes ;

View File

@ -160,15 +160,13 @@ IN: compiler.cfg.scheduling.tests
] unit-test ] unit-test
{ t f } [ { t f } [
0 node-number set-global test-some-kind-of-dep [ <node> ] map test-some-kind-of-dep dup build-dependence-graph
dup build-dependence-graph ! Anyone preceding insn# 14?
! Anyone preceding node number 8?
[ [
[ precedes>> keys [ number>> ] map 8 swap member? ] any? [ precedes>> keys [ insn>> insn#>> ] map 14 swap member? ] any?
] ]
[ [
unclip-last over swap remove-node unclip-last over swap remove-node
[ precedes>> keys [ number>> ] map 8 swap member? ] any? [ precedes>> keys [ insn>> insn#>> ] map 14 swap member? ] any?
] bi ] bi
] unit-test ] unit-test