ManagerInterDep.hpp

Go to the documentation of this file.
00001 
00015 #ifndef ManagerInterDep_H
00016 #define ManagerInterDep_H
00017 
00018 //--------------------------------------------------------------------
00019 #include <cassert>
00020 
00021 // OpenAnalysis headers
00022 #include <OpenAnalysis/Alias/InterAliasInterface.hpp>
00023 #include <OpenAnalysis/SideEffect/InterSideEffectInterface.hpp>
00024 #include <OpenAnalysis/IRInterface/ActivityIRInterface.hpp>
00025 #include <OpenAnalysis/ExprTree/DifferentiableLocsVisitor.hpp>
00026 #include <OpenAnalysis/ExprTree/EvalToMemRefVisitor.hpp>
00027 //#include <OpenAnalysis/DataFlow/CallGraphDFProblemNew.hpp>
00028 #include <OpenAnalysis/DataFlow/CallGraphDFProblem.hpp>
00029 #include <OpenAnalysis/DataFlow/CallGraphDFSolver.hpp>
00030 #include <OpenAnalysis/DataFlow/ParamBindings.hpp>
00031 #include <OpenAnalysis/Activity/DepDFSet.hpp>
00032 #include <OpenAnalysis/Activity/InterDep.hpp>
00033 #include <OpenAnalysis/DataFlow/CalleeToCallerVisitor.hpp>
00034 #include <OpenAnalysis/CFG/EachCFGInterface.hpp>
00035 
00036 #include "ManagerDepStandard.hpp"
00037 
00038 namespace OA {
00039   namespace Activity {
00040 
00047 class ManagerInterDep : private DataFlow::CallGraphDFProblem
00048 { 
00049 public:
00050   ManagerInterDep(OA_ptr<ActivityIRInterface> _ir);
00051   ~ManagerInterDep () {}
00052 
00053   OA_ptr<InterDep> 
00054   performAnalysis(OA_ptr<CallGraph::CallGraphInterface> callGraph,
00055                   OA_ptr<DataFlow::ParamBindings> paramBind,
00056                   OA_ptr<Alias::InterAliasInterface> interAlias,
00057                   OA_ptr<SideEffect::InterSideEffectInterface> interSE,
00058                   OA_ptr<CFG::EachCFGInterface> eachCFG,
00059                   DataFlow::DFPImplement algorithm);
00060 
00061 private:
00062   //========================================================
00063   // implementation of CallGraphDFProblemNew callbacks
00064   //========================================================
00065   //--------------------------------------------------------
00066   // initialization callbacks
00067   //--------------------------------------------------------
00068 
00070   OA_ptr<DataFlow::DataFlowSet>  initializeTop();
00071 
00073   OA_ptr<DataFlow::DataFlowSet>  initializeBottom();
00074 
00076   OA_ptr<DataFlow::DataFlowSet> initializeNode(ProcHandle proc);
00079   OA_ptr<DataFlow::DataFlowSet> initializeEdge(CallHandle call, 
00080                                      ProcHandle caller,
00081                                      ProcHandle callee);
00085   OA_ptr<DataFlow::DataFlowSet> initializeEdge(CallHandle call, 
00086                                      ProcHandle caller,
00087                                      SymHandle callee);
00088 
00089   //--------------------------------------------------------
00090   // solver callbacks 
00091   //--------------------------------------------------------
00092   
00095   OA_ptr<DataFlow::DataFlowSet> meet(OA_ptr<DataFlow::DataFlowSet> set1, 
00096                            OA_ptr<DataFlow::DataFlowSet> set2); 
00097 
00099   OA_ptr<DataFlow::DataFlowSet>
00100   atCallGraphNode(OA_ptr<DataFlow::DataFlowSet> inSet, OA::ProcHandle proc);
00101 
00104   OA_ptr<DataFlow::DataFlowSet>
00105   atCallGraphEdge(OA_ptr<DataFlow::DataFlowSet> inSet, OA::CallHandle call,
00106                   ProcHandle caller, ProcHandle callee);
00108   OA_ptr<DataFlow::DataFlowSet>
00109   atCallGraphEdge(OA_ptr<DataFlow::DataFlowSet> inSet, CallHandle call,
00110                   ProcHandle caller, SymHandle callee);
00111 
00114   OA_ptr<DataFlow::DataFlowSet>  nodeToEdge(ProcHandle proc, 
00115           OA_ptr<DataFlow::DataFlowSet> procDFSet, CallHandle call);
00116 
00119   OA_ptr<DataFlow::DataFlowSet>  edgeToNode(CallHandle call, 
00120           OA_ptr<DataFlow::DataFlowSet> callDFSet, ProcHandle proc);
00121 
00122 
00123 private:
00124   OA_ptr<InterDep> mInterDep;
00125   OA_ptr<ActivityIRInterface> mIR;
00126   OA_ptr<Alias::InterAliasInterface> mInterAlias;
00127   OA_ptr<DataFlow::ParamBindings> mParamBind;
00128   OA_ptr<CFG::EachCFGInterface> mEachCFG;
00129   OA_ptr<SideEffect::InterSideEffectInterface> mInterSE;
00130   OA_ptr<DataFlow::CallGraphDFSolver> mSolver;
00131   
00132 };
00133 
00134   } // end of Activity namespace
00135 } // end of OA namespace
00136 
00137 #endif

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