21 lines
		
	
	
		
			664 B
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			21 lines
		
	
	
		
			664 B
		
	
	
	
		
			Factor
		
	
	
! Copyright (C) 2009 Slava Pestov.
 | 
						|
! See http://factorcode.org/license.txt for BSD license.
 | 
						|
USING: accessors compiler.cfg compiler.cfg.instructions
 | 
						|
compiler.cfg.rpo fry kernel sequences ;
 | 
						|
IN: compiler.cfg.phi-elimination
 | 
						|
 | 
						|
: insert-copy ( predecessor input output -- )
 | 
						|
    '[ _ _ swap ##copy ] add-instructions ;
 | 
						|
 | 
						|
: eliminate-phi ( bb ##phi -- )
 | 
						|
    [ predecessors>> ] [ [ inputs>> ] [ dst>> ] bi ] bi*
 | 
						|
    '[ _ insert-copy ] 2each ;
 | 
						|
 | 
						|
: eliminate-phi-step ( bb -- )
 | 
						|
    dup [
 | 
						|
        [ ##phi? ] partition
 | 
						|
        [ [ eliminate-phi ] with each ] dip
 | 
						|
    ] change-instructions drop ;
 | 
						|
 | 
						|
: eliminate-phis ( cfg -- cfg' )
 | 
						|
    dup [ eliminate-phi-step ] each-basic-block ; |