| 
									
										
										
										
											2015-01-10 16:25:06 +01:00
										 |  |  | /*-------------------------------------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   SDCCloop.h - header file for loop detection & optimizations | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |              Written By -  Sandeep Dutta . sandeep.dutta@usa.net (1998) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    This program is free software; you can redistribute it and/or modify it | 
					
						
							|  |  |  |    under the terms of the GNU General Public License as published by the | 
					
						
							|  |  |  |    Free Software Foundation; either version 2, or (at your option) any | 
					
						
							|  |  |  |    later version. | 
					
						
							|  |  |  |     | 
					
						
							|  |  |  |    This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  |    GNU General Public License for more details. | 
					
						
							|  |  |  |     | 
					
						
							|  |  |  |    You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  |    along with this program; if not, write to the Free Software | 
					
						
							|  |  |  |    Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 
					
						
							|  |  |  |     | 
					
						
							|  |  |  |    In other words, you are welcome to use, share and improve this program. | 
					
						
							|  |  |  |    You are forbidden to forbid anyone else to use, share and improve | 
					
						
							|  |  |  |    what you give them.   Help stamp out software-hoarding!   | 
					
						
							|  |  |  | -------------------------------------------------------------------------*/ | 
					
						
							|  |  |  | #include "SDCCBBlock.h"
 | 
					
						
							|  |  |  | #include "SDCCcse.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef SDCCLOOP_H
 | 
					
						
							|  |  |  | #define SDCCLOOP_H 1
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-10 16:25:09 +01:00
										 |  |  | typedef struct region | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     unsigned int merged:1; | 
					
						
							|  |  |  |     eBBlock *entry;		/* entry Block */ | 
					
						
							|  |  |  |     int containsLoops;		/* contains other loops */ | 
					
						
							|  |  |  |     set *regBlocks;		/* set of all blocks */ | 
					
						
							|  |  |  |     set *exits;			/* set of exits */ | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | region; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct induction | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     operand *sym; | 
					
						
							| 
									
										
										
										
											2015-01-10 16:25:06 +01:00
										 |  |  |     operand *asym; | 
					
						
							| 
									
										
										
										
											2015-01-10 16:25:09 +01:00
										 |  |  |     unsigned int op; | 
					
						
							|  |  |  |     long cval; | 
					
						
							| 
									
										
										
										
											2015-01-10 16:25:06 +01:00
										 |  |  |     iCode *ic; | 
					
						
							| 
									
										
										
										
											2015-01-10 16:25:09 +01:00
										 |  |  |   } | 
					
						
							|  |  |  | induction; | 
					
						
							| 
									
										
										
										
											2015-01-10 16:25:06 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-10 16:25:09 +01:00
										 |  |  | DEFSETFUNC (backEdges); | 
					
						
							|  |  |  | DEFSETFUNC (pregion); | 
					
						
							|  |  |  | DEFSETFUNC (pinduction); | 
					
						
							| 
									
										
										
										
											2015-01-10 16:25:06 +01:00
										 |  |  | int loopOptimizations (hTab *, eBBlock **, int); | 
					
						
							| 
									
										
										
										
											2015-01-10 16:25:09 +01:00
										 |  |  | int addressTaken (set *, operand *); | 
					
						
							|  |  |  | hTab *createLoopRegions (eBBlock **, int); | 
					
						
							| 
									
										
										
										
											2015-01-10 16:25:06 +01:00
										 |  |  | iCode *findDefInRegion (set *, operand *, eBBlock **); | 
					
						
							|  |  |  | int hasIncomingDefs (region *, operand *); | 
					
						
							| 
									
										
										
										
											2015-01-10 16:25:09 +01:00
										 |  |  | int findLoopEndSeq (region *); | 
					
						
							| 
									
										
										
										
											2015-01-10 16:25:06 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 |