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
FROM: sets => members set= ;
{
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
{ t } [
V{ T{ ##inc-r } T{ ##inc-d } } [ <node> ] map dup
build-dependence-graph
first2 [ insn>> ##inc-r? ] [ insn>> ##inc-d? ] bi* and
] unit-test
{ 0 } [
@ -28,11 +15,11 @@ FROM: sets => members set= ;
] unit-test
: 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
: 3node-tree ( -- tree )
3 iota [ node new swap >>number ] map first3
3 [ node new ] replicate first3
over attach-parent over attach-parent ;
! Verification tests
@ -73,7 +60,7 @@ ERROR: node-missing-children trees nodes ;
] unit-test
: 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+
{ f } [
@ -121,7 +108,7 @@ ERROR: node-missing-children trees nodes ;
] unit-test
: test-some-kind-of-dep ( -- insns )
0 node-number set-global
! 0 node-number set-global
V{
T{ ##peek { dst 275 } { loc D 2 } }
T{ ##load-tagged { dst 277 } { val 0 } }
@ -178,9 +165,9 @@ ERROR: node-missing-children trees nodes ;
[ parent-index>> -1/0. = ] count
] unit-test
{ V{ 1 4 7 8 } } [
{ V{ 0 6 12 14 } } [
test-some-kind-of-dep
dup build-dependence-graph
dup build-fan-in-trees
[ parent-index>> -1/0. = ] filter [ number>> ] map
[ parent-index>> -1/0. = ] filter [ insn>> insn#>> ] map
] unit-test

View File

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

View File

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