| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | IN: temporary | 
					
						
							|  |  |  | USING: inference inference.dataflow optimizer optimizer.def-use | 
					
						
							|  |  |  | namespaces assocs kernel sequences math tools.test words ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ 3 { 1 1 1 } ] [ | 
					
						
							|  |  |  |     [ 1 2 3 ] dataflow compute-def-use | 
					
						
							|  |  |  |     def-use get values dup length swap [ length ] map
 | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : kill-set ( quot -- seq )
 | 
					
						
							| 
									
										
										
										
											2008-02-11 15:19:47 -05:00
										 |  |  |     dataflow compute-def-use compute-dead-literals keys
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |     [ value-literal ] map ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : subset? [ member? ] curry all? ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : set= 2dup subset? >r swap subset? r> and ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ { [ + ] } ] [ | 
					
						
							|  |  |  |     [ [ 1 2 3 ] [ + ] over drop drop ] kill-set | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ { [ + ] } ] [ | 
					
						
							|  |  |  |     [ [ + ] [ 1 2 3 ] over drop nip ] kill-set | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ { [ + ] } ] [ | 
					
						
							|  |  |  |     [ [ + ] dup over 3drop ] kill-set | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ | 
					
						
							|  |  |  |     { [ + ] [ - ] } | 
					
						
							|  |  |  |     [ [ + ] [ - ] [ 1 2 3 ] pick pick 2drop >r 2drop r> ] | 
					
						
							|  |  |  |     kill-set set= | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ | 
					
						
							|  |  |  |     { [ + ] } | 
					
						
							|  |  |  |     [ [ 1 2 3 ] [ 4 5 6 ] [ + ] pick >r drop r> ] | 
					
						
							|  |  |  |     kill-set set= | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ | 
					
						
							|  |  |  |     [ [ 1 ] [ 2 ] ] [ [ 1 ] [ 2 ] if ] kill-set set= | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ | 
					
						
							|  |  |  |     { [ 5 ] [ dup ] } | 
					
						
							|  |  |  |     [ [ 5 ] [ dup ] if ] kill-set set= | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ | 
					
						
							|  |  |  |     [ [ dup ] [ dup ] ] | 
					
						
							|  |  |  |     [ 5 swap [ dup ] [ dup ] if ] | 
					
						
							|  |  |  |     kill-set set= | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ | 
					
						
							|  |  |  |     [ 5 [ dup ] [ dup ] ] | 
					
						
							|  |  |  |     [ 5 swap [ dup ] [ dup ] if 2drop ] | 
					
						
							|  |  |  |     kill-set set= | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : literal-kill-test ( a b -- )
 | 
					
						
							|  |  |  |     dup [ >r dup slip r> literal-kill-test ] [ 2drop ] if ; inline
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ | 
					
						
							|  |  |  |     { [ ] [ >r dup slip r> literal-kill-test ] [ 2drop ] } | 
					
						
							|  |  |  |     [ [ ] swap literal-kill-test ] kill-set set= | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : p1 drop 4 ;
 | 
					
						
							|  |  |  | : p2 3drop 1 2 ;
 | 
					
						
							|  |  |  | : p3 drop 3 ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : regression-0 | 
					
						
							| 
									
										
										
										
											2008-01-09 17:36:30 -05:00
										 |  |  |     [ 2drop ] with assoc-find ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ | 
					
						
							| 
									
										
										
										
											2008-01-09 17:36:30 -05:00
										 |  |  |     [ [ 2drop ] with assoc-find ] kill-set | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |     [ 2drop ] swap member?
 | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ t ] [ | 
					
						
							|  |  |  |     [ [ "x" 2drop ] assoc-find ] kill-set | 
					
						
							|  |  |  |     [ "x" 2drop ] swap member?
 | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : 2swap ( x y z t -- z t x y )
 | 
					
						
							|  |  |  |     rot >r rot r> ; inline
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : regression-1 | 
					
						
							|  |  |  |     [ 2swap [ swapd * -rot p2 +@ ] 2keep ] assoc-each ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ { t t } ] [ | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         [ swapd * -rot p2 +@ ] | 
					
						
							|  |  |  |         [ 2swap [ swapd * -rot p2 +@ ] 2keep ] | 
					
						
							|  |  |  |     } \ regression-1 word-def kill-set [ member? ] curry map
 | 
					
						
							|  |  |  | ] unit-test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : regression-2 ( x y -- x.y )
 | 
					
						
							|  |  |  |     [ p1 ] 2apply [ | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |             rot
 | 
					
						
							|  |  |  |             [ 2swap [ swapd * -rot p2 +@ ] 2keep ] | 
					
						
							|  |  |  |             assoc-each 2drop
 | 
					
						
							| 
									
										
										
										
											2008-01-09 17:36:30 -05:00
										 |  |  |         ] with assoc-each
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |     ] H{ } make-assoc p3 ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ { t t t t t } ] [ | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         [ p1 ] | 
					
						
							|  |  |  |         [ swapd * -rot p2 +@ ] | 
					
						
							|  |  |  |         [ 2swap [ swapd * -rot p2 +@ ] 2keep ] | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |             rot
 | 
					
						
							|  |  |  |             [ 2swap [ swapd * -rot p2 +@ ] 2keep ] | 
					
						
							|  |  |  |             assoc-each 2drop
 | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |             [ | 
					
						
							|  |  |  |                 rot
 | 
					
						
							|  |  |  |                 [ 2swap [ swapd * -rot p2 +@ ] 2keep ] | 
					
						
							|  |  |  |                 assoc-each 2drop
 | 
					
						
							| 
									
										
										
										
											2008-01-09 17:36:30 -05:00
										 |  |  |             ] with assoc-each
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |         ] | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     \ regression-2 word-def kill-set | 
					
						
							|  |  |  |     [ member? ] curry map
 | 
					
						
							|  |  |  | ] unit-test |