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
1.7.1