]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/tree/dead-code/dead-code-tests.factor
Fixing unit tests for stack effect inference changes
[factor.git] / basis / compiler / tree / dead-code / dead-code-tests.factor
1 USING: namespaces assocs sequences compiler.tree.builder
2 compiler.tree.dead-code compiler.tree.def-use compiler.tree
3 compiler.tree.combinators compiler.tree.propagation
4 compiler.tree.cleanup compiler.tree.escape-analysis
5 compiler.tree.tuple-unboxing compiler.tree.debugger
6 compiler.tree.recursive compiler.tree.normalization
7 compiler.tree.checker tools.test kernel math stack-checker.state
8 accessors combinators io prettyprint words sequences.deep
9 sequences.private arrays classes kernel.private ;
10 IN: compiler.tree.dead-code.tests
11
12 : count-live-values ( quot -- n )
13     build-tree
14     analyze-recursive
15     normalize
16     propagate
17     cleanup
18     escape-analysis
19     unbox-tuples
20     compute-def-use
21     remove-dead-code
22     0 swap [
23         dup
24         [ #push? ] [ #introduce? ] bi or
25         [ out-d>> length + ] [ drop ] if
26     ] each-node ;
27
28 [ 3 ] [ [ 1 2 3 ] count-live-values ] unit-test
29
30 [ 1 ] [ [ drop ] count-live-values ] unit-test
31
32 [ 0 ] [ [ 1 drop ] count-live-values ] unit-test
33
34 [ 1 ] [ [ 1 2 drop ] count-live-values ] unit-test
35
36 [ 3 ] [ [ [ 1 ] [ 2 ] if ] count-live-values ] unit-test
37
38 [ 1 ] [ [ [ 1 ] [ 2 ] if drop ] count-live-values ] unit-test
39
40 [ 2 ] [ [ [ 1 ] [ dup ] if drop ] count-live-values ] unit-test
41
42 [ 2 ] [ [ 1 + ] count-live-values ] unit-test
43
44 [ 0 ] [ [ 1 2 + drop ] count-live-values ] unit-test
45
46 [ 3 ] [ [ 1 + 3 + ] count-live-values ] unit-test
47
48 [ 0 ] [ [ 1 2 + 3 + drop ] count-live-values ] unit-test
49
50 [ 4 ] [ [ [ 1 ] [ 2 ] if 3 + ] count-live-values ] unit-test
51
52 [ 1 ] [ [ [ 1 ] [ 2 ] if 3 + drop ] count-live-values ] unit-test
53
54 [ 0 ] [ [ [ ] call ] count-live-values ] unit-test
55
56 [ 1 ] [ [ [ 1 ] call ] count-live-values ] unit-test
57
58 [ 2 ] [ [ [ 1 ] [ 2 ] compose call ] count-live-values ] unit-test
59
60 [ 0 ] [ [ [ 1 ] [ 2 ] compose call + drop ] count-live-values ] unit-test
61
62 [ 3 ] [ [ 10 [ ] times ] count-live-values ] unit-test
63
64 : optimize-quot ( quot -- quot' )
65     build-tree
66     analyze-recursive
67     normalize
68     propagate
69     cleanup
70     escape-analysis
71     unbox-tuples
72     compute-def-use
73     remove-dead-code
74     "no-check" get [ dup check-nodes ] unless nodes>quot ;
75
76 [ [ drop 1 ] ] [ [ [ 1 ] dip drop ] optimize-quot ] unit-test
77
78 [ [ read drop 1 2 ] ] [ [ read [ 1 2 ] dip drop ] optimize-quot ] unit-test
79
80 [ [ over >R + R> ] ] [ [ [ + ] [ drop ] 2bi ] optimize-quot ] unit-test
81
82 [ [ [ ] [ ] if ] ] [ [ [ 1 ] [ 2 ] if drop ] optimize-quot ] unit-test
83
84 : flushable-1 ( a b -- c ) 2drop f ; flushable
85 : flushable-2 ( a b -- c ) 2drop f ; flushable
86
87 [ [ 2nip [ ] [ ] if ] ] [
88     [ [ flushable-1 ] [ flushable-2 ] if drop ] optimize-quot
89 ] unit-test
90
91 : non-flushable-3 ( a b -- c ) 2drop f ;
92
93 [ [ [ 2drop ] [ non-flushable-3 drop ] if ] ] [
94     [ [ flushable-1 ] [ non-flushable-3 ] if drop ] optimize-quot
95 ] unit-test
96
97 [ [ [ f ] [ f ] if ] ] [ [ [ f ] [ f ] if ] optimize-quot ] unit-test
98
99 [ ] [ [ dup [ 3 throw ] [ ] if ] optimize-quot drop ] unit-test
100
101 [ [ [ . ] [ drop ] if ] ] [ [ [ dup . ] [ ] if drop ] optimize-quot ] unit-test
102
103 [ [ f ] ] [ [ f dup [ ] [ ] if ] optimize-quot ] unit-test
104
105 [ ] [ [ over [ ] [ dup [ "X" throw ] [ "X" throw ] if ] if ] optimize-quot drop ] unit-test
106
107 : boo ( a b -- c ) 2drop f ;
108
109 [ [ dup 4 eq? [ nip ] [ boo ] if ] ] [ [ dup dup 4 eq? [ drop nip ] [ drop boo ] if ] optimize-quot ] unit-test
110
111 : squish ( quot -- quot' )
112     [
113         {
114             { [ dup word? ] [ dup vocabulary>> [ drop "REC" ] unless ] }
115             { [ dup wrapper? ] [ dup wrapped>> vocabulary>> [ drop "WRAP" ] unless ] }
116             [ ]
117         } cond
118     ] deep-map ;
119
120 : call-recursive-dce-1 ( a -- b )
121     [ call-recursive-dce-1 drop ] [ call-recursive-dce-1 ] bi ; inline recursive
122
123 [ [ drop "WRAP" [ "REC" drop "REC" ] label ] ] [
124     [ call-recursive-dce-1 ] optimize-quot squish
125 ] unit-test
126
127 : produce-a-value ( -- a ) f ;
128
129 : call-recursive-dce-2 ( a -- b )
130     drop
131     produce-a-value dup . call-recursive-dce-2 ; inline recursive
132
133 [ [ "WRAP" [ produce-a-value . "REC" ] label ] ] [
134     [ f call-recursive-dce-2 drop ] optimize-quot squish
135 ] unit-test
136
137 [ [ "WRAP" [ produce-a-value . "REC" ] label ] ] [
138     [ f call-recursive-dce-2 ] optimize-quot squish
139 ] unit-test
140
141 : call-recursive-dce-3 ( a -- )
142     call-recursive-dce-3 ; inline recursive
143
144 [ [ [ drop "WRAP" [ "REC" ] label ] [ . ] if ] ] [
145     [ [ call-recursive-dce-3 ] [ . ] if ] optimize-quot squish
146 ] unit-test
147
148 [ [ drop "WRAP" [ "REC" ] label ] ] [
149     [ call-recursive-dce-3 ] optimize-quot squish
150 ] unit-test
151
152 : call-recursive-dce-4 ( a -- b )
153     call-recursive-dce-4 ; inline recursive
154
155 [ [ drop "WRAP" [ "REC" ] label ] ] [
156     [ call-recursive-dce-4 ] optimize-quot squish
157 ] unit-test
158
159 [ [ drop "WRAP" [ "REC" ] label ] ] [
160     [ call-recursive-dce-4 drop ] optimize-quot squish
161 ] unit-test
162
163 [ ] [ [ f call-recursive-dce-3 swap ] optimize-quot drop ] unit-test
164
165 : call-recursive-dce-5 ( -- ) call-recursive-dce-5 ; inline recursive
166
167 [ ] [ [ call-recursive-dce-5 swap ] optimize-quot drop ] unit-test
168
169 [ ] [ [ [ 0 -rot set-nth-unsafe ] curry (each-integer) ] optimize-quot drop ] unit-test
170
171 : call-recursive-dce-6 ( i quot: ( i -- ? ) -- i )
172     dup call [ drop ] [ call-recursive-dce-6 ] if ; inline recursive
173
174 [ ] [ [ [ ] curry [ ] swap compose call-recursive-dce-6 ] optimize-quot drop ] unit-test
175
176 [ ] [ [ [ ] rot [ . ] curry pick [ roll 2drop call ] [ 2nip call ] if ] optimize-quot drop ] unit-test
177
178 [ [ drop ] ] [ [ array? drop ] optimize-quot ] unit-test
179
180 [ [ drop ] ] [ [ array instance? drop ] optimize-quot ] unit-test
181
182 [ [ drop ] ] [ [ { integer } declare f <array> drop ] optimize-quot ] unit-test
183
184 [ [ f <array> drop ] ] [ [ f <array> drop ] optimize-quot ] unit-test
185
186 : call-recursive-dce-7 ( obj -- elt ? )
187     dup 5 = [ t ] [ dup [ call-recursive-dce-7 ] [ drop f f ] if ] if ; inline recursive
188
189 [ ] [ [ call-recursive-dce-7 ] optimize-quot drop ] unit-test