Go to the documentation of this file.00001
00015 #include "UDDUChainsStandard.hpp"
00016
00017 namespace OA {
00018 namespace UDDUChains {
00021 OA_ptr<Interface::ChainStmtIterator>
00022 UDDUChainsStandard::getUDChainStmtIterator(StmtHandle s)
00023 {
00024 OA_ptr<ChainStmtIterator> retval;
00025
00026
00027 if ((*mUDChainForStmt)[s].ptrEqual(0)) {
00028 (*mUDChainForStmt)[s] = new StmtSet;
00029 }
00030 retval = new ChainStmtIterator((*mUDChainForStmt)[s]);
00031 return retval;
00032 }
00033
00036 OA_ptr<Interface::StmtsWithUDChainIterator>
00037 UDDUChainsStandard::getStmtsWithUDChainIterator()
00038 {
00039 OA_ptr<StmtsWithUDChainIterator> retval;
00040 retval = new StmtsWithUDChainIterator(mUDChainForStmt);
00041 return retval;
00042 }
00043
00046 OA_ptr<Interface::ChainStmtIterator>
00047 UDDUChainsStandard::getDUChainStmtIterator(StmtHandle s)
00048 {
00049 OA_ptr<ChainStmtIterator> retval;
00050
00051
00052 if ((*mDUChainForStmt)[s].ptrEqual(0)) {
00053 (*mDUChainForStmt)[s] = new StmtSet;
00054 }
00055 retval = new ChainStmtIterator((*mDUChainForStmt)[s]);
00056 return retval;
00057 }
00058
00061 OA_ptr<Interface::StmtsWithDUChainIterator>
00062 UDDUChainsStandard::getStmtsWithDUChainIterator()
00063 {
00064 OA_ptr<StmtsWithDUChainIterator> retval;
00065 retval = new StmtsWithDUChainIterator(mDUChainForStmt);
00066 return retval;
00067 }
00068
00069
00072 OA_ptr<Interface::ChainStmtIterator>
00073 UDDUChainsStandard::getUDChainStmtIterator(MemRefHandle h)
00074 {
00075 OA_ptr<ChainStmtIterator> retval;
00076
00077
00078 if ((*mUDChainForMemRef)[h].ptrEqual(0)) {
00079 (*mUDChainForMemRef)[h] = new StmtSet;
00080 }
00081 retval = new ChainStmtIterator((*mUDChainForMemRef)[h]);
00082 return retval;
00083 }
00084
00087 OA_ptr<Interface::MemRefsWithUDChainIterator>
00088 UDDUChainsStandard::getMemRefsWithUDChainIterator()
00089 {
00090 OA_ptr<MemRefsWithUDChainIterator> retval;
00091 retval = new MemRefsWithUDChainIterator(mUDChainForMemRef);
00092 return retval;
00093 }
00094
00097 OA_ptr<Interface::ChainStmtIterator>
00098 UDDUChainsStandard::getDUChainStmtIterator(MemRefHandle h)
00099 {
00100 OA_ptr<ChainStmtIterator> retval;
00101
00102
00103 if ((*mDUChainForMemRef)[h].ptrEqual(0)) {
00104 (*mDUChainForMemRef)[h] = new StmtSet;
00105 }
00106 retval = new ChainStmtIterator((*mDUChainForMemRef)[h]);
00107 return retval;
00108 }
00109
00112 OA_ptr<Interface::MemRefsWithDUChainIterator>
00113 UDDUChainsStandard::getMemRefsWithDUChainIterator()
00114 {
00115 OA_ptr<MemRefsWithDUChainIterator> retval;
00116 retval = new MemRefsWithDUChainIterator(mDUChainForMemRef);
00117 return retval;
00118 }
00119
00120
00121
00122
00124 void UDDUChainsStandard::insertDefUse(StmtHandle def, StmtHandle use)
00125 {
00126 if ((*mDUChainForStmt)[def].ptrEqual(0)) {
00127 (*mDUChainForStmt)[def] = new StmtSet;
00128 }
00129 (*mDUChainForStmt)[def]->insert(use);
00130
00131 if ((*mUDChainForStmt)[use].ptrEqual(0)) {
00132 (*mUDChainForStmt)[use] = new StmtSet;
00133 }
00134 (*mUDChainForStmt)[use]->insert(def);
00135 }
00136
00139 void UDDUChainsStandard::insertMemRefDef(MemRefHandle ref)
00140 {
00141 if ((*mDUChainForMemRef)[ref].ptrEqual(0)) {
00142 (*mDUChainForMemRef)[ref] = new StmtSet;
00143 }
00144 }
00145 void UDDUChainsStandard::insertMemRefUse(MemRefHandle ref)
00146 {
00147 if ((*mUDChainForMemRef)[ref].ptrEqual(0)) {
00148 (*mUDChainForMemRef)[ref] = new StmtSet;
00149 }
00150 }
00151
00152
00155 void UDDUChainsStandard::insertMemRefDefStmtUse(MemRefHandle def, StmtHandle use)
00156 {
00157 if ((*mDUChainForMemRef)[def].ptrEqual(0)) {
00158 (*mDUChainForMemRef)[def] = new StmtSet;
00159 }
00160 (*mDUChainForMemRef)[def]->insert(use);
00161 }
00162
00165 void UDDUChainsStandard::insertStmtDefMemRefUse(StmtHandle def, MemRefHandle use)
00166 {
00167 if ((*mUDChainForMemRef)[use].ptrEqual(0)) {
00168 (*mUDChainForMemRef)[use] = new StmtSet;
00169 }
00170 (*mUDChainForMemRef)[use]->insert(def);
00171 }
00172
00173
00174
00175
00176
00177
00179 void UDDUChainsStandard::dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> ir)
00180 {
00181 os << "============= UDDUChains ============" << std::endl;
00182
00183
00184 OA_ptr<Interface::StmtsWithUDChainIterator> useStmtIterPtr
00185 = getStmtsWithUDChainIterator();
00186 for ( ; useStmtIterPtr->isValid(); (*useStmtIterPtr)++ )
00187 {
00188 StmtHandle useStmt = useStmtIterPtr->current();
00189
00190 os << "Use StmtHandle(" << useStmt.hval() << ") " << ir->toString(useStmt)
00191 << std::endl << "\tDefine Statements: " << std::endl;
00192
00193 OA_ptr<Interface::ChainStmtIterator> udChainPtr
00194 = getUDChainStmtIterator(useStmt);
00195 for ( ; udChainPtr->isValid(); (*udChainPtr)++) {
00196 StmtHandle s = udChainPtr->current();
00197 if (s.hval()==0) {
00198 os << "\tStmtHandle(0)" << std::endl;
00199 } else {
00200 os << "\t" << ir->toString(s) << std::endl;
00201 }
00202 }
00203
00204 }
00205
00206
00207
00208 OA_ptr<Interface::StmtsWithDUChainIterator> defStmtIterPtr
00209 = getStmtsWithDUChainIterator();
00210 for ( ; defStmtIterPtr->isValid(); (*defStmtIterPtr)++ )
00211 {
00212 StmtHandle defStmt = defStmtIterPtr->current();
00213
00214 os << "Def StmtHandle(" << defStmt.hval() << ") " << ir->toString(defStmt)
00215 << std::endl << "\tUse Statements: " << std::endl;
00216
00217 OA_ptr<Interface::ChainStmtIterator> duChainPtr
00218 = getDUChainStmtIterator(defStmt);
00219 for ( ; duChainPtr->isValid(); (*duChainPtr)++) {
00220 os << "\t" << ir->toString(duChainPtr->current()) << std::endl;
00221 }
00222
00223 }
00224
00225
00226 OA_ptr<Interface::MemRefsWithUDChainIterator> useIterPtr
00227 = getMemRefsWithUDChainIterator();
00228 for ( ; useIterPtr->isValid(); (*useIterPtr)++ ) {
00229 MemRefHandle use = useIterPtr->current();
00230
00231 os << "Use MemRefHandle(" << use.hval() << ") " << ir->toString(use)
00232 << std::endl << "\tDefine Statements: " << std::endl;
00233
00234 OA_ptr<Interface::ChainStmtIterator> udChainPtr
00235 = getUDChainStmtIterator(use);
00236 for ( ; udChainPtr->isValid(); (*udChainPtr)++) {
00237 StmtHandle s = udChainPtr->current();
00238 if (s.hval()==0) {
00239 os << "\tStmtHandle(0)" << std::endl;
00240 } else {
00241 os << "\t" << ir->toString(s) << std::endl;
00242 }
00243 }
00244
00245 }
00246
00247
00248 OA_ptr<Interface::MemRefsWithUDChainIterator> defIterPtr
00249 = getMemRefsWithDUChainIterator();
00250 for ( ; defIterPtr->isValid(); (*defIterPtr)++ ) {
00251 MemRefHandle def = defIterPtr->current();
00252
00253 os << "Def MemRefHandle(" << def.hval() << ") " << ir->toString(def)
00254 << std::endl << "\tUse Statements: " << std::endl;
00255
00256 OA_ptr<Interface::ChainStmtIterator> duChainPtr
00257 = getDUChainStmtIterator(def);
00258 for ( ; duChainPtr->isValid(); (*duChainPtr)++) {
00259 os << "\t" << ir->toString(duChainPtr->current()) << std::endl;
00260 }
00261
00262 }
00263
00264
00265 }
00266
00267
00268 void UDDUChainsStandard::output(OA::IRHandlesIRInterface &ir)
00269 {
00270 sOutBuild->objStart("UDDUChainsStandard");
00271
00272 sOutBuild->mapStart("mUDChainForStmt", "StmtHandle", "OA::OA_ptr<StmtSet> ");
00273 std::map<StmtHandle, OA::OA_ptr<StmtSet> >::iterator reg_mUDChainForStmt_iterator;
00274 for(reg_mUDChainForStmt_iterator = mUDChainForStmt->begin();
00275 reg_mUDChainForStmt_iterator != mUDChainForStmt->end();
00276 reg_mUDChainForStmt_iterator++)
00277 {
00278 const StmtHandle &first = reg_mUDChainForStmt_iterator->first;
00279 OA::OA_ptr<StmtSet> &second = reg_mUDChainForStmt_iterator->second;
00280 sOutBuild->mapEntryStart();
00281 sOutBuild->mapKeyStart();
00282 sOutBuild->fieldStart("Use StatementHandle ");
00283 sOutBuild->outputIRHandle(first, ir);
00284 sOutBuild->fieldEnd("UseStatementHandle");
00285
00286 sOutBuild->mapKeyEnd();
00287 sOutBuild->mapValueStart();
00288
00289 sOutBuild->fieldStart("Define Statements"); {
00290 sOutBuild->listStart(); {
00291 OA_ptr<StmtHandleIterator> stmtIterPtr;
00292 stmtIterPtr=getUDChainStmtIterator(first);
00293
00294 for ( ; stmtIterPtr->isValid(); (*stmtIterPtr)++ ) {
00295 sOutBuild->listItemStart(); {
00296 sOutBuild->outputIRHandle(stmtIterPtr->current(),ir);
00297 }sOutBuild->listItemEnd();
00298 }
00299 }sOutBuild->listEnd();
00300 }sOutBuild->fieldEnd("Define Statements");
00301
00302
00303
00304 sOutBuild->mapValueEnd();
00305 sOutBuild->mapEntryEnd();
00306
00307 }
00308 sOutBuild->mapEnd("mUDChainForStmt");
00309
00310 sOutBuild->mapStart("mDUChainForStmt", "StmtHandle", "OA::OA_ptr<StmtSet> ");
00311 std::map<StmtHandle, OA::OA_ptr<StmtSet> >::iterator reg_mDUChainForStmt_iterator;
00312 for(reg_mDUChainForStmt_iterator = mDUChainForStmt->begin();
00313 reg_mDUChainForStmt_iterator != mDUChainForStmt->end();
00314 reg_mDUChainForStmt_iterator++)
00315 {
00316 const StmtHandle &first = reg_mDUChainForStmt_iterator->first;
00317 OA::OA_ptr<StmtSet> &second = reg_mDUChainForStmt_iterator->second;
00318 sOutBuild->mapEntryStart();
00319 sOutBuild->mapKeyStart();
00320 sOutBuild->fieldStart("Def StmtHandle");
00321 sOutBuild->outputIRHandle(first, ir);
00322 sOutBuild->fieldEnd("Def StmtHandle");
00323
00324 sOutBuild->mapKeyEnd();
00325 sOutBuild->mapValueStart();
00326
00327 sOutBuild->fieldStart("Use Statements"); {
00328 sOutBuild->listStart(); {
00329 OA_ptr<StmtHandleIterator> stmtIterPtr;
00330 stmtIterPtr=getDUChainStmtIterator(first);
00331
00332 for ( ; stmtIterPtr->isValid(); (*stmtIterPtr)++ ) {
00333 sOutBuild->listItemStart(); {
00334 sOutBuild->outputIRHandle(stmtIterPtr->current(),ir);
00335 }sOutBuild->listItemEnd();
00336 }
00337 }sOutBuild->listEnd();
00338 }sOutBuild->fieldEnd("Use Statements");
00339
00340
00341 sOutBuild->mapValueEnd();
00342 sOutBuild->mapEntryEnd();
00343 }
00344 sOutBuild->mapEnd("mDUChainForStmt");
00345
00346 sOutBuild->mapStart("mUDChainForMemRef", "MemRefHandle", "OA::OA_ptr<StmtSet> ");
00347 std::map<MemRefHandle, OA::OA_ptr<StmtSet> >::iterator reg_mUDChainForMemRef_iterator;
00348 for(reg_mUDChainForMemRef_iterator = mUDChainForMemRef->begin();
00349 reg_mUDChainForMemRef_iterator != mUDChainForMemRef->end();
00350 reg_mUDChainForMemRef_iterator++)
00351 {
00352 const MemRefHandle &first = reg_mUDChainForMemRef_iterator->first;
00353 OA::OA_ptr<StmtSet> &second = reg_mUDChainForMemRef_iterator->second;
00354 sOutBuild->mapEntryStart();
00355 sOutBuild->mapKeyStart();
00356 sOutBuild->fieldStart("Use MemRefHandle");
00357 sOutBuild->outputIRHandle(first, ir);
00358 sOutBuild->fieldEnd("Use MemRefHandle");
00359
00360 sOutBuild->mapKeyEnd();
00361 sOutBuild->mapValueStart();
00362 sOutBuild->fieldStart("Def Statements"); {
00363 sOutBuild->listStart(); {
00364 OA_ptr<StmtHandleIterator> stmtIterPtr;
00365 stmtIterPtr=getUDChainStmtIterator(first);
00366
00367 for ( ; stmtIterPtr->isValid(); (*stmtIterPtr)++ ) {
00368 sOutBuild->listItemStart(); {
00369 sOutBuild->outputIRHandle(stmtIterPtr->current(),ir);
00370 }sOutBuild->listItemEnd();
00371 }
00372 }sOutBuild->listEnd();
00373 }sOutBuild->fieldEnd("Def Statements");
00374
00375
00376 sOutBuild->mapValueEnd();
00377 sOutBuild->mapEntryEnd();
00378 }
00379 sOutBuild->mapEnd("mUDChainForMemRef");
00380
00381 sOutBuild->mapStart("mDUChainForMemRef", "MemRefHandle", "OA::OA_ptr<StmtSet> ");
00382 std::map<MemRefHandle, OA::OA_ptr<StmtSet> >::iterator reg_mDUChainForMemRef_iterator;
00383 for(reg_mDUChainForMemRef_iterator = mDUChainForMemRef->begin();
00384 reg_mDUChainForMemRef_iterator != mDUChainForMemRef->end();
00385 reg_mDUChainForMemRef_iterator++)
00386 {
00387 const MemRefHandle &first = reg_mDUChainForMemRef_iterator->first;
00388 OA::OA_ptr<StmtSet> &second = reg_mDUChainForMemRef_iterator->second;
00389 sOutBuild->mapEntryStart();
00390 sOutBuild->mapKeyStart();
00391 sOutBuild->fieldStart("Def MemRefHandle");
00392 sOutBuild->outputIRHandle(first, ir);
00393 sOutBuild->fieldEnd("Def MemRefHandle");
00394
00395 sOutBuild->mapKeyEnd();
00396 sOutBuild->mapValueStart();
00397 sOutBuild->fieldStart("Use Statements"); {
00398 sOutBuild->listStart(); {
00399 OA_ptr<StmtHandleIterator> stmtIterPtr;
00400 stmtIterPtr=getDUChainStmtIterator(first);
00401
00402 for ( ; stmtIterPtr->isValid(); (*stmtIterPtr)++ ) {
00403 sOutBuild->listItemStart(); {
00404 sOutBuild->outputIRHandle(stmtIterPtr->current(),ir);
00405 }sOutBuild->listItemEnd();
00406 }
00407 }sOutBuild->listEnd();
00408 }sOutBuild->fieldEnd("Use Statements");
00409
00410
00411 sOutBuild->mapValueEnd();
00412 sOutBuild->mapEntryEnd();
00413 }
00414 sOutBuild->mapEnd("mDUChainForMemRef");
00415
00416
00417 sOutBuild->mapStart("mMemRefToStmtMap", "MemRefHandle", "StmtHandle");
00418 std::map<MemRefHandle, StmtHandle>::iterator reg_mMemRefToStmtMap_iterator;
00419 for(reg_mMemRefToStmtMap_iterator = mMemRefToStmtMap.begin();
00420 reg_mMemRefToStmtMap_iterator != mMemRefToStmtMap.end();
00421 reg_mMemRefToStmtMap_iterator++)
00422 {
00423 const MemRefHandle &first = reg_mMemRefToStmtMap_iterator->first;
00424 StmtHandle &second = reg_mMemRefToStmtMap_iterator->second;
00425 sOutBuild->mapEntryStart();
00426 sOutBuild->mapKeyStart();
00427 sOutBuild->fieldStart("Def MemRefHandle");
00428 sOutBuild->outputIRHandle(first, ir);
00429 sOutBuild->fieldEnd("Def MemRefHandle");
00430
00431 sOutBuild->mapKeyEnd();
00432 sOutBuild->mapValueStart();
00433 sOutBuild->outputIRHandle(second, ir);
00434
00435 sOutBuild->mapKeyEnd();
00436 sOutBuild->mapValueStart();
00437 sOutBuild->fieldStart("Start Use Statements"); {
00438 sOutBuild->listStart(); {
00439 OA_ptr<StmtHandleIterator> stmtIterPtr;
00440 stmtIterPtr=getDUChainStmtIterator(first);
00441
00442 for ( ; stmtIterPtr->isValid(); (*stmtIterPtr)++ ) {
00443 sOutBuild->listItemStart(); {
00444 sOutBuild->outputIRHandle(stmtIterPtr->current(),ir);
00445 }sOutBuild->listItemEnd();
00446 }
00447 }sOutBuild->listEnd();
00448 }sOutBuild->fieldEnd("End Use Statements");
00449
00450
00451 sOutBuild->mapValueEnd();
00452 sOutBuild->mapEntryEnd();
00453 }
00454 sOutBuild->mapEnd("mMemRefToStmtMap");
00455
00456
00457
00458 }
00459
00460
00461 }
00462 }