OpenADFortTk (basic)
src/whirl2xaif/PUXlationContext.h
Go to the documentation of this file.
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 */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines