41 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Factor
		
	
	
| ! Copyright (C) 2008 Slava Pestov.
 | |
| ! See http://factorcode.org/license.txt for BSD license.
 | |
| USING: sequences kernel fry vectors
 | |
| compiler.tree compiler.tree.def-use ;
 | |
| IN: compiler.tree.def-use.simplified
 | |
| 
 | |
| ! Simplified def-use follows chains of copies.
 | |
| 
 | |
| ! A 'real' usage is a usage of a value that is not a #renaming.
 | |
| TUPLE: real-usage value node ;
 | |
| 
 | |
| ! Def
 | |
| GENERIC: actually-defined-by* ( value node -- real-usage )
 | |
| 
 | |
| : actually-defined-by ( value -- real-usage )
 | |
|     dup defined-by actually-defined-by* ;
 | |
| 
 | |
| M: #renaming actually-defined-by*
 | |
|     inputs/outputs swap [ index ] dip nth actually-defined-by ;
 | |
| 
 | |
| M: #return-recursive actually-defined-by* real-usage boa ;
 | |
| 
 | |
| M: node actually-defined-by* real-usage boa ;
 | |
| 
 | |
| ! Use
 | |
| GENERIC# actually-used-by* 1 ( value node accum -- )
 | |
| 
 | |
| : (actually-used-by) ( value accum -- )
 | |
|     [ [ used-by ] keep ] dip '[ _ swap _ actually-used-by* ] each ;
 | |
| 
 | |
| M: #renaming actually-used-by*
 | |
|     [ inputs/outputs [ indices ] dip nths ] dip
 | |
|     '[ _ (actually-used-by) ] each ;
 | |
| 
 | |
| M: #return-recursive actually-used-by* [ real-usage boa ] dip push ;
 | |
| 
 | |
| M: node actually-used-by* [ real-usage boa ] dip push ;
 | |
| 
 | |
| : actually-used-by ( value -- real-usages )
 | |
|     10 <vector> [ (actually-used-by) ] keep ;
 |