00001 00002 /* ManagerAutoReachingDefsStandard.hpp 00003 NOTE: This file was automatically generated by DFAGen. It is the interface 00004 for the ReachingDefs analysis manager. 00005 */ 00006 00007 #ifndef ManagerAutoReachingDefsStandard_H 00008 #define ManagerAutoReachingDefsStandard_H 00009 00010 //-------------------------------------------------------------------- 00011 // OpenAnalysis headers 00012 #include <OpenAnalysis/Utils/OA_ptr.hpp> 00013 #include <OpenAnalysis/IRInterface/auto_ReachingDefsIRInterface.hpp> 00014 #include <OpenAnalysis/DFAGen/ReachingDefs/auto_ReachingDefsStandard.hpp> 00015 00016 #include <OpenAnalysis/Alias/Interface.hpp> 00017 00018 #include <OpenAnalysis/DataFlow/CFGDFProblem.hpp> 00019 #include <OpenAnalysis/Location/Location.hpp> 00020 #include <OpenAnalysis/DataFlow/IRHandleDataFlowSet.hpp> 00021 #include <OpenAnalysis/SideEffect/InterSideEffectInterface.hpp> 00022 #include <OpenAnalysis/DataFlow/CFGDFSolver.hpp> 00023 00024 #include <OpenAnalysis/CFG/CFG.hpp> 00025 #include <OpenAnalysis/CFG/CFGInterface.hpp> 00026 00027 namespace OA { 00028 namespace ReachingDefs { 00029 00030 00031 class ManagerReachingDefsStandard 00032 : public virtual DataFlow::CFGDFProblem 00033 { 00034 public: 00035 ManagerReachingDefsStandard(OA_ptr<ReachingDefsIRInterface> _ir); 00036 ~ManagerReachingDefsStandard () {} 00037 00038 OA_ptr<ReachingDefsStandard> performAnalysis( 00039 ProcHandle proc, 00040 OA_ptr<CFG::CFGInterface> cfg, 00041 OA_ptr<Alias::Interface> alias, 00042 OA_ptr<SideEffect::InterSideEffectInterface> interSE); 00043 00044 private: 00045 OA_ptr<DataFlow::DataFlowSet> initializeTop(); 00046 OA_ptr<DataFlow::DataFlowSet> initializeBottom(); 00047 00048 OA_ptr<DataFlow::DataFlowSet> 00049 initializeNodeIN(OA_ptr<CFG::NodeInterface> n); 00050 00051 OA_ptr<DataFlow::DataFlowSet> 00052 initializeNodeOUT(OA_ptr<CFG::NodeInterface> n); 00053 00054 void dumpset(OA_ptr<ReachingDefsDFSet> inSet); 00055 00056 OA_ptr<DataFlow::DataFlowSet> meet( 00057 OA_ptr<DataFlow::DataFlowSet> set1, 00058 OA_ptr<DataFlow::DataFlowSet> set2); 00059 00060 OA_ptr<DataFlow::DataFlowSet> genSet(StmtHandle stmt); 00061 00062 OA_ptr<DataFlow::DataFlowSet> killSet(StmtHandle stmt, 00063 OA_ptr<DataFlow::DataFlowSet> X); 00064 00065 OA_ptr<DataFlow::DataFlowSet> transfer( 00066 OA_ptr<DataFlow::DataFlowSet> X, 00067 OA::StmtHandle Stmt); 00068 00069 OA_ptr<ReachingDefsIRInterface> mIR; 00070 OA_ptr<Alias::Interface> mAlias; 00071 OA_ptr<ReachingDefsStandard> mReachingDefsMap; 00072 OA_ptr<DataFlow::CFGDFSolver> mSolver; 00073 00074 std::map<StmtHandle, set<OA_ptr<Location> > > mStmt2MayDefMap; 00075 std::map<StmtHandle, set<OA_ptr<Location> > > mStmt2MustDefMap; 00076 }; 00077 00078 } // end of ReachingDefs namespace 00079 } // end of OA namespace 00080 00081 #endif
1.6.1