| 
									
										
										
										
											2009-05-26 20:31:19 -04:00
										 |  |  | ! Copyright (C) 2008, 2009 Slava Pestov. | 
					
						
							| 
									
										
										
										
											2008-11-03 00:09:31 -05:00
										 |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2009-07-03 19:45:03 -04:00
										 |  |  | USING: kernel accessors combinators fry sequences assocs compiler.cfg.rpo | 
					
						
							| 
									
										
										
										
											2009-08-02 07:16:58 -04:00
										 |  |  | compiler.cfg.instructions compiler.cfg.utilities ;
 | 
					
						
							| 
									
										
										
										
											2008-11-03 00:09:31 -05:00
										 |  |  | IN: compiler.cfg.predecessors | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-08 21:02:56 -04:00
										 |  |  | <PRIVATE
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-03 19:45:03 -04:00
										 |  |  | : update-predecessors ( bb -- )
 | 
					
						
							| 
									
										
										
										
											2008-11-03 00:09:31 -05:00
										 |  |  |     dup successors>> [ predecessors>> push ] with each ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-03 19:45:03 -04:00
										 |  |  | : update-phi ( bb ##phi -- )
 | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         swap predecessors>> | 
					
						
							|  |  |  |         '[ drop _ memq? ] assoc-filter
 | 
					
						
							|  |  |  |     ] change-inputs drop ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : update-phis ( bb -- )
 | 
					
						
							| 
									
										
										
										
											2009-08-02 07:16:58 -04:00
										 |  |  |     dup [ update-phi ] with each-phi ;
 | 
					
						
							| 
									
										
										
										
											2009-07-03 19:45:03 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-29 14:11:34 -04:00
										 |  |  | : compute-predecessors ( cfg -- cfg' )
 | 
					
						
							| 
									
										
										
										
											2009-07-03 19:45:03 -04:00
										 |  |  |     { | 
					
						
							|  |  |  |         [ [ V{ } clone >>predecessors drop ] each-basic-block ] | 
					
						
							|  |  |  |         [ [ update-predecessors ] each-basic-block ] | 
					
						
							|  |  |  |         [ [ update-phis ] each-basic-block ] | 
					
						
							|  |  |  |         [ ] | 
					
						
							|  |  |  |     } cleave ;
 | 
					
						
							| 
									
										
										
										
											2009-08-08 21:02:56 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | PRIVATE>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : needs-predecessors ( cfg -- cfg' )
 | 
					
						
							|  |  |  |     dup predecessors-valid?>> | 
					
						
							|  |  |  |     [ compute-predecessors t >>predecessors-valid? ] unless ;
 |