47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Factor
		
	
	
! Copyright (C) 2008 Slava Pestov.
 | 
						|
! See http://factorcode.org/license.txt for BSD license.
 | 
						|
IN: compiler.tree.dataflow-analysis.backward
 | 
						|
USING: accessors sequences assocs kernel compiler.tree
 | 
						|
compiler.tree.dataflow-analysis ;
 | 
						|
 | 
						|
GENERIC: backward ( value node -- )
 | 
						|
 | 
						|
M: #copy backward
 | 
						|
    #! If the output of a copy is live, then the corresponding
 | 
						|
    #! input is live also.
 | 
						|
    [ out-d>> index ] keep in-d>> nth look-at-value ;
 | 
						|
 | 
						|
M: #call backward
 | 
						|
    #! If any of the outputs of a call are live, then all
 | 
						|
    #! inputs and outputs must be live.
 | 
						|
    nip [ look-at-inputs ] [ look-at-outputs ] bi ;
 | 
						|
 | 
						|
M: #call-recursive backward
 | 
						|
    #! If the output of a copy is live, then the corresponding
 | 
						|
    #! inputs to #return nodes are live also.
 | 
						|
    [ out-d>> <reversed> index ] keep label>> returns>>
 | 
						|
    [ <reversed> nth look-at-value ] with each ;
 | 
						|
 | 
						|
M: #>r backward nip in-d>> first look-at-value ;
 | 
						|
 | 
						|
M: #r> backward nip in-r>> first look-at-value ;
 | 
						|
 | 
						|
M: #shuffle backward mapping>> at look-at-value ;
 | 
						|
 | 
						|
M: #phi backward
 | 
						|
    #! If any of the outputs of a #phi are live, then the
 | 
						|
    #! corresponding inputs are live too.
 | 
						|
    [ [ out-d>> ] [ phi-in-d>> ] bi look-at-corresponding ]
 | 
						|
    [ [ out-r>> ] [ phi-in-r>> ] bi look-at-corresponding ]
 | 
						|
    2bi ;
 | 
						|
 | 
						|
M: #alien-invoke backward
 | 
						|
    nip [ look-at-inputs ] [ look-at-outputs ] bi ;
 | 
						|
 | 
						|
M: #alien-indirect backward
 | 
						|
    nip [ look-at-inputs ] [ look-at-outputs ] bi ;
 | 
						|
 | 
						|
M: node backward 2drop ;
 | 
						|
 | 
						|
: backward-dfa ( node quot -- assoc ) [ backward ] dfa ; inline
 |