OpenADFortTk (basic)
src/lib/support/OAMaps.h
Go to the documentation of this file.
00001 // -*-Mode: C++;-*-
00002 // $Header: /Volumes/cvsrep/developer/OpenADFortTk/src/lib/support/OAMaps.h,v 1.4 2005/08/15 20:17:25 utke Exp $
00003 
00004 #ifndef OAMaps_INCLUDED_h
00005 #define OAMaps_INCLUDED_h
00006 
00007 #include <iostream>
00008 
00009 #include "Open64IRInterface/Open64BasicTypes.h"
00010 
00011 //************************ OpenAnalysis Include Files ***********************
00012 
00013 #include "OpenAnalysis/CallGraph/ManagerCallGraph.hpp"
00014 #include "OpenAnalysis/CallGraph/CallGraph.hpp"
00015 #include "OpenAnalysis/CallGraph/CallGraphInterface.hpp"
00016 #include "OpenAnalysis/CFG/ManagerCFG.hpp"
00017 #include "OpenAnalysis/CFG/EachCFGStandard.hpp"
00018 #include "OpenAnalysis/Alias/ManagerAliasMapBasic.hpp"
00019 #include "OpenAnalysis/Alias/ManagerInterAliasMapBasic.hpp"
00020 #include "OpenAnalysis/Alias/ManagerFIAliasAliasMap.hpp"
00021 #include "OpenAnalysis/ReachDefsOverwrite/ManagerReachDefsOverwriteStandard.hpp"
00022 #include "OpenAnalysis/SideEffect/ManagerSideEffectStandard.hpp"
00023 #include "OpenAnalysis/SideEffect/InterSideEffectStandard.hpp"
00024 #include "OpenAnalysis/SideEffect/ManagerInterSideEffectStandard.hpp"
00025 #include "OpenAnalysis/UDDUChains/ManagerUDDUChainsStandard.hpp"
00026 #include "OpenAnalysis/CSFIActivity/ManagerDUActive.hpp"
00027 #include "OpenAnalysis/XAIF/UDDUChainsXAIF.hpp"
00028 #include "OpenAnalysis/XAIF/ManagerUDDUChainsXAIF.hpp"
00029 #include "OpenAnalysis/XAIF/ReachDefsOverwriteXAIF.hpp"
00030 #include "OpenAnalysis/XAIF/ManagerReachDefsOverwriteXAIF.hpp"
00031 #include "OpenAnalysis/XAIF/ManagerAliasMapXAIF.hpp"
00032 #include "OpenAnalysis/DataFlow/ManagerParamBindings.hpp"
00033 
00034 
00035 //*************************** User Include Files ****************************
00036 
00037 #include "Open64IRInterface/Open64IRInterface.hpp"
00038 
00039 #include "BaseMap.h"
00040 #include "Diagnostics.h"
00041 
00042 namespace fortTkSupport {
00043 
00044 
00045   typedef std::list<OA::OA_ptr<OA::CFG::NodeInterface> > CFGNodeList;
00046   typedef std::list<OA::OA_ptr<OA::DGraph::NodeInterface> > DGraphNodeList;
00047   
00048   const char*
00049     GetCFGVertexType(OA::OA_ptr<OA::CFG::CFGInterface> cfg, 
00050                      OA::OA_ptr<OA::CFG::NodeInterface> n);
00051 
00052   const char*
00053     GetCFGControlFlowVertexType(WN* wstmt);
00054   
00055   class IntraOAInfo;
00056   
00060   class InterOAInfoMap : public fortTkSupport::BaseMap<PU_Info*, IntraOAInfo*> {
00061 
00062   public:  
00063   
00064     InterOAInfoMap() { }
00065     virtual ~InterOAInfoMap() { }
00066 
00067     void init(PU_Info* pu_forest, OA::OA_ptr<Open64IRInterface> x,
00068               bool activeWithVariedOnly=false);
00069 
00070     OA::OA_ptr<Open64IRInterface> getIRInterface() { return myIRIF; }
00071     void setIRInterface(OA::OA_ptr<Open64IRInterface> x) { myIRIF = x; }
00072 
00073     OA::OA_ptr<OA::CallGraph::CallGraph> getCallGraph() { return myCGraph; }
00074     void setCallGraph(OA::OA_ptr<OA::CallGraph::CallGraph> x) { myCGraph = x;}
00075 
00076     OA::OA_ptr<OA::CFG::EachCFGInterface> getCFGEach() { return myCFGEach; }
00077     void setCFGEach(OA::OA_ptr<OA::CFG::EachCFGInterface> x) { myCFGEach = x; }
00078 
00079     OA::OA_ptr<OA::DataFlow::ParamBindings> getParamBindings() {return myParamBindings;}
00080     void setParamBind(OA::OA_ptr<OA::DataFlow::ParamBindings> x) {myParamBindings = x;}
00081   
00082     OA::OA_ptr<OA::Alias::InterAliasMap> getInterAlias() { return myInterAliasMap; }
00083     void setInterAlias(OA::OA_ptr<OA::Alias::InterAliasMap> x) { myInterAliasMap = x; }
00084 
00085     OA::OA_ptr<OA::SideEffect::InterSideEffectStandard> getInterSideEffect() { return myInterSideEffect; }
00086     void setInterSideEffect(OA::OA_ptr<OA::SideEffect::InterSideEffectStandard> x) {myInterSideEffect = x; }
00087 
00088     OA::OA_ptr<OA::Activity::InterActiveFortran> getInterActiveFortran() { return myInterActiveFortran; }
00089     void setInterActiveFortran(OA::OA_ptr<OA::Activity::InterActiveFortran> x) {myInterActiveFortran = x; }
00090 
00091   private:
00092     OA::OA_ptr<Open64IRInterface> myIRIF;
00093     OA::OA_ptr<OA::CallGraph::CallGraph> myCGraph;
00094     OA::OA_ptr<OA::CFG::EachCFGInterface> myCFGEach;
00095     OA::OA_ptr<OA::Alias::InterAliasMap> myInterAliasMap;
00096     OA::OA_ptr<OA::DataFlow::ParamBindings> myParamBindings;
00097     OA::OA_ptr<OA::SideEffect::InterSideEffectStandard> myInterSideEffect;
00098     OA::OA_ptr<OA::Activity::InterActiveFortran> myInterActiveFortran;  
00099   };
00100 
00104   class IntraOAInfo {
00105   public:
00106 
00107     IntraOAInfo() {}
00108 
00109     IntraOAInfo(PU_Info* pu, InterOAInfoMap* interInfo);
00110 
00111     ~IntraOAInfo() {}
00112   
00113     OA::OA_ptr<OA::Alias::Interface> getAlias() { return myIntraAlias; }
00114     void setAlias(OA::OA_ptr<OA::Alias::Interface> x) { myIntraAlias = x; }
00115 
00116     OA::OA_ptr<OA::ReachDefsOverwrite::ReachDefsOverwriteStandard> getReachDefsOverwrite() { return myReachDefsOverwrite; }
00117     void setReachDefsOverwrite(OA::OA_ptr<OA::ReachDefsOverwrite::ReachDefsOverwriteStandard> x) { myReachDefsOverwrite = x; }
00118   
00119     OA::OA_ptr<OA::UDDUChains::UDDUChainsStandard> getUDDUChains() { return myUDDUChains; }
00120     void setUDDUChains(OA::OA_ptr<OA::UDDUChains::UDDUChainsStandard> x) { myUDDUChains = x; }
00121       
00122     OA::OA_ptr<OA::XAIF::AliasMapXAIF> getAliasXAIF() { return myAliasXaif; }
00123     void setAliasXAIF(OA::OA_ptr<OA::XAIF::AliasMapXAIF> x) { myAliasXaif = x; }
00124   
00125     OA::OA_ptr<OA::XAIF::UDDUChainsXAIF> getUDDUChainsXAIF() { return myUDDUChainsXAIF; }
00126     void setUDDUChainsXAIF(OA::OA_ptr<OA::XAIF::UDDUChainsXAIF> x) {myUDDUChainsXAIF = x; }
00127   
00128     OA::OA_ptr<OA::XAIF::ReachDefsOverwriteXAIF> getReachDefsOverwriteXAIF() { return myReachDefsOverwriteXAIF; }
00129     void setReachDefsOverwriteXAIF(OA::OA_ptr<OA::XAIF::ReachDefsOverwriteXAIF> x) {myReachDefsOverwriteXAIF = x; }
00130   
00131     static bool isGlobalSymbolActive(ST* anST_p);
00132 
00133     //   // this is only for context sensitive analysis
00134     //   static void collectGlobalSymbolActivityInfo(OA::OA_ptr<OA::Activity::InterActive> active,
00135     //                                        OA::OA_ptr<OA::Alias::InterAliasMap> interAlias,
00136     //                                        OA::OA_ptr<Open64IRInterface> irIF,
00137     //                                        PU_Info* pu_forest); 
00138 
00139     static void setDoNotFilterFlag();
00140 
00141     static bool getDoNotFilterFlag();
00142 
00143   private:
00144 
00145     OA::OA_ptr<OA::Alias::Interface> myIntraAlias;
00146     OA::OA_ptr<OA::ReachDefsOverwrite::ReachDefsOverwriteStandard> myReachDefsOverwrite;
00147     OA::OA_ptr<OA::UDDUChains::UDDUChainsStandard> myUDDUChains;
00148     OA::OA_ptr<OA::XAIF::AliasMapXAIF> myAliasXaif;
00149     OA::OA_ptr<OA::XAIF::UDDUChainsXAIF> myUDDUChainsXAIF;
00150     OA::OA_ptr<OA::XAIF::ReachDefsOverwriteXAIF> myReachDefsOverwriteXAIF;
00154     static std::set<ST*> ourActiveGlobalSTPSet;
00155 
00161     static bool ourDoNotFilterFlag;
00162 
00163   };
00164   
00165 }
00166 
00167 #endif 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines