00001 00015 #include "ActiveStandard.hpp" 00016 00017 namespace OA { 00018 namespace Activity { 00019 00020 ActiveStandard::ActiveStandard(ProcHandle p) 00021 { mActiveStmtSet = new std::set<StmtHandle>; 00022 mActiveMemRefSet = new std::set<MemRefHandle>; 00023 mActiveLocSet = new DataFlow::LocDFSet; 00024 mActiveSymSet = new std::set<SymHandle>; 00025 mUnknownLocActive = false; 00026 } 00027 00029 OA_ptr<LocIterator> ActiveStandard::getActiveLocsIterator() 00030 { OA_ptr<LocIterator> retval; 00031 retval = new DataFlow::LocDFSetIterator(*mActiveLocSet); 00032 return retval; 00033 } 00034 00036 OA_ptr<StmtHandleIterator> ActiveStandard::getActiveStmtIterator() 00037 { 00038 OA_ptr<StmtHandleIterator> retval; 00039 retval = new ActiveStmtIterator(mActiveStmtSet); 00040 return retval; 00041 } 00042 00044 OA_ptr<MemRefHandleIterator> ActiveStandard::getActiveMemRefIterator() 00045 { 00046 OA_ptr<MemRefHandleIterator> retval; 00047 retval = new ActiveMemRefIterator(mActiveMemRefSet); 00048 return retval; 00049 } 00050 00051 00053 OA_ptr<SymHandleIterator> ActiveStandard::getActiveSymIterator() 00054 { 00055 OA_ptr<SymHandleIterator> retval; 00056 retval = new ActiveSymIterator(mActiveSymSet); 00057 return retval; 00058 } 00059 00060 00061 00063 bool ActiveStandard::isActive(SymHandle sym) 00064 { 00065 // an unknown location is active, therefore all symbols are active 00066 if (mUnknownLocActive) { 00067 return true; 00068 } else if (mActiveSymSet->find(sym) != mActiveSymSet->end()) { 00069 return true; 00070 } else { 00071 return false; 00072 } 00073 } 00074 00076 bool ActiveStandard::isActive(StmtHandle stmt) 00077 { 00078 if (mActiveStmtSet->find(stmt) != mActiveStmtSet->end()) { 00079 return true; 00080 } else { 00081 return false; 00082 } 00083 } 00084 00086 bool ActiveStandard::isActive(MemRefHandle memref) 00087 { 00088 if (mActiveMemRefSet->find(memref) != mActiveMemRefSet->end()) { 00089 return true; 00090 } else { 00091 return false; 00092 } 00093 } 00094 00095 //***************************************************************** 00096 // Construction methods 00097 //***************************************************************** 00098 00100 void ActiveStandard::insertLoc(OA_ptr<Location> loc) 00101 { 00102 // We only need Active Locations 00103 // code for getting Active Symbols is deprecated. 00104 00105 mActiveLocSet->insert(loc); 00106 00107 if (loc->isaSubSet()) { 00108 OA_ptr<Location> baseLoc = loc->getBaseLoc(); 00109 insertLoc(baseLoc); 00110 00111 } 00112 } 00113 00115 void ActiveStandard::insertStmt(StmtHandle stmt) 00116 { mActiveStmtSet->insert(stmt); } 00117 00119 void ActiveStandard::insertMemRef(MemRefHandle memref) 00120 { mActiveMemRefSet->insert(memref); } 00121 00122 00123 00124 //***************************************************************** 00125 // Output 00126 //***************************************************************** 00127 00129 void ActiveStandard::dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> ir) 00130 { 00131 os << "ActiveLocSet = " << std::endl; 00132 mActiveLocSet->dump(os,ir); 00133 00134 os << std::endl << "ActiveSymSet = " << std::endl; 00135 OA_ptr<SymHandleIterator> symIterPtr; 00136 symIterPtr = new ActiveSymIterator(mActiveSymSet); 00137 for ( ; symIterPtr->isValid(); (*symIterPtr)++ ) { 00138 os << ir->toString(symIterPtr->current()) << std::endl; 00139 } 00140 os << "mUnknownLocActive = " << mUnknownLocActive << std::endl; 00141 00142 os << std::endl << "ActiveStmtList = " << std::endl; 00143 OA_ptr<StmtHandleIterator> stmtIterPtr = getActiveStmtIterator(); 00144 for ( ; stmtIterPtr->isValid(); (*stmtIterPtr)++ ) { 00145 os << ir->toString(stmtIterPtr->current()) << std::endl; 00146 } 00147 00148 os << std::endl << "ActiveMemRefList = " << std::endl; 00149 OA_ptr<MemRefHandleIterator> memrefIterPtr = getActiveMemRefIterator(); 00150 for ( ; memrefIterPtr->isValid(); (*memrefIterPtr)++ ) { 00151 os << ir->toString(memrefIterPtr->current()) << std::endl; 00152 } 00153 00154 } 00155 00156 00157 } // end of Activity namespace 00158 } // end of OA namespace
1.6.1