|
OpenADFortTk (basic)
|
00001 // -*-Mode: C++;-*- 00002 // $Header: /m_home/m_utkej/Argonne/cvs2svn/cvs/OpenADFortTk/src/whirl2xaif/PUXlationContext.h,v 1.4 2008-02-06 19:51:22 utke Exp $ 00003 00004 #ifndef PUXlationContext_INCLUDED 00005 #define PUXlationContext_INCLUDED 00006 00007 #include <list> 00008 #include <iostream> 00009 00010 #include "Open64IRInterface/Open64BasicTypes.h" 00011 #include "WhirlParentize.h" 00012 #include "WhirlIDMaps.h" 00013 #include "OAMaps.h" 00014 #include "Open64IRInterface/SymTab.h" 00015 #include "ScalarizedRefTab.h" 00016 #include "XlationContext.h" 00017 #include <OpenAnalysis/Location/Location.hpp> 00018 00019 00020 namespace whirl2xaif { 00021 00046 class PUXlationContext { 00047 public: 00048 00053 PUXlationContext(const std::string& anOriginator, Open64IRInterface& anIrInterface ); 00054 00055 ~PUXlationContext(); 00056 00057 // ------------------------------------------------------- 00058 // stacked XlationContext manipulation (Create, Delete...) 00059 // ------------------------------------------------------- 00060 00064 void createXlationContext(); 00065 00071 void createXlationContext(XlationContext::Flags_E f); 00072 00079 void createXlationContext(XlationContext::Flags_E f, WN* aWNp); 00080 00086 void deleteXlationContext(); 00087 00091 XlationContext& currentXlationContext(); 00092 00096 WN* getMostRecentWN(); 00097 00098 // ------------------------------------------------------- 00099 // PU level maps and data 00100 // ------------------------------------------------------- 00101 00102 WN* findParentWN(WN*); 00103 WN* findParentBlockWN(WN*); 00104 fortTkSupport::WhirlParentMap* getWNParentMap() const; 00105 void setWNParentMap(fortTkSupport::WhirlParentMap* aWhirlParentMapP); 00106 00107 fortTkSupport::SymTabId findSymTabId(ST_TAB* stab); 00108 fortTkSupport::SymTabToSymTabIdMap* getSymTabToIdMap() const; 00109 void setSymTabToIdMap(fortTkSupport::SymTabToSymTabIdMap* aSymTabToSymTabIdMapP); 00110 00111 fortTkSupport::PUId findPUId(PU_Info* pu); 00112 fortTkSupport::PUToPUIdMap* getPUToIdMap() const; 00113 void setPUToIdMap(fortTkSupport::PUToPUIdMap* aPUToPUIdMapP); 00114 00115 fortTkSupport::WNId findWNId(WN* wn); 00116 fortTkSupport::WNToWNIdMap* getWNToIdMap() const; 00117 void setWNToIdMap(fortTkSupport::WNToWNIdMap* x); 00118 00119 int findUDDUChainId(WN* wnexpr); 00120 OA::OA_ptr<OA::XAIF::UDDUChainsXAIF> getUDDUChains() const; 00121 void setUDDUChains(OA::OA_ptr<OA::XAIF::UDDUChainsXAIF> x); 00122 00123 int findDoChainId(WN* wn); 00124 OA::OA_ptr<OA::XAIF::ReachDefsOverwriteXAIF> getDoChains() const; 00125 void setDoChains(OA::OA_ptr<OA::XAIF::ReachDefsOverwriteXAIF> x); 00126 00127 fortTkSupport::ScalarizedRef* findScalarizedRef(WN* wn); 00128 fortTkSupport::ScalarizedRefTab_W2X* getScalarizedRefTab() const; 00129 void setScalarizedRefTab(fortTkSupport::ScalarizedRefTab_W2X* aScalarizedRefTab_W2Xp); 00130 00131 int isActiveSym(ST* st); 00132 int isActiveStmt(PU_Info* pu, WN* wn); 00133 int isActiveVarRef(PU_Info* pu, WN* wn); 00134 void setActivity(OA::OA_ptr<OA::Activity::InterActiveFortran> anActivityMap); 00135 00136 void setAlias(OA::OA_ptr<OA::Alias::InterAliasMap> anAliasMap); 00137 00138 int getAliasMapKey(WN* wnexpr); 00139 void setAliasMapXAIF(OA::OA_ptr<OA::XAIF::AliasMapXAIF> anAliasMapXAIF); 00140 00141 // ------------------------------------------------------- 00142 // Misc 00143 // ------------------------------------------------------- 00144 00145 void dump(std::ostream& o, const std::string& indent) const; 00146 void ddump() const; 00147 00148 bool isF90() const; 00149 00150 void setF90(bool aFlag); 00151 00152 Open64IRInterface& getIrInterface(); 00153 00154 private: 00158 PUXlationContext(const XlationContext& x); 00159 00163 PUXlationContext(); 00164 00168 PUXlationContext& operator=(const PUXlationContext& x); 00169 00173 fortTkSupport::WhirlParentMap* myWNParentMapP; 00174 00178 fortTkSupport::SymTabToSymTabIdMap* myStab2idMapP; 00179 00183 fortTkSupport::PUToPUIdMap* myPU2idMapP; 00184 00188 fortTkSupport::WNToWNIdMap* myWN2idMapP; 00189 00193 OA::OA_ptr<OA::Activity::InterActiveFortran> myActivity; 00194 00198 OA::OA_ptr<OA::Alias::InterAliasMap> myAlias; 00199 00203 OA::OA_ptr<OA::XAIF::AliasMapXAIF> myAliasMapXAIF_p; 00204 00208 OA::OA_ptr<OA::XAIF::UDDUChainsXAIF> myUdduchains; 00209 00213 OA::OA_ptr<OA::XAIF::ReachDefsOverwriteXAIF> myDoChains; 00214 00218 fortTkSupport::ScalarizedRefTab_W2X* myScalarizedRefTab_W2Xp; 00219 00220 00225 typedef std::list<XlationContext> XlationContextStack; 00226 00230 XlationContextStack myXlationContextStack; 00231 00236 void PushNewXlationContext(XlationContext::Flags_E f, WN* aWNp); 00237 00241 std::string myOriginator; 00242 00243 bool myF90Flag; 00244 00245 Open64IRInterface& myIrInterface; 00246 00247 }; 00248 00249 } 00250 00251 #endif /* XlationContext_INCLUDED */