00001 00015 //-------------------------------------------------------------------- 00016 //-------------------------------------------------------------------- 00017 00018 #ifndef _MANAGERLINEARITYMATRIX_H 00019 #define _MANAGERLINEARITYMATRIX_H 00020 00021 //-------------------------------------------------------------------- 00022 // STL headers 00023 #include <iostream> 00024 #include <map> 00025 #include <set> 00026 #include <list> 00027 00028 // Local headers 00029 #include "LinearityPair.hpp" 00030 #include "LinearityDepsSet.hpp" 00031 #include "LinearityMatrixStandard.hpp" 00032 00033 //OpenAnalysis headers 00034 #include <OpenAnalysis/Utils/OA_ptr.hpp> 00035 #include <OpenAnalysis/Location/Locations.hpp> 00036 #include <OpenAnalysis/IRInterface/IRHandles.hpp> 00037 #include <OpenAnalysis/IRInterface/LinearityIRInterface.hpp> 00038 00039 #include <OpenAnalysis/CFG/CFGInterface.hpp> 00040 #include <OpenAnalysis/Alias/Interface.hpp> 00041 #include <OpenAnalysis/DataFlow/ParamBindings.hpp> 00042 00043 #include <OpenAnalysis/ExprTree/LinearityLocsVisitor.hpp> 00044 00045 #include <OpenAnalysis/DataFlow/CFGDFProblem.hpp> 00046 #include <OpenAnalysis/DataFlow/IRHandleDataFlowSet.hpp> 00047 #include <OpenAnalysis/SideEffect/InterSideEffectInterface.hpp> 00048 #include <OpenAnalysis/DataFlow/CFGDFSolver.hpp> 00049 00051 namespace OA { 00052 namespace Linearity { 00053 00054 class ManagerLinearity : public virtual DataFlow::CFGDFProblem { 00055 public: 00056 ManagerLinearity(OA_ptr<LinearityIRInterface> _ir); 00057 virtual ~ManagerLinearity() {} 00058 00059 virtual OA_ptr<LinearityMatrix> 00060 performAnalysis(ProcHandle proc, 00061 OA_ptr<CFG::CFGInterface> cfg, 00062 OA_ptr<Alias::Interface> alias, 00063 OA_ptr<DataFlow::ParamBindings> paramBind, 00064 DataFlow::DFPImplement algorithm); 00065 virtual OA_ptr<LinearityMatrix> 00066 performAnalysis2(SymHandle); 00067 virtual OA_ptr<LinearityMatrix> 00068 performAnalysis3(ProcHandle proc, 00069 OA_ptr<CFG::CFGInterface> cfg, 00070 OA_ptr<Alias::Interface> alias, 00071 OA_ptr<DataFlow::ParamBindings> paramBind); 00072 00073 //------------------------------------------------------------------ 00074 // Implementing the callbacks for CFGDFProblem 00075 //------------------------------------------------------------------ 00076 private: 00077 OA_ptr<DataFlow::DataFlowSet> initializeTop(); 00078 OA_ptr<DataFlow::DataFlowSet> initializeBottom(); 00079 00080 //void initializeNode(OA_ptr<CFG::Interface::Node> n); 00081 // Added by PLM 07/26/06 00083 OA_ptr<DataFlow::DataFlowSet> 00084 initializeNodeIN(OA_ptr<CFG::NodeInterface> n); 00085 OA_ptr<DataFlow::DataFlowSet> 00086 initializeNodeOUT(OA_ptr<CFG::NodeInterface> n); 00087 00088 OA_ptr<DataFlow::DataFlowSet> 00089 meet (OA_ptr<DataFlow::DataFlowSet> set1, OA_ptr<DataFlow::DataFlowSet> set2); 00090 00091 OA_ptr<DataFlow::DataFlowSet> 00092 transfer(OA_ptr<DataFlow::DataFlowSet> in, OA::StmtHandle stmt); 00093 00094 //public: 00095 // OA_ptr<IRHandlesIRInterface> getIR() { 00096 // return mIR; 00097 // } 00098 00099 00100 private: 00101 OA_ptr<LinearityIRInterface> mIR; 00102 OA_ptr<LinearityMatrix> mLM; 00103 ProcHandle mProc; 00104 OA_ptr<CFG::CFGInterface> mCFG; 00105 OA_ptr<Alias::Interface> mAlias; 00106 OA_ptr<DataFlow::ParamBindings> mParamBind; 00107 OA_ptr<DataFlow::CFGDFSolver> mSolver; 00108 OA_ptr<CFG::NodeInterface> mExitNode; 00109 00110 }; 00111 00112 } // end of Linearity namespace 00113 } // end of OA namespace 00114 00115 #endif 00116
1.6.1