|
OpenADFortTk (basic)
|
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