| Polaris: range_dict_util.h Source File | ||
|
Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members
range_dict_util.hGo to the documentation of this file.00001 #ifndef _RANGE_DICT_UTIL_H 00002 #define _RANGE_DICT_UTIL_H 00003 /// 00004 /// file range_dict_util.h 00005 /// 00006 /// \class range_util 00007 /// \brief Routines implementing subclasses of RangeDict. 00008 /// \defgroup Polaris 00009 /// \ingroup Polaris 00010 /// Range 00011 /// \see range_dict_util.h 00012 /// \see range_dict_util.h 00013 /// \see range_dict_util.cc 00014 /// 00015 /// \endcode 00016 /// \section Overview Overview 00017 /// This file describes the interfaces to a variety of routines for 00018 /// implementing parts of a RangeDict subclass. 00019 /// 00020 #include "../Collection/RefList.h" 00021 #include "../Collection/RefSet.h" 00022 #include "../Symbol/Symbol.h" 00023 /// 00024 class Symtab; 00025 class Statement; 00026 00027 ///< Description: 00028 ///< Sort the given list of symbols. 00029 00030 void 00031 sort_sym_list(RefList<Symbol> &sym_list); 00032 00033 ///< Description: 00034 ///< Rename any variables named MIN or MAX in the given program so that 00035 ///< they will not conflict with the symbols for the intrinsics MIN and MAX. 00036 00037 void 00038 remove_min_max_var_conflicts(Symtab &symtab); 00039 00040 ///< Description: 00041 ///< If the given statement has a MAYMODS assertion, return the set of 00042 ///< possibly modified variables. Otherwise, return NULL. 00043 00044 RefSet<Symbol> * 00045 stmt_maymods(const Statement &stmt); 00046 00047 00048 ///< Silvius: force insertion of ranges according to the Fortran 77 00049 ///< standard for the following case: 00050 ///< DIMENSION A(m,n:p,*) 00051 ///< DO i=1,k 00052 ///< DO j=h,100 00053 ///< A(i,j,...)=... 00054 ///< In this case, since the access on A must be within bounds we 00055 ///< will add to the dictionary the following ranges: 00056 ///< k=[1,m] and h=[n:p]. 00057 ///< Silvius: since I do not want to get to the guts of the AIRangeDict, 00058 ///< we will force the insertionof the ranges by inserting some guards in 00059 ///< the code, such as: 00060 ///< IF (1.LE.k.AND.k.LE.m) THEN 00061 void enforce_standard_within_bounds(ProgramUnit& pgm, 00062 RefList<Statement>& new_ifs); 00063 void clean_after_standard_enforcement(ProgramUnit& pgm, 00064 RefList<Statement>& new_ifs); 00065 00066 #endif |
||
|