-USING: compiler.cfg.gvn compiler.cfg.instructions
+USING: combinators compiler.cfg.gvn compiler.cfg.instructions
compiler.cfg.registers compiler.cfg.debugger
compiler.cfg.comparisons cpu.architecture tools.test kernel
math combinators.short-circuit accessors sequences
: value-number-bb ( insns -- insns' )
0 test-bb
0 get block>cfg
- value-numbering drop
+ value-numbering
0 get instructions>> ;
! Folding constants together
V{ } 2 test-bb
0 { 1 2 } edges
0 get block>cfg
- value-numbering drop
+ value-numbering
0 get [ instructions>> ] [ successors>> first number>> 1 - ] bi ;
[
test-diamond
[ ] [
- 0 get block>cfg dup cfg set
- value-numbering
- select-representations
- destruct-ssa drop
+ 0 get block>cfg {
+ [ cfg set ]
+ [ value-numbering ]
+ [ select-representations ]
+ [ destruct-ssa ]
+ } cleave
] unit-test
[ 1 ] [ 1 get successors>> length ] unit-test
test-diamond
-[ ] [ 0 get block>cfg value-numbering drop ] unit-test
+[ ] [ 0 get block>cfg value-numbering ] unit-test
[ t ] [ 1 get successors>> first 3 get eq? ] unit-test
[ ] [
0 get block>cfg
- value-numbering eliminate-dead-code
+ dup value-numbering eliminate-dead-code
] unit-test
[ f ] [ 1 get instructions>> [ ##peek? ] any? ] unit-test
test-diamond
-[ ] [ 0 get block>cfg value-numbering drop ] unit-test
+[ ] [ 0 get block>cfg value-numbering ] unit-test
! First ##load-integer cannot be turned into a ##copy because
! the canonical leader for the value 100 is unavailable, but
3 2 edge
4 5 edge
-[ ] [ 0 get block>cfg value-numbering eliminate-dead-code ] unit-test
+[ ] [ 0 get block>cfg dup value-numbering eliminate-dead-code ] unit-test
[ 1 ] [ 1 get instructions>> [ ##load-integer? ] count ] unit-test
[ 1 ] [ 2 get instructions>> [ ##phi? ] count ] unit-test