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
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
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
00064
00065
00066
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
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 }
00135 }
00136
00137 #endif