auto_ManagerAvailableExpressionsStandard.hpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #ifndef ManagerAutoAvailableExpressionsStandard_H
00008 #define ManagerAutoAvailableExpressionsStandard_H
00009
00010
00011
00012 #include <OpenAnalysis/Utils/OA_ptr.hpp>
00013 #include <OpenAnalysis/IRInterface/auto_AvailableExpressionsIRInterface.hpp>
00014 #include <OpenAnalysis/AvailableExpressions/auto_AvailableExpressionsStandard.hpp>
00015
00016 #include <OpenAnalysis/Alias/Interface.hpp>
00017
00018 #include <OpenAnalysis/DataFlow/CFGDFProblem.hpp>
00019 #include <OpenAnalysis/Location/Location.hpp>
00020 #include <OpenAnalysis/DataFlow/IRHandleDataFlowSet.hpp>
00021 #include <OpenAnalysis/SideEffect/InterSideEffectInterface.hpp>
00022 #include <OpenAnalysis/DataFlow/CFGDFSolver.hpp>
00023
00024 #include <OpenAnalysis/CFG/CFG.hpp>
00025 #include <OpenAnalysis/CFG/CFGInterface.hpp>
00026
00027 namespace OA {
00028 namespace AvailableExpressions {
00029
00030
00031 class ManagerAvailableExpressionsStandard
00032 : public virtual DataFlow::CFGDFProblem
00033 {
00034 public:
00035 ManagerAvailableExpressionsStandard(OA_ptr<AvailableExpressionsIRInterface> _ir);
00036 ~ManagerAvailableExpressionsStandard () {}
00037
00038 OA_ptr<AvailableExpressionsStandard> performAnalysis(
00039 ProcHandle proc,
00040 OA_ptr<CFG::CFGInterface> cfg,
00041 OA_ptr<Alias::Interface> alias,
00042 OA_ptr<SideEffect::InterSideEffectInterface> interSE);
00043
00044 private:
00045 OA_ptr<DataFlow::DataFlowSet> initializeTop();
00046 OA_ptr<DataFlow::DataFlowSet> initializeBottom();
00047
00048 OA_ptr<DataFlow::DataFlowSet>
00049 initializeNodeIN(OA_ptr<CFG::NodeInterface> n);
00050
00051 OA_ptr<DataFlow::DataFlowSet>
00052 initializeNodeOUT(OA_ptr<CFG::NodeInterface> n);
00053
00054 void dumpset(OA_ptr<AvailableExpressionsDFSet> inSet);
00055
00056 OA_ptr<DataFlow::DataFlowSet> meet(
00057 OA_ptr<DataFlow::DataFlowSet> set1,
00058 OA_ptr<DataFlow::DataFlowSet> set2);
00059
00060 OA_ptr<DataFlow::DataFlowSet> genSet(StmtHandle stmt);
00061
00062 OA_ptr<DataFlow::DataFlowSet> killSet(StmtHandle stmt,
00063 OA_ptr<DataFlow::DataFlowSet> X);
00064
00065 OA_ptr<DataFlow::DataFlowSet> transfer(
00066 OA_ptr<DataFlow::DataFlowSet> X,
00067 OA::StmtHandle Stmt);
00068
00069 OA_ptr<AvailableExpressionsIRInterface> mIR;
00070 OA_ptr<Alias::Interface> mAlias;
00071 OA_ptr<AvailableExpressionsStandard> mAvailableExpressionsMap;
00072 OA_ptr<DataFlow::CFGDFSolver> mSolver;
00073
00074 std::map<StmtHandle, set<OA_ptr<Location> > > mStmt2MayDefMap;
00075 std::map<StmtHandle, set<OA_ptr<Location> > > mStmt2MustDefMap;
00076 std::map<StmtHandle, set<OA_ptr<NewExprTree> > > mStmt2MayExprMap;
00077 std::map<StmtHandle, set<OA_ptr<NewExprTree> > > mStmt2MustExprMap;
00078 std::map<StmtHandle, set<OA_ptr<Location> > > mStmt2MayUseMap;
00079 std::map<StmtHandle, set<OA_ptr<Location> > > mStmt2MustUseMap;
00080 };
00081
00082 }
00083 }
00084
00085 #endif