34 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Factor
		
	
	
| ! Copyright (C) 2008, 2010 Slava Pestov.
 | |
| ! See http://factorcode.org/license.txt for BSD license.
 | |
| USING: accessors combinators.short-circuit compiler.cfg
 | |
| compiler.cfg.instructions compiler.cfg.rpo
 | |
| compiler.cfg.utilities kernel sequences vectors ;
 | |
| IN: compiler.cfg.useless-conditionals
 | |
| 
 | |
| : delete-conditional? ( bb -- ? )
 | |
|     {
 | |
|         [
 | |
|             instructions>> last {
 | |
|                 [ ##compare-branch? ]
 | |
|                 [ ##compare-imm-branch? ]
 | |
|                 [ ##compare-integer-branch? ]
 | |
|                 [ ##compare-integer-imm-branch? ]
 | |
|                 [ ##compare-float-ordered-branch? ]
 | |
|                 [ ##compare-float-unordered-branch? ]
 | |
|             } 1||
 | |
|         ]
 | |
|         [ successors>> first2 [ skip-empty-blocks ] bi@ eq? ]
 | |
|     } 1&& ;
 | |
| 
 | |
| : delete-conditional ( bb -- )
 | |
|     [ first skip-empty-blocks 1vector ] change-successors
 | |
|     instructions>> [ pop* ] [ [ ##branch new-insn ] dip push ] bi ;
 | |
| 
 | |
| : delete-useless-conditionals ( cfg -- )
 | |
|     [
 | |
|         [
 | |
|             dup delete-conditional? [ delete-conditional ] [ drop ] if
 | |
|         ] each-basic-block
 | |
|     ]
 | |
|     [ cfg-changed ] [ predecessors-changed ] tri ;
 |