LivenessStandard.hpp

Go to the documentation of this file.
00001 // LivenessStandard.hpp
00002 
00003 #ifndef LivenessStandard_hpp
00004 #define LivenessStandard_hpp
00005 
00006 #include <cassert>
00007 #include <iostream>
00008 #include <map>
00009 #include <set>
00010 #include <vector>
00011 #include <OpenAnalysis/Utils/OA_ptr.hpp>
00012 #include <OpenAnalysis/IRInterface/IRHandles.hpp>
00013 #include <OpenAnalysis/Liveness/Interface.hpp>
00014 #include <OpenAnalysis/OABase/Annotation.hpp>
00015 #include <OpenAnalysis/Utils/GenOutputTool.hpp>
00016 #include <OpenAnalysis/Location/Location.hpp>
00017 #include <OpenAnalysis/DataFlow/LocDFSet.hpp>
00018 #include <OpenAnalysis/Utils/Util.hpp>
00019 
00020 namespace OA {
00021   namespace Liveness {
00022 
00023 
00024 
00025 class LivenessStandard : public virtual Annotation 
00026 {
00027   public:
00028     LivenessStandard(ProcHandle p){} 
00029     ~LivenessStandard() {}
00030 
00031     OA_ptr<LocIterator> getLivenessIterator(StmtHandle s); 
00032 
00033     OA_ptr<LocIterator> getExitLivenessIterator(); 
00034 // TODO
00035  //    Live will be a set of locations
00036     void insertLive(StmtHandle s, OA_ptr<Location> Live)
00037     { 
00038       if(mLiveness[s].ptrEqual(0)) {
00039         mLiveness[s] = new LocSet;
00040       }
00041       mLiveness[s]->insert(Live);    
00042     }
00043 
00044 
00045 
00046      void removeLive(StmtHandle s, OA_ptr<Location> Live)
00047     {
00048       if(mLiveness[s].ptrEqual(0)) {
00049         mLiveness[s] = new LocSet;
00050       }
00051       mLiveness[s]->erase(Live);
00052     }
00053 
00054 
00055     void insertExitLive(OA_ptr<Location> Live)
00056     { 
00057       mExitLiveness->insert(Live); 
00058     }
00059 
00060 
00061     void output(IRHandlesIRInterface& pIR);
00062 
00063     void dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> ir);
00064 
00065   private:
00066     std::map<StmtHandle,OA_ptr<LocSet> > mLiveness;
00067     OA_ptr<LocSet> mExitLiveness;
00068 }; 
00069 
00070   } // end of Liveness namespace
00071 } // end of OA namespace
00072 
00073 #endif
00074