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
1.6.1