ManagerAutoDFAGenReachingDefinitionsStandard.hpp

Go to the documentation of this file.
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