Polaris: range_dict_util.h Source File

range_dict_util.h

Go 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
 © 1995-2005 University of Illinois, Urbana-Champaign. All rights reserved.  Fri Mar 25 23:06:03 2005