compiler.cfg.copy-prop: remove ##phi nodes where all inputs are copy-equivalent
							parent
							
								
									fc41140720
								
							
						
					
					
						commit
						e9935b6aad
					
				| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
! Copyright (C) 2008, 2009 Slava Pestov.
 | 
					! Copyright (C) 2008, 2009 Slava Pestov.
 | 
				
			||||||
! See http://factorcode.org/license.txt for BSD license.
 | 
					! See http://factorcode.org/license.txt for BSD license.
 | 
				
			||||||
USING: kernel namespaces assocs accessors sequences
 | 
					USING: kernel namespaces assocs accessors sequences grouping
 | 
				
			||||||
compiler.cfg.rpo compiler.cfg.renaming compiler.cfg.instructions ;
 | 
					compiler.cfg.rpo compiler.cfg.renaming compiler.cfg.instructions ;
 | 
				
			||||||
IN: compiler.cfg.copy-prop
 | 
					IN: compiler.cfg.copy-prop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,10 +8,13 @@ IN: compiler.cfg.copy-prop
 | 
				
			||||||
SYMBOL: copies
 | 
					SYMBOL: copies
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: resolve ( vreg -- vreg )
 | 
					: resolve ( vreg -- vreg )
 | 
				
			||||||
    [ copies get at ] keep or ;
 | 
					    copies get ?at drop ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: (record-copy) ( dst src -- )
 | 
				
			||||||
 | 
					    swap copies get set-at ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: record-copy ( ##copy -- )
 | 
					: record-copy ( ##copy -- )
 | 
				
			||||||
    [ src>> resolve ] [ dst>> ] bi copies get set-at ; inline
 | 
					    [ dst>> ] [ src>> resolve ] bi (record-copy) ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<PRIVATE
 | 
					<PRIVATE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,7 +22,9 @@ GENERIC: visit-insn ( insn -- )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
M: ##copy visit-insn record-copy ;
 | 
					M: ##copy visit-insn record-copy ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
M: ##phi visit-insn inputs>> values [ resolve ] map all-equal? [ "BLAH!" print ] when ;
 | 
					M: ##phi visit-insn
 | 
				
			||||||
 | 
					    [ dst>> ] [ inputs>> values [ resolve ] map ] bi
 | 
				
			||||||
 | 
					    dup all-equal? [ first (record-copy) ] [ 2drop ] if ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
M: insn visit-insn drop ;
 | 
					M: insn visit-insn drop ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,6 +39,9 @@ GENERIC: update-insn ( insn -- keep? )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
M: ##copy update-insn drop f ;
 | 
					M: ##copy update-insn drop f ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					M: ##phi update-insn
 | 
				
			||||||
 | 
					    dup dst>> copies get key? [ drop f ] [ call-next-method ] if ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
M: insn update-insn rename-insn-uses t ;
 | 
					M: insn update-insn rename-insn-uses t ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: rename-copies ( cfg -- )
 | 
					: rename-copies ( cfg -- )
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue