34 lines
		
	
	
		
			927 B
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			927 B
		
	
	
	
		
			Factor
		
	
	
! Copyright (C) 2008, 2009 Slava Pestov.
 | 
						|
! See http://factorcode.org/license.txt for BSD license.
 | 
						|
USING: kernel accessors combinators fry sequences assocs compiler.cfg.rpo
 | 
						|
compiler.cfg.instructions compiler.cfg.utilities ;
 | 
						|
IN: compiler.cfg.predecessors
 | 
						|
 | 
						|
<PRIVATE
 | 
						|
 | 
						|
: update-predecessors ( bb -- )
 | 
						|
    dup successors>> [ predecessors>> push ] with each ;
 | 
						|
 | 
						|
: update-phi ( bb ##phi -- )
 | 
						|
    [
 | 
						|
        swap predecessors>>
 | 
						|
        '[ drop _ member-eq? ] assoc-filter
 | 
						|
    ] change-inputs drop ;
 | 
						|
 | 
						|
: update-phis ( bb -- )
 | 
						|
    dup [ update-phi ] with each-phi ;
 | 
						|
 | 
						|
: compute-predecessors ( cfg -- cfg' )
 | 
						|
    {
 | 
						|
        [ [ V{ } clone >>predecessors drop ] each-basic-block ]
 | 
						|
        [ [ update-predecessors ] each-basic-block ]
 | 
						|
        [ [ update-phis ] each-basic-block ]
 | 
						|
        [ ]
 | 
						|
    } cleave ;
 | 
						|
 | 
						|
PRIVATE>
 | 
						|
 | 
						|
: needs-predecessors ( cfg -- cfg' )
 | 
						|
    dup predecessors-valid?>>
 | 
						|
    [ compute-predecessors t >>predecessors-valid? ] unless ;
 |