ManagerInterSideEffectStandard.hpp

Go to the documentation of this file.
00001 
00016 #ifndef ManagerInterSideEffectStandard_h
00017 #define ManagerInterSideEffectStandard_h
00018 
00019 //--------------------------------------------------------------------
00020 // OpenAnalysis headers
00021 #include <OpenAnalysis/Utils/OA_ptr.hpp>
00022 #include <OpenAnalysis/IRInterface/InterSideEffectIRInterface.hpp>
00023 #include <OpenAnalysis/SideEffect/InterSideEffectStandard.hpp>
00024 #include <OpenAnalysis/SideEffect/ManagerSideEffectStandard.hpp>
00025 #include <OpenAnalysis/Alias/InterAliasInterface.hpp>
00026 #include <OpenAnalysis/DataFlow/CountDFSet.hpp>
00027 #include <OpenAnalysis/DataFlow/ParamBindings.hpp>
00028 #include <OpenAnalysis/DataFlow/CalleeToCallerVisitor.hpp>
00029 #include <OpenAnalysis/DataFlow/CallGraphDFProblem.hpp>
00030 #include <OpenAnalysis/DataFlow/CallGraphDFSolver.hpp>
00031 //#include <OpenAnalysis/CallGraph/Interface.hpp>
00032 
00033 
00034 namespace OA {
00035   namespace SideEffect {
00036 
00037 
00042 class ManagerInterSideEffectStandard : private DataFlow::CallGraphDFProblem {
00043 public:
00044   ManagerInterSideEffectStandard(OA_ptr<InterSideEffectIRInterface> _ir);
00045   ~ManagerInterSideEffectStandard () {}
00046 
00047   OA_ptr<InterSideEffectStandard> 
00048   performAnalysis(OA_ptr<CallGraph::CallGraphInterface> callGraph,
00049                   OA_ptr<DataFlow::ParamBindings> paramBind,
00050                   OA_ptr<Alias::InterAliasInterface> interAlias,
00051                   OA_ptr<ManagerSideEffectStandard> intraMan,
00052                   DataFlow::DFPImplement algorithm);
00053 
00054 private:
00055   //========================================================
00056   // implementation of CallGraphDFProblemNew callbacks
00057   //========================================================
00058   //--------------------------------------------------------
00059   // initialization callbacks
00060   //--------------------------------------------------------
00061 
00063   OA_ptr<DataFlow::DataFlowSet>  initializeTop();
00064 
00066   OA_ptr<DataFlow::DataFlowSet>  initializeBottom();
00067 
00069   OA_ptr<DataFlow::DataFlowSet> initializeNode(ProcHandle proc);
00072   
00073   
00074  OA_ptr<DataFlow::DataFlowSet>
00075            initializeNodeIN(OA_ptr<CallGraph::NodeInterface> n);
00076 
00077   OA_ptr<DataFlow::DataFlowSet>
00078            initializeNodeOUT(OA_ptr<CallGraph::NodeInterface> n);
00079 
00080  
00081   
00082   OA_ptr<DataFlow::DataFlowSet> initializeEdge(CallHandle call, 
00083                                      ProcHandle caller,
00084                                      ProcHandle callee);
00088   OA_ptr<DataFlow::DataFlowSet> initializeEdge(CallHandle call, 
00089                                      ProcHandle caller,
00090                                      SymHandle callee);
00091 
00092   //--------------------------------------------------------
00093   // solver callbacks 
00094   //--------------------------------------------------------
00095   
00098   OA_ptr<DataFlow::DataFlowSet> meet(OA_ptr<DataFlow::DataFlowSet> set1, 
00099                            OA_ptr<DataFlow::DataFlowSet> set2); 
00100 
00102   OA_ptr<DataFlow::DataFlowSet>
00103   atCallGraphNode(OA_ptr<DataFlow::DataFlowSet> inSet, OA::ProcHandle proc);
00104 
00107   OA_ptr<DataFlow::DataFlowSet>
00108   atCallGraphEdge(OA_ptr<DataFlow::DataFlowSet> inSet, OA::CallHandle call,
00109                   ProcHandle caller, ProcHandle callee);
00111   OA_ptr<DataFlow::DataFlowSet>
00112   atCallGraphEdge(OA_ptr<DataFlow::DataFlowSet> inSet, CallHandle call,
00113                   ProcHandle caller, SymHandle callee);
00114 
00117   OA_ptr<DataFlow::DataFlowSet>  nodeToEdge(ProcHandle proc, 
00118           OA_ptr<DataFlow::DataFlowSet> procDFSet, CallHandle call)
00119   {
00120     return procDFSet;
00121   }
00122 
00125   OA_ptr<DataFlow::DataFlowSet>  edgeToNode(CallHandle call, 
00126           OA_ptr<DataFlow::DataFlowSet> callDFSet, ProcHandle proc)
00127   {
00128       return callDFSet;
00129   }
00130 
00131 
00132 private:
00133   OA_ptr<InterSideEffectIRInterface> mIR;
00134   OA_ptr<Alias::InterAliasInterface> mInterAlias;
00135   OA_ptr<InterSideEffectStandard> mInterSideEffect;
00136   OA_ptr<DataFlow::ParamBindings> mParamBind;
00137   OA_ptr<ManagerSideEffectStandard> mIntraMan;
00138   OA_ptr<DataFlow::CallGraphDFSolver> mSolver; 
00139   
00140 };
00141 
00142   } // end of SideEffect namespace
00143 } // end of OA namespace
00144 
00145 #endif

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