00001
00015 #include "MemRefExpr.hpp"
00016
00017
00018 #include <OpenAnalysis/MemRefExpr/MemRefExprVisitor.hpp>
00019
00020 namespace OA {
00021
00022
00023
00024
00025
00026
00030 bool MemRefExpr::operator<(MemRefExpr& other)
00031 {
00032 bool retval = false;
00033 if(getOrder() < other.getOrder()) { retval = true; }
00034 return retval;
00035 }
00036
00037 bool MemRefExpr::operator==(MemRefExpr& other)
00038 {
00039 bool retval = false;
00040 if(getOrder() == other.getOrder()) { retval = true; }
00041 return retval;
00042 }
00043
00044 void MemRefExpr::output(IRHandlesIRInterface& pIR)
00045 {
00046 sOutBuild->field("mMemRefType", toString(mMemRefType) );
00047 }
00048
00049 void MemRefExpr::dump(std::ostream& os, IRHandlesIRInterface& pIR)
00050 {
00051 MemRefExpr::dump(os);
00052 }
00053
00054
00055 void MemRefExpr::dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> pIR)
00056 {
00057 MemRefExpr::dump(os);
00058 }
00059
00060 void MemRefExpr::dump(std::ostream& os)
00061 {
00062 os << "MemRefExpr(this=" << this
00063 << ", type = " << toString(mMemRefType) << ")\t";
00064 }
00065
00066 std::string MemRefExpr::toString(MemRefType type)
00067 {
00068 std::ostringstream oss;
00069 switch (mMemRefType) {
00070 case USE: oss << "USE"; break;
00071 case DEF: oss << "DEF"; break;
00072 case USEDEF: oss << "USEDEF"; break;
00073 case DEFUSE: oss << "DEFUSE"; break;
00074 }
00075 return oss.str();
00076 }
00077
00078
00079
00080
00081
00082 void NamedRef::acceptVisitor(MemRefExprVisitor& pVisitor)
00083 {
00084 pVisitor.visitNamedRef(*this);
00085 }
00086
00087 OA_ptr<MemRefExpr> NamedRef::clone()
00088 {
00089 OA_ptr<MemRefExpr> retval;
00090 retval = new NamedRef(*this);
00091 return retval;
00092 }
00093
00101 bool NamedRef::operator<(MemRefExpr& other)
00102 {
00103 if(getOrder() < other.getOrder()) { return true; }
00104 else if(getOrder() > other.getOrder()) { return false; }
00105
00106
00107 NamedRef& ref = static_cast<NamedRef&>(other);
00108
00109 if( getSymHandle() < ref.getSymHandle() )
00110 {
00111 return true;
00112 } else {
00113 return false;
00114 }
00115 }
00116
00117 bool NamedRef::operator==(MemRefExpr& other)
00118 {
00119 if(getOrder() != other.getOrder()) { return false; }
00120
00121
00122 NamedRef& ref = static_cast<NamedRef&>(other);
00123
00124 if( getSymHandle() == ref.getSymHandle() )
00125 {
00126 return true;
00127 } else {
00128 return false;
00129 }
00130 }
00131
00132 void NamedRef::output(IRHandlesIRInterface& pIR)
00133 {
00134 sOutBuild->objStart("NamedRef");
00135 MemRefExpr::output(pIR);
00136 sOutBuild->fieldStart("mSymHandle");
00137 sOutBuild->outputIRHandle(mSymHandle,pIR);
00138 sOutBuild->fieldEnd("mSymHandle");
00139 sOutBuild->objEnd("NamedRef");
00140 }
00141
00142 void NamedRef::dump(std::ostream& os)
00143 {
00144 MemRefExpr::dump(os);
00145 os << "NamedRef(this=" << this << ", mSymHandle.hval()="
00146 << mSymHandle.hval() << ")";
00147 os << std::endl;
00148 }
00149
00150 void NamedRef::dump(std::ostream& os, IRHandlesIRInterface& pIR)
00151 {
00152
00153 MemRefExpr::dump(os,pIR);
00154 os << "NamedRef(this=" << this << ", mSymHandle.hval()="
00155 << mSymHandle.hval() << "): "
00156 << pIR.toString(mSymHandle);
00157 os << std::endl;
00158 }
00159
00160
00161 void NamedRef::dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> pIR)
00162 {
00163 dump(os,*pIR);
00164 }
00165
00166
00167
00168
00169
00170 void UnnamedRef::acceptVisitor(MemRefExprVisitor& pVisitor)
00171 {
00172 pVisitor.visitUnnamedRef(*this);
00173 }
00174
00175 OA_ptr<MemRefExpr> UnnamedRef::clone()
00176 {
00177 OA_ptr<MemRefExpr> retval;
00178 retval = new UnnamedRef(*this);
00179 return retval;
00180 }
00181
00189 bool UnnamedRef::operator<(MemRefExpr& other)
00190 {
00191 if(getOrder() < other.getOrder()) { return true; }
00192 else if(getOrder() > other.getOrder()) { return false; }
00193
00194
00195 UnnamedRef& ref = static_cast<UnnamedRef&>(other);
00196
00197 if( getExprHandle() < ref.getExprHandle() )
00198 {
00199 return true;
00200 } else {
00201 return false;
00202 }
00203 }
00204
00205 bool UnnamedRef::operator==(MemRefExpr& other)
00206 {
00207 if(getOrder() != other.getOrder()) { return false; }
00208
00209
00210 UnnamedRef& ref = static_cast<UnnamedRef&>(other);
00211
00212 if( getExprHandle() == ref.getExprHandle() )
00213 {
00214 return true;
00215 } else {
00216 return false;
00217 }
00218 }
00219
00220 void UnnamedRef::output(IRHandlesIRInterface& pIR)
00221 {
00222 sOutBuild->objStart("UnnamedRef");
00223 MemRefExpr::output(pIR);
00224 sOutBuild->fieldStart("mExprHandle");
00225 sOutBuild->outputIRHandle(mExprHandle,pIR);
00226 sOutBuild->fieldEnd("mExprHandle");
00227 sOutBuild->field("mLocal", bool2string(mLocal));
00228 if(isLocal() == true) {
00229 sOutBuild->fieldStart("mProcHandle");
00230 sOutBuild->outputIRHandle(mProcHandle,pIR);
00231 sOutBuild->fieldEnd("mProcHandle");
00232 }
00233 sOutBuild->objEnd("UnnamedRef");
00234 }
00235
00236
00237 void UnnamedRef::dump(std::ostream& os)
00238 {
00239 MemRefExpr::dump(os);
00240 os << "UnnamedRef(this=" << this << ", mExprHandle.hval()="
00241 << mExprHandle.hval() << ", mLocal=" << mLocal;
00242 if( isLocal() == true) {
00243 os << ", mProcHandle.hval()=" << mProcHandle.hval();
00244 }
00245 os << ")";
00246 os << std::endl;
00247 }
00248
00249 void UnnamedRef::dump(std::ostream& os, IRHandlesIRInterface& pIR)
00250 {
00251 MemRefExpr::dump(os,pIR);
00252 os << "UnnamedRef(this=" << this << ", mExprHandle.hval()="
00253 << mExprHandle.hval() << "): "
00254 << pIR.toString(mExprHandle);
00255 os << std::endl;
00256 }
00257
00258 void UnnamedRef::dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> pIR)
00259 {
00260 dump(os,*pIR);
00261 }
00262
00263
00264
00265
00266
00267 void UnknownRef::acceptVisitor(MemRefExprVisitor& pVisitor)
00268 {
00269 pVisitor.visitUnknownRef(*this);
00270 }
00271
00272 OA_ptr<MemRefExpr> UnknownRef::clone()
00273 {
00274 OA_ptr<MemRefExpr> retval;
00275 retval = new UnknownRef(*this);
00276 return retval;
00277 }
00278
00279 bool UnknownRef::operator<(MemRefExpr& other)
00280 {
00281 if(getOrder() < other.getOrder()) { return true; }
00282 else if(getOrder() > other.getOrder()) { return false; }
00283
00284
00285 return false;
00286 }
00287
00288 bool UnknownRef::operator==(MemRefExpr& other)
00289 {
00290 if(getOrder() != other.getOrder()) { return false; }
00291 else { return true; }
00292 }
00293
00294 void UnknownRef::output(IRHandlesIRInterface& pIR)
00295 {
00296 sOutBuild->objStart("UnknownRef");
00297 MemRefExpr::output(pIR);
00298 sOutBuild->objEnd("UnknownRef");
00299 }
00300
00301
00302 void UnknownRef::dump(std::ostream& os)
00303 {
00304 MemRefExpr::dump(os);
00305 os << "UnknownRef";
00306 os << std::endl;
00307 }
00308
00309 void UnknownRef::dump(std::ostream& os, IRHandlesIRInterface& pIR)
00310 {
00311 MemRefExpr::dump(os,pIR);
00312 os << "UnknownRef";
00313 os << std::endl;
00314 }
00315 void UnknownRef::dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> pIR)
00316 {
00317 dump(os,*pIR);
00318 }
00319
00320
00321
00322
00323 SymHandle RefOp::getBaseSym()
00324 {
00325 OA_ptr<MemRefExpr> m = mMRE;
00326
00327
00328 if (mMRE->isaRefOp()) {
00329 OA_ptr<RefOp> refOp = m.convert<RefOp>();
00330 return refOp->getBaseSym();
00331 }
00332
00333
00334 assert(mMRE->isaNamed());
00335 OA_ptr<NamedRef> namedRef = m.convert<NamedRef>();
00336 return namedRef->getSymHandle();
00337 }
00338
00339 OA_ptr<MemRefExpr> RefOp::getBase() {
00340 OA_ptr<MemRefExpr> m = mMRE;
00341
00342
00343 if (mMRE->isaRefOp()) {
00344 OA_ptr<RefOp> refOp = m.convert<RefOp>();
00345 return refOp->getBase();
00346 }
00347
00348
00349 assert(mMRE->isaNamed());
00350 OA_ptr<NamedRef> namedRef = m.convert<NamedRef>();
00351 return namedRef;
00352 }
00353
00354 void RefOp::output(IRHandlesIRInterface& ir)
00355 {
00356 MemRefExpr::output(ir);
00357
00358 if (! mMRE.ptrEqual(0) ) {
00359 sOutBuild->fieldStart("mMRE");
00360 mMRE->output(ir);
00361 sOutBuild->fieldEnd("mMRE");
00362 } else {
00363 sOutBuild->field("mMRE", "<null MRE>");
00364 }
00365
00366 }
00367
00368
00369
00370
00371
00372
00373 void AddressOf::acceptVisitor(MemRefExprVisitor& pVisitor)
00374 {
00375 pVisitor.visitAddressOf(*this);
00376 }
00377
00378 OA_ptr<MemRefExpr> AddressOf::clone()
00379 {
00380 OA_ptr<MemRefExpr> retval;
00381 retval = new AddressOf(*this);
00382 return retval;
00383 }
00384
00385 bool AddressOf::operator<(MemRefExpr& other)
00386 {
00387 if(getOrder() < other.getOrder()) { return true; }
00388 else if(getOrder() > other.getOrder()) { return false; }
00389
00390
00391 AddressOf& ref = static_cast<AddressOf&>(other);
00392
00393 if( getMemRefExpr() < ref.getMemRefExpr() )
00394 {
00395 return true;
00396 } else {
00397 return false;
00398 }
00399 }
00400
00401 bool AddressOf::operator==(MemRefExpr& other)
00402 {
00403 if(getOrder() != other.getOrder()) { return false; }
00404
00405
00406 AddressOf& ref = static_cast<AddressOf&>(other);
00407
00408 if( getMemRefExpr() == ref.getMemRefExpr() )
00409 {
00410 return true;
00411 } else {
00412 return false;
00413 }
00414 }
00415
00416
00417 OA_ptr<MemRefExpr> AddressOf::composeWith(OA_ptr<MemRefExpr> mre)
00418 {
00419 OA_ptr<MemRefExpr> retval;
00420 OA_ptr<MemRefExpr> clone_mre ;
00421 clone_mre = mre->clone();
00422
00423 if(clone_mre->isaRefOp()) {
00424
00425 OA_ptr<RefOp> ref = clone_mre.convert<RefOp>();
00426
00427 if (ref->isaDeref()) {
00428 OA_ptr<MemRefExpr> child_mre = ref->getMemRefExpr();
00429 return child_mre;
00430 }
00431 if (ref->isaAddressOf()) {
00432 return clone_mre;
00433 }
00434 }
00435
00436 retval = new AddressOf(this->getMRType(), clone_mre);
00437 return retval;
00438 }
00439
00440
00441
00442 void AddressOf::output(IRHandlesIRInterface& pIR)
00443 {
00444 sOutBuild->objStart("AddressOf");
00445 RefOp::output(pIR);
00446 sOutBuild->objEnd("AddressOf");
00447 }
00448
00449
00450 void AddressOf::dump(std::ostream& os)
00451 {
00452 MemRefExpr::dump(os);
00453 os << "AddressOf(this=" << this << ", mMemRefExpr=";
00454 getMemRefExpr()->dump(os);
00455 os << std::endl;
00456 }
00457
00458 void AddressOf::dump(std::ostream& os, IRHandlesIRInterface& pIR)
00459 {
00460 MemRefExpr::dump(os,pIR);
00461 os << "AddressOf(this=" << this << ", mMemRefExpr=";
00462 getMemRefExpr()->dump(os,pIR);
00463 os << std::endl;
00464 }
00465
00466 void AddressOf::dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> pIR)
00467 {
00468 dump(os,*pIR);
00469 }
00470
00471
00472
00473
00474
00475
00476 void Deref::acceptVisitor(MemRefExprVisitor& pVisitor)
00477 {
00478 pVisitor.visitDeref(*this);
00479 }
00480
00481 OA_ptr<MemRefExpr> Deref::clone()
00482 {
00483 OA_ptr<MemRefExpr> retval;
00484 retval = new Deref(*this);
00485 return retval;
00486 }
00487
00497 bool Deref::operator<(MemRefExpr& other)
00498 {
00499 if(getOrder() < other.getOrder()) { return true; }
00500 else if(getOrder() > other.getOrder()) { return false; }
00501
00502
00503 Deref& ref = static_cast<Deref&>(other);
00504
00505
00506 if( (getMemRefExpr() < ref.getMemRefExpr() ||
00507 (getMemRefExpr() == ref.getMemRefExpr()
00508 && getNumDerefs() < ref.getNumDerefs()) ) )
00509 {
00510 return true;
00511 } else {
00512 return false;
00513 }
00514 }
00515
00516 bool Deref::operator==(MemRefExpr& other)
00517 {
00518 if(getOrder() != other.getOrder()) { return false; }
00519
00520
00521 Deref& ref = static_cast<Deref&>(other);
00522
00523
00524
00525
00526
00527 if( getNumDerefs() == ref.getNumDerefs()
00528 && getMemRefExpr() == ref.getMemRefExpr() )
00529 {
00530 return true;
00531 } else {
00532 return false;
00533 }
00534 }
00535
00536
00537
00538 OA_ptr<MemRefExpr> Deref::composeWith(OA_ptr<MemRefExpr> mre)
00539 {
00540 OA_ptr<MemRefExpr> retval;
00541 OA_ptr<MemRefExpr> clone_mre = mre->clone();
00542
00543 if( clone_mre->isaRefOp() ) {
00544 OA_ptr<RefOp> ref = clone_mre.convert<RefOp>();
00545
00546 if (ref->isaAddressOf()) {
00547 OA_ptr<MemRefExpr> child_mre = ref->getMemRefExpr();
00548 retval = child_mre;
00549 return retval;
00550 }
00551 }
00552
00553 retval = new Deref(this->getMRType(), clone_mre, 1);
00554
00555 return retval;
00556 }
00557
00558 void Deref::output(IRHandlesIRInterface& pIR)
00559 {
00560 sOutBuild->objStart("Deref");
00561 RefOp::output(pIR);
00562 sOutBuild->field("mNumDeref", int2string(mNumDeref));
00563 sOutBuild->objEnd("Deref");
00564 }
00565
00566
00567 void Deref::dump(std::ostream& os)
00568 {
00569 MemRefExpr::dump(os);
00570 os << "Deref(this=" << this << ", mMemRefExpr=";
00571 getMemRefExpr()->dump(os);
00572 os << "\tmNumDerefs = " << getNumDerefs() << " )";
00573 os << std::endl;
00574 }
00575
00576 void Deref::dump(std::ostream& os, IRHandlesIRInterface& pIR)
00577 {
00578 MemRefExpr::dump(os,pIR);
00579 os << "Deref(this=" << this << ", mMemRefExpr=";
00580 getMemRefExpr()->dump(os,pIR);
00581 os << "\tmNumDerefs = " << getNumDerefs() << " )";
00582 os << std::endl;
00583 }
00584
00585 void Deref::dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> pIR)
00586 {
00587 dump(os,*pIR);
00588 }
00589
00590
00591
00592
00593 OA_ptr<MemRefExpr> SubSetRef::clone()
00594 {
00595 OA_ptr<MemRefExpr> retval;
00596 retval = new SubSetRef(*this);
00597 return retval;
00598 }
00599
00600 void SubSetRef::acceptVisitor(MemRefExprVisitor& pVisitor)
00601 {
00602 pVisitor.visitSubSetRef(*this);
00603 }
00604
00605
00606
00607 OA_ptr<MemRefExpr> SubSetRef::composeWith(OA_ptr<MemRefExpr> mre)
00608 {
00609 OA_ptr<MemRefExpr> clone_mre = mre->clone();
00610 OA_ptr<MemRefExpr> retval;
00611
00612 retval = new SubSetRef(clone_mre->getMRType(), clone_mre);
00613 return retval;
00614 }
00615
00616
00617
00618 void SubSetRef::output(IRHandlesIRInterface& pIR)
00619 {
00620 sOutBuild->objStart("SubSetRef");
00621 RefOp::output(pIR);
00622 sOutBuild->objEnd("SubSetRef");
00623 }
00624
00625
00626
00627 bool SubSetRef::operator<(MemRefExpr& other)
00628 {
00629 if(getOrder() < other.getOrder()) { return true; }
00630 else if(getOrder() > other.getOrder()) { return false; }
00631 SubSetRef& ref = static_cast<SubSetRef&>(other);
00632 if( getMemRefExpr() < ref.getMemRefExpr() )
00633 {
00634 return true;
00635 } else {
00636 return false;
00637 }
00638 }
00639
00640
00641 bool SubSetRef::operator==(MemRefExpr& other)
00642 {
00643 if(getOrder() != other.getOrder()) { return false; }
00644
00645 SubSetRef& ref = static_cast<SubSetRef&>(other);
00646 if( getMemRefExpr() == ref.getMemRefExpr() )
00647 {
00648 return true;
00649 } else {
00650 return false;
00651 }
00652 }
00653
00654
00655 void SubSetRef::dump(std::ostream& os)
00656 {
00657 MemRefExpr::dump(os);
00658 os << "SubSetRef(this=" << this << ", mMemRefExpr=";
00659 getMemRefExpr()->dump(os);
00660 os << " )";
00661 os << std::endl;
00662 }
00663
00664 void SubSetRef::dump(std::ostream& os, IRHandlesIRInterface& pIR)
00665 {
00666 MemRefExpr::dump(os,pIR);
00667 os << "SubSetRef(this=" << this << ", mMemRefExpr=";
00668 getMemRefExpr()->dump(os,pIR);
00669 os << " )";
00670 os << std::endl;
00671 }
00672
00673 void SubSetRef::dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> pIR)
00674 {
00675 dump(os,*pIR);
00676 }
00677
00678
00679
00680
00681
00682 void IdxAccess::acceptVisitor(MemRefExprVisitor& pVisitor)
00683 {
00684 pVisitor.visitIdxAccess(*this);
00685 }
00686
00687 OA_ptr<MemRefExpr> IdxAccess::clone()
00688 {
00689 OA_ptr<MemRefExpr> retval;
00690 retval = new IdxAccess(*this);
00691 return retval;
00692 }
00693
00707 bool IdxAccess::operator<(MemRefExpr& other)
00708 {
00709 if(getOrder() < other.getOrder()) { return true; }
00710 else if(getOrder() > other.getOrder()) { return false; }
00711
00712
00713 IdxAccess& ref = static_cast<IdxAccess&>(other);
00714
00715 if( getMemRefExpr() < ref.getMemRefExpr() ||
00716 (getMemRefExpr() == ref.getMemRefExpr()
00717 && getIdx() < ref.getIdx()) )
00718 {
00719 return true;
00720 } else {
00721 return false;
00722 }
00723 }
00724
00725 bool IdxAccess::operator==(MemRefExpr& other)
00726 {
00727 if(getOrder() != other.getOrder()) { return false; }
00728
00729
00730 IdxAccess& ref = static_cast<IdxAccess&>(other);
00731
00732
00733 if( getMemRefExpr() == ref.getMemRefExpr()
00734 && getIdx() == ref.getIdx() )
00735 {
00736 return true;
00737 } else {
00738 return false;
00739 }
00740 }
00741
00742 void IdxAccess::output(IRHandlesIRInterface& pIR)
00743 {
00744 sOutBuild->objStart("IdxAccess");
00745 RefOp::output(pIR);
00746 sOutBuild->field("mIdx", int2string(mIdx));
00747 sOutBuild->objEnd("IdxAccess");
00748 }
00749
00750
00751 void IdxAccess::dump(std::ostream& os)
00752 {
00753 MemRefExpr::dump(os);
00754 os << "IdxAccess(this=" << this << ", mMemRefExpr=";
00755 getMemRefExpr()->dump(os);
00756 os << "\tmIdx=" << getIdx() << " )";
00757 os << std::endl;
00758 }
00759
00760 void IdxAccess::dump(std::ostream& os, IRHandlesIRInterface& pIR)
00761 {
00762 MemRefExpr::dump(os,pIR);
00763 os << "IdxAccess(this=" << this << ", mMemRefExpr=";
00764 getMemRefExpr()->dump(os,pIR);
00765 os << "\tmIdx=" << getIdx() << " )";
00766 os << std::endl;
00767 }
00768
00769 void IdxAccess::dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> pIR)
00770 {
00771 dump(os,*pIR);
00772 }
00773
00774
00775
00776
00777
00778 void IdxExprAccess::acceptVisitor(MemRefExprVisitor& pVisitor) {
00779 pVisitor.visitIdxExprAccess(*this);
00780 }
00781
00782 OA_ptr<MemRefExpr> IdxExprAccess::clone() {
00783 OA_ptr<MemRefExpr> retval;
00784 retval = new IdxExprAccess(*this);
00785 return retval;
00786 }
00787
00790 bool IdxExprAccess::operator<(MemRefExpr & other) {
00791 if(getOrder() < other.getOrder()) { return true; }
00792 else if(getOrder() > other.getOrder()) { return false; }
00793
00794
00795 IdxExprAccess& ref = static_cast<IdxExprAccess&>(other);
00796
00797 if( (getMemRefExpr() < ref.getMemRefExpr()) ||
00798 (getMemRefExpr() == ref.getMemRefExpr()
00799 && getExpr() < ref.getExpr()) )
00800 {
00801 return true;
00802 } else {
00803 return false;
00804 }
00805 }
00806
00807 bool IdxExprAccess::operator==(MemRefExpr& other) {
00808 if(getOrder() != other.getOrder()) { return false; }
00809
00810
00811 IdxExprAccess& ref = static_cast<IdxExprAccess&>(other);
00812
00813
00814 if( getMemRefExpr() == ref.getMemRefExpr()
00815 && getExpr() == ref.getExpr() )
00816 {
00817 return true;
00818 } else {
00819 return false;
00820 }
00821 }
00822
00823 void IdxExprAccess::output(IRHandlesIRInterface& ir) {
00824 sOutBuild->objStart("IdxExprAccess");
00825 RefOp::output(ir);
00826 sOutBuild->outputIRHandle(mhExpr, ir);
00827 sOutBuild->objEnd("IdxExprAccess");
00828 }
00829
00830 void IdxExprAccess::dump(std::ostream& os)
00831 {
00832 MemRefExpr::dump(os);
00833 os << "IdxExprAccess(this=" << this << ", mMemRefExpr=";
00834 getMemRefExpr()->dump(os);
00835 os << "\tmhExpr=" << mhExpr.hval () << " )";
00836 os << std::endl;
00837 }
00838
00839 void IdxExprAccess::dump(std::ostream& os, IRHandlesIRInterface& pIR)
00840 {
00841 MemRefExpr::dump(os,pIR);
00842 os << "IdxExprAccess(this=" << this << ", mMemRefExpr=";
00843 getMemRefExpr()->dump(os,pIR);
00844 os << "\tmhExpr=" << mhExpr.hval() << " ) ";
00845 os << std::endl;
00846 }
00847
00848 void IdxExprAccess::dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> pIR)
00849 {
00850 dump(os,*pIR);
00851 }
00852
00853
00854
00855
00856
00857
00858 void FieldAccess::acceptVisitor(MemRefExprVisitor& pVisitor)
00859 {
00860 pVisitor.visitFieldAccess(*this);
00861 }
00862
00863 OA_ptr<MemRefExpr> FieldAccess::clone()
00864 {
00865 OA_ptr<MemRefExpr> retval;
00866 retval = new FieldAccess(*this);
00867 return retval;
00868 }
00869
00878 bool FieldAccess::operator<(MemRefExpr& other)
00879 {
00880 if(getOrder() < other.getOrder()) { return true; }
00881 else if(getOrder() > other.getOrder()) { return false; }
00882
00883
00884 FieldAccess& ref = static_cast<FieldAccess&>(other);
00885
00886 if( getMemRefExpr() < ref.getMemRefExpr() ||
00887 (getMemRefExpr() == ref.getMemRefExpr()
00888 && getFieldName() < ref.getFieldName()) )
00889 {
00890 return true;
00891 } else {
00892 return false;
00893 }
00894 }
00895
00896 bool FieldAccess::operator==(MemRefExpr& other)
00897 {
00898 if(getOrder() != other.getOrder()) { return false; }
00899
00900
00901 FieldAccess& ref = static_cast<FieldAccess&>(other);
00902
00903 if( getMemRefExpr() == ref.getMemRefExpr()
00904 && getFieldName() == ref.getFieldName() )
00905 {
00906 return true;
00907 } else {
00908 return false;
00909 }
00910 }
00911
00912 void FieldAccess::output(IRHandlesIRInterface& pIR)
00913 {
00914 sOutBuild->objStart("FieldAccess");
00915
00916 RefOp::output(pIR);
00917
00918
00919
00920
00921 sOutBuild->field("mFieldName",mFieldName);
00922
00923 sOutBuild->objEnd("FieldAccess");
00924 }
00925
00926 void FieldAccess::dump(std::ostream& os)
00927 {
00928 MemRefExpr::dump(os);
00929 os << "FieldAccess(this=" << this << ", mMemRefExpr=";
00930 getMemRefExpr()->dump(os);
00931
00932 os << "\tmFieldName=" << mFieldName << " )";
00933 os << std::endl;
00934 }
00935
00936 void FieldAccess::dump(std::ostream& os, IRHandlesIRInterface& pIR)
00937 {
00938 MemRefExpr::dump(os,pIR);
00939 os << "FieldAccess(this=" << this << ", mMemRefExpr=";
00940 getMemRefExpr()->dump(os,pIR);
00941
00942 os << "\tmFieldName()=" << mFieldName << " ) ";
00943 os << std::endl;
00944 }
00945
00946 void FieldAccess::dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> pIR)
00947 {
00948 dump(os,*pIR);
00949 }
00950
00951
00952
00953 }
00954