ManagerLinearityStandard.hpp

Go to the documentation of this file.
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 

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