00001 00002 // ManagerDFAGenReachingDefinitionsStandard.hpp 00003 00004 #ifndef DFAGenReachingDefinitionsManagerStandard_h 00005 #define DFAGenReachingDefinitionsManagerStandard_h 00006 00007 //-------------------------------------------------------------------- 00008 // OpenAnalysis headers 00009 #include <OpenAnalysis/Utils/OA_ptr.hpp> 00010 #include <OpenAnalysis/IRInterface/DFAGenReachingDefinitionsIRInterface.hpp> 00011 #include <OpenAnalysis/DFAGenReachingDefinitions/DFAGenReachingDefinitionsStandard.hpp> 00012 00013 00014 #include <OpenAnalysis/Alias/Interface.hpp> 00015 00016 #include <OpenAnalysis/DataFlow/CFGDFProblem.hpp> 00017 #include <OpenAnalysis/Location/Location.hpp> 00018 #include <OpenAnalysis/DataFlow/IRHandleDataFlowSet.hpp> 00019 #include <OpenAnalysis/SideEffect/InterSideEffectInterface.hpp> 00020 #include <OpenAnalysis/DataFlow/CFGDFSolver.hpp> 00021 00022 #include <OpenAnalysis/CFG/CFG.hpp> 00023 #include <OpenAnalysis/CFG/CFGInterface.hpp> 00024 00025 namespace OA { 00026 namespace DFAGenReachingDefinitions { 00027 00028 00029 class ManagerDFAGenReachingDefinitionsStandard 00030 : public virtual DataFlow::CFGDFProblem { 00031 public: 00032 ManagerDFAGenReachingDefinitionsStandard(OA_ptr<DFAGenReachingDefinitionsIRInterface> _ir); 00033 ~ManagerDFAGenReachingDefinitionsStandard () {} 00034 00035 OA_ptr<DFAGenReachingDefinitionsStandard> performAnalysis(ProcHandle, 00036 OA_ptr<CFG::CFGInterface> cfg, OA_ptr<Alias::Interface> alias, 00037 OA_ptr<SideEffect::InterSideEffectInterface> interSE); 00038 00039 private: 00040 OA_ptr<DataFlow::DataFlowSet> initializeTop(); 00041 OA_ptr<DataFlow::DataFlowSet> initializeBottom(); 00042 00043 OA_ptr<DataFlow::DataFlowSet> 00044 initializeNodeIN(OA_ptr<CFG::NodeInterface> n); 00045 00046 OA_ptr<DataFlow::DataFlowSet> 00047 initializeNodeOUT(OA_ptr<CFG::NodeInterface> n); 00048 00049 00050 OA_ptr<DataFlow::DataFlowSet> 00051 meet (OA_ptr<DataFlow::DataFlowSet> set1, OA_ptr<DataFlow::DataFlowSet> set2); 00052 00053 OA_ptr<DataFlow::DataFlowSet> 00054 transfer(OA_ptr<DataFlow::DataFlowSet> in, OA::StmtHandle Stmt); 00055 00056 private: // member variables 00057 00058 OA_ptr<DFAGenReachingDefinitionsIRInterface> mIR; 00059 OA_ptr<Alias::Interface> mAlias; 00060 OA_ptr<DFAGenReachingDefinitionsStandard> mDFAGenReachingDefinitionsMap; 00061 std::map<StmtHandle,std::set<OA_ptr<Location> > mStmtMustDefMap; 00062 std::map<StmtHandle,std::set<OA_ptr<Location> > mStmtMustUseMap; 00063 std::map<StmtHandle,std::set<OA_ptr<Location> > mStmtMayDefMap; 00064 std::map<StmtHandle,std::set<OA_ptr<Location> > mStmtMayUseMap; 00065 OA_ptr<DataFlow::CFGDFSolver> mSolver; 00066 00067 }; 00068 00069 } // end of DFAGenReachingDefinitions namespace 00070 } // end of OA namespace 00071 00072 #endif
1.7.1