compiler.cfg.dependence: if node subclasses identity-tuple it doesn't need the number slot
parent
eb9ca1c6fe
commit
9d0379b9ba
|
@ -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
|
||||||
|
|
|
@ -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 ;
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue