1 USING: accessors inference inference.dataflow optimizer
2 optimizer.def-use namespaces assocs kernel sequences math
3 tools.test words sets ;
4 IN: optimizer.def-use.tests
7 [ 1 2 3 ] dataflow compute-def-use drop
8 def-use get values dup length swap [ length ] map
11 : kill-set ( quot -- seq )
12 dataflow compute-def-use drop compute-dead-literals keys
13 [ value-literal ] map ;
16 [ [ 1 2 3 ] [ + ] over drop drop ] kill-set
20 [ [ + ] [ 1 2 3 ] over drop nip ] kill-set
24 [ [ + ] dup over 3drop ] kill-set
29 [ [ + ] [ - ] [ 1 2 3 ] pick pick 2drop >r 2drop r> ]
35 [ [ 1 2 3 ] [ 4 5 6 ] [ + ] pick >r drop r> ]
40 [ [ 1 ] [ 2 ] ] [ [ 1 ] [ 2 ] if ] kill-set set=
45 [ [ 5 ] [ dup ] if ] kill-set set=
50 [ 5 swap [ dup ] [ dup ] if ]
56 [ 5 swap [ dup ] [ dup ] if 2drop ]
60 : literal-kill-test ( a b -- )
61 dup [ >r dup slip r> literal-kill-test ] [ 2drop ] if ; inline
64 { [ ] [ >r dup slip r> literal-kill-test ] [ 2drop ] }
65 [ [ ] swap literal-kill-test ] kill-set set=
73 [ 2drop ] with assoc-find ;
76 [ [ 2drop ] with assoc-find ] kill-set
77 [ 2drop ] swap member?
81 [ [ "x" 2drop ] assoc-find ] kill-set
82 [ "x" 2drop ] swap member?
85 : 2swap ( x y z t -- z t x y )
86 rot >r rot r> ; inline
89 [ 2swap [ swapd * -rot p2 +@ ] 2keep ] assoc-each ;
93 [ swapd * -rot p2 +@ ]
94 [ 2swap [ swapd * -rot p2 +@ ] 2keep ]
95 } \ regression-1 def>> kill-set [ member? ] curry map
98 : regression-2 ( x y -- x.y )
102 [ 2swap [ swapd * -rot p2 +@ ] 2keep ]
105 ] H{ } make-assoc p3 ;
110 [ swapd * -rot p2 +@ ]
111 [ 2swap [ swapd * -rot p2 +@ ] 2keep ]
114 [ 2swap [ swapd * -rot p2 +@ ] 2keep ]
120 [ 2swap [ swapd * -rot p2 +@ ] 2keep ]
125 \ regression-2 def>> kill-set
126 [ member? ] curry map