SideEffectStandard.hpp

Go to the documentation of this file.
00001 
00015 #ifndef SideEffectStandard_hpp
00016 #define SideEffectStandard_hpp
00017 
00018 #include <set>
00019 #include <map>
00020 #include <OpenAnalysis/Utils/OA_ptr.hpp>
00021 #include <OpenAnalysis/IRInterface/IRHandles.hpp>
00022 #include <OpenAnalysis/SideEffect/SideEffectInterface.hpp>
00023 #include <OpenAnalysis/OABase/Annotation.hpp>
00024 #include <OpenAnalysis/Utils/GenOutputTool.hpp>
00025 
00026 namespace OA {
00027   namespace SideEffect {
00028 
00029 /* 
00030    Maps procedures to USE, DEF, MOD, and REF sets and their local versions.
00031 */
00032 class SideEffectStandard : public Interface,
00033                             public virtual Annotation
00034 {
00035   public:
00036     SideEffectStandard() ;
00037     ~SideEffectStandard() {}
00038 
00039     //*****************************************************************
00040     // Interface Implementation
00041     //*****************************************************************
00042     
00047     OA_ptr<LocIterator> getLMODIterator();
00048 
00052     OA_ptr<LocIterator> getMODIterator();
00053 
00058     OA_ptr<LocIterator> getLDEFIterator();
00059 
00063     OA_ptr<LocIterator> getDEFIterator();
00064 
00070     OA_ptr<LocIterator> getLUSEIterator();
00071 
00075     OA_ptr<LocIterator> getUSEIterator();
00076 
00081     OA_ptr<LocIterator> getLREFIterator();
00082 
00086     OA_ptr<LocIterator> getREFIterator();
00087 
00088     //*****************************************************************
00089     // Other informational methods
00090     //*****************************************************************
00092     bool inLMOD(OA_ptr<Location> loc);
00093 
00095     bool inMOD(OA_ptr<Location> loc);
00096 
00098     bool inLDEF(OA_ptr<Location> loc);
00099 
00101     bool inDEF(OA_ptr<Location> loc);
00102 
00104     bool inLUSE(OA_ptr<Location> loc);
00105 
00107     bool inUSE(OA_ptr<Location> loc);
00108 
00110     bool inLREF(OA_ptr<Location> loc);
00111 
00113     bool inREF(OA_ptr<Location> loc);
00114 
00115     //*****************************************************************
00116     // Construction methods
00117     //*****************************************************************
00119     void insertLMOD(OA_ptr<Location> loc);
00120     
00122     void insertMOD(OA_ptr<Location> loc);
00123     
00125     void insertLDEF(OA_ptr<Location> loc);
00126     
00128     void insertDEF(OA_ptr<Location> loc);
00129     
00131     void insertLUSE(OA_ptr<Location> loc);
00132     
00134     void insertUSE(OA_ptr<Location> loc);
00135     
00137     void insertLREF(OA_ptr<Location> loc);
00138     
00140     void insertREF(OA_ptr<Location> loc);
00141 
00142     //*************************************************************
00144     void emptyLMOD();
00145     
00147     void emptyMOD();
00148     
00150     void emptyLDEF();
00151     
00153     void emptyDEF();
00154     
00156     void emptyLUSE();
00157     
00159     void emptyUSE();
00160     
00162     void emptyLREF();
00163     
00165     void emptyREF();
00166     
00167     //*****************************************************************
00168     // Output
00169     //*****************************************************************
00170 
00172     void output(IRHandlesIRInterface& ir);
00173     
00174     void dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> ir);
00175 
00176   private:
00177 
00178     OUTPUT
00179 
00180     // various sets
00181     GENOUT OA_ptr<std::set<OA_ptr<Location> > > mLMODSet;
00182     GENOUT OA_ptr<std::set<OA_ptr<Location> > > mMODSet;
00183     GENOUT OA_ptr<std::set<OA_ptr<Location> > > mLDEFSet;
00184     GENOUT OA_ptr<std::set<OA_ptr<Location> > > mDEFSet;
00185     GENOUT OA_ptr<std::set<OA_ptr<Location> > > mLUSESet;
00186     GENOUT OA_ptr<std::set<OA_ptr<Location> > > mUSESet;
00187     GENOUT OA_ptr<std::set<OA_ptr<Location> > > mLREFSet;
00188     GENOUT OA_ptr<std::set<OA_ptr<Location> > > mREFSet;
00189 
00190     // default set returned to be conservative
00191     GENOUT OA_ptr<std::set<OA_ptr<Location> > > mUnknownLocSet;
00192 
00193 };
00194 
00195 
00196   } // end of SideEffect namespace
00197 } // end of OA namespace
00198 
00199 #endif
00200 

Generated on Sat Oct 31 05:21:25 2009 for OpenAnalysis by  doxygen 1.6.1