mretest.cpp

Go to the documentation of this file.
00001 
00015 #include <iostream>
00016 #include "MemRefExpr.hpp"
00017 #include <OpenAnalysis/IRInterface/IRHandles.hpp>
00018 
00019 class TestIRInterface : public virtual OA::IRHandlesIRInterface {
00020 
00021 public:
00022   TestIRInterface() {}
00023   virtual ~TestIRInterface() {}
00024 
00025   //--------------------------------------------------------
00026   // create a string for the given handle, should be succinct
00027   // and there should be no newlines
00028   //--------------------------------------------------------  
00029   std::string toString(const OA::ProcHandle h) { return ""; }
00030   std::string toString(const OA::StmtHandle h) 
00031     { std::ostringstream os; os << "StmtHandle(" << h.hval() << ")"; return os.str(); } 
00032   std::string toString(const OA::ExprHandle h) { return ""; }
00033   std::string toString(const OA::CallHandle h) { return ""; }
00034   std::string toString(const OA::OpHandle h) { return ""; }
00035   std::string toString(const OA::MemRefHandle h) { return ""; }
00036   std::string toString(const OA::SymHandle h)
00037     { std::ostringstream os; os << "SymHandle(" << h.hval() << ")"; return os.str(); } 
00038   std::string toString(const OA::ConstSymHandle h) { return ""; }
00039   std::string toString(const OA::ConstValHandle h) { return ""; }
00040 
00041   //--------------------------------------------------------
00042   // dumps that do pretty prints
00043   //--------------------------------------------------------  
00044 
00046   void dump(OA::MemRefHandle h, std::ostream& os) {}
00047 
00049   void dump(OA::StmtHandle stmt, std::ostream& os) {}
00050 
00051   
00052   //--------------------------------------------------------
00053   // Other
00054   //--------------------------------------------------------  
00055   // FIXME: should eventually get rid of this
00056   void currentProc(OA::ProcHandle p) {}
00057 };
00058 
00059 
00060 int main() {
00061     OA::OA_ptr<TestIRInterface> ir;
00062     ir = new TestIRInterface;
00063 
00064 
00065     std::list<OA::OA_ptr<OA::MemRefExpr> > mList; 
00066 
00067     OA::StmtHandle stmt1(1);
00068     OA::StmtHandle stmt2(2);
00069     OA::SymHandle sym1(1);
00070     OA::SymHandle sym2(2);
00071     OA::MemRefHandle mhandle1(1);
00072     OA::MemRefHandle mhandle2(2);
00073     std::string string1("string1");
00074     std::string string2("string2");
00075 
00076     // build a ref of each kind and dump it
00077     std::cout << "===== NamedRef =====" << std::endl;
00078     OA::OA_ptr<OA::NamedRef> namedRef1;
00079     namedRef1 = new OA::NamedRef(OA::MemRefExpr::USE, sym1);
00080     std::cout << "== dump ==" << std::endl;
00081     namedRef1->dump(std::cout,ir);
00082     std::cout << std::endl;
00083     //std::cout << "== output ==" << std::endl;
00084     //namedRef1->output(*ir);
00085     //std::cout << std::endl;
00086     //std::cout << "isaNamed() = " << namedRef1->isaNamed() << std::endl;
00087     //std::cout << "isaUnknown() = " << namedRef1->isaUnknown() << std::endl;
00088     //std::cout << "====================" << std::endl << std::endl;
00089     mList.push_back(namedRef1);
00090 
00091 
00092     std::cout << "===== NamedRef =====" << std::endl;
00093     OA::OA_ptr<OA::NamedRef> namedRef2;
00094     namedRef2 = new OA::NamedRef(OA::MemRefExpr::USE, sym2);
00095     std::cout << "== dump ==" << std::endl;
00096     namedRef2->dump(std::cout,ir);
00097     std::cout << std::endl;    
00098     //std::cout << "== output ==" << std::endl;
00099     //namedRef2->output(*ir);
00100     //std::cout << std::endl;
00101     //std::cout << "isaNamed() = " << namedRef2->isaNamed() << std::endl;
00102     //std::cout << "isaUnknown() = " << namedRef2->isaUnknown() << std::endl;
00103     //std::cout << "====================" << std::endl << std::endl;
00104     mList.push_back(namedRef2);
00105 
00106     
00107     std::cout << "===== NamedRef =====" << std::endl;
00108     OA::OA_ptr<OA::NamedRef> namedRef3;
00109     namedRef3 = new OA::NamedRef(OA::MemRefExpr::USE, sym1);
00110     std::cout << "== dump ==" << std::endl;
00111     namedRef3->dump(std::cout,ir);
00112     std::cout << std::endl;
00113     //std::cout << "== output ==" << std::endl;
00114     //namedRef3->output(*ir);
00115     //std::cout << std::endl;
00116     //std::cout << "isaNamed() = " << namedRef3->isaNamed() << std::endl;
00117     //std::cout << "isaRefOp() = " << namedRef3->isaRefOp() << std::endl;
00118     //std::cout << "====================" << std::endl << std::endl;
00119     mList.push_back(namedRef3);
00120 
00121     
00122     std::cout << "===== UnnamedRef =====" << std::endl;
00123     OA::ExprHandle hm=OA::ExprHandle((OA::irhandle_t)stmt1);
00124     OA::OA_ptr<OA::UnnamedRef> unnamedRef;
00125     unnamedRef = new OA::UnnamedRef(OA::MemRefExpr::DEF, hm);
00126     std::cout << "== dump ==" << std::endl;
00127     unnamedRef->dump(std::cout,ir);
00128     std::cout << std::endl;
00129     //std::cout << "== output ==" << std::endl;
00130     //unnamedRef->output(*ir);
00131     //std::cout << std::endl;
00132     //std::cout << "isaNamed() = " << unnamedRef->isaNamed() << std::endl;
00133     //std::cout << "isaUnnamed() = " << unnamedRef->isaUnnamed() << std::endl;
00134     //std::cout << "==========================================" 
00135     //          << std::endl << std::endl;
00136     mList.push_back(unnamedRef);
00137     
00138 
00139     std::cout << "===== UnKnownRef =====" << std::endl;
00140     OA::OA_ptr<OA::MemRefExpr::MemRefExpr> unknownRef;
00141     unknownRef = new OA::UnknownRef(OA::MemRefExpr::USE);
00142     std::cout << "== dump ==" << std::endl << std::endl;
00143     unknownRef->dump(std::cout,ir);
00144     std::cout << std::endl;
00145     //std::cout << "== output ==" << std::endl << std::endl;
00146     //unknownRef->output(*ir);
00147     //std::cout << std::endl;
00148     //std::cout << "isaNamed() = " << unknownRef->isaNamed() << std::endl;
00149     //std::cout << "isaUnknown() = " << unknownRef->isaUnknown() << std::endl;
00150     //std::cout << "isaRefOp() = " << unknownRef->isaRefOp() << std::endl;
00151     //std::cout << "==========================================" 
00152     //          << std::endl << std::endl;
00153     mList.push_back(unknownRef);
00154 
00155     //*****************************************************************
00156     // RefOp decorator
00157     //*****************************************************************
00158     OA::OA_ptr<OA::Deref> derefMRE3;
00159     derefMRE3 = new OA::Deref(OA::MemRefExpr::USE, namedRef3, 2);
00160     mList.push_back(derefMRE3);
00161     OA::OA_ptr<OA::Deref> derefMRE1;
00162     derefMRE1 = new OA::Deref(OA::MemRefExpr::USE, namedRef1, 2);
00163     mList.push_back(derefMRE1);
00164 
00165 
00166     std::cout << "===== Deref =====" << std::endl << std::endl;
00167     std::cout << "== derefMRE3 dump ==" << std::endl << std::endl;
00168     derefMRE3->dump(std::cout,ir);
00169     std::cout << std::endl;
00170     //std::cout << "== output ==" << std::endl << std::endl;
00171     //derefMRE3->output(*ir);
00172     //std::cout << std::endl;
00173     std::cout << "== derefMRE1 dump ==" << std::endl << std::endl;
00174     derefMRE1->dump(std::cout,ir);
00175     std::cout << std::endl;
00176  
00177 
00178     //derefMRE3->setPartialAccuracy();
00179     OA::OA_ptr<OA::SubSetRef> subset_mre;
00180     OA::OA_ptr<OA::MemRefExpr> nullMRE;
00181     OA::OA_ptr<OA::MemRefExpr> subset_derefMRE3, subset_derefMRE1;
00182 
00183     subset_mre = new OA::SubSetRef(
00184                                  OA::MemRefExpr::USE,
00185                                  nullMRE
00186                                 );
00187     subset_derefMRE3 = subset_mre->composeWith(derefMRE3->clone());
00188     mList.push_back(subset_derefMRE3);
00189     
00190 
00191     std::cout << "Now should be false:" << std::endl << std::endl;
00192     derefMRE3->dump(std::cout,ir);
00193     std::cout << "(derefMRE3 == derefMRE1) = " << (*derefMRE3==*derefMRE1)
00194               << std::endl << std::endl;
00195 
00196     //derefMRE1->setPartialAccuracy();
00197     subset_mre = new OA::SubSetRef(
00198                                  OA::MemRefExpr::USE,
00199                                  nullMRE
00200                                 );
00201     subset_derefMRE1 = subset_mre->composeWith(derefMRE1->clone());
00202     mList.push_back(subset_derefMRE1);
00203     
00204 
00205     OA::OA_ptr<OA::IdxAccess> idxAccess3;
00206     idxAccess3 = new OA::IdxAccess(OA::MemRefExpr::USE,subset_derefMRE3,5);
00207     OA::OA_ptr<OA::IdxAccess> idxAccess1;
00208     idxAccess1 = new OA::IdxAccess(OA::MemRefExpr::USE,subset_derefMRE1,5);
00209     OA::OA_ptr<OA::IdxAccess> idxAccessX;
00210     idxAccessX = new OA::IdxAccess(OA::MemRefExpr::USE,subset_derefMRE1,6);
00211     std::cout << "== idxAccess3 dump ==" << std::endl << std::endl;
00212     idxAccess3->dump(std::cout,ir);
00213     std::cout << std::endl;
00214     std::cout << "== idxAccess1 dump ==" << std::endl << std::endl;
00215     idxAccess1->dump(std::cout,ir);
00216     std::cout << std::endl;
00217     std::cout << "== idxAccessX dump ==" << std::endl << std::endl;
00218     idxAccessX->dump(std::cout,ir);
00219     std::cout << std::endl;
00220     //std::cout << "== idxAccessX output ==" << std::endl << std::endl;
00221     //idxAccessX->output(*ir);
00222     //std::cout << std::endl;
00223 
00224     mList.push_back(idxAccess3);
00225     mList.push_back(idxAccess1);
00226     mList.push_back(idxAccessX);
00227 
00228     
00229     // IdxExprAccess
00230     OA::OA_ptr<OA::IdxExprAccess> idxExprAccess3;
00231 
00232     idxExprAccess3 
00233        = new OA::IdxExprAccess(OA::MemRefExpr::USE,subset_derefMRE3,mhandle1);
00234     OA::OA_ptr<OA::IdxExprAccess> idxExprAccess1;
00235     idxExprAccess1 
00236        = new OA::IdxExprAccess(OA::MemRefExpr::USE,subset_derefMRE1,mhandle1);
00237     OA::OA_ptr<OA::IdxExprAccess> idxExprAccessX;
00238     idxExprAccessX 
00239        = new OA::IdxExprAccess(OA::MemRefExpr::USE,subset_derefMRE1,mhandle2);
00240     std::cout << "== idxExprAccess3 dump ==" << std::endl << std::endl;
00241     idxExprAccess3->dump(std::cout,ir);
00242     std::cout << std::endl;
00243     std::cout << "== idxExprAccess1 dump ==" << std::endl << std::endl;
00244     idxExprAccess1->dump(std::cout,ir);
00245     std::cout << std::endl;
00246     std::cout << "== idxExprAccessX dump ==" << std::endl << std::endl;
00247     idxExprAccessX->dump(std::cout,ir);
00248     std::cout << std::endl;
00249     //std::cout << "== idxExprAccessX output ==" << std::endl << std::endl;
00250     //idxExprAccessX->output(*ir);
00251     //std::cout << std::endl;
00252     mList.push_back(idxExprAccess3);
00253     mList.push_back(idxExprAccess1);
00254     mList.push_back(idxExprAccessX);
00255 
00256     
00257     //FieldAccess
00258     OA::OA_ptr<OA::FieldAccess> fieldAccess3;
00259     fieldAccess3 = new OA::FieldAccess(OA::MemRefExpr::USE,subset_derefMRE3,string1);
00260     OA::OA_ptr<OA::FieldAccess> fieldAccess1;
00261     fieldAccess1 = new OA::FieldAccess(OA::MemRefExpr::USE,subset_derefMRE1,string1);
00262     OA::OA_ptr<OA::FieldAccess> fieldAccessX;
00263     fieldAccessX = new OA::FieldAccess(OA::MemRefExpr::USE,subset_derefMRE1,string2);
00264     std::cout << "== fieldAccess3 dump ==" << std::endl << std::endl;
00265     fieldAccess3->dump(std::cout,ir);
00266     std::cout << std::endl;
00267     std::cout << "== fieldAccess1 dump ==" << std::endl << std::endl;
00268     fieldAccess1->dump(std::cout,ir);
00269     std::cout << std::endl;
00270     std::cout << "== fieldAccessX dump ==" << std::endl << std::endl;
00271     fieldAccessX->dump(std::cout,ir);
00272     std::cout << std::endl;
00273     //std::cout << "== fieldAccessX output ==" << std::endl << std::endl;
00274     //fieldAccessX->output(*ir);
00275     //std::cout << std::endl;
00276     mList.push_back(fieldAccess3);
00277     mList.push_back(fieldAccess1);
00278     mList.push_back(fieldAccessX);
00279 
00280 
00281 
00282     // MemRefExpr1
00283     // MemRefExpr(this=0xaa11830, type = USE)
00284     // Deref(this=0xaa11830, mMemRefExpr=MemRefExpr(this=0xa8c59b0, type = USE) 
00285     //   FieldAccess(this=0xa8c59b0, mMemRefExpr=MemRefExpr(this=0xa8c58e0, type = USE) 
00286     //     SubSetRef(this=0xa8c58e0, mMemRefExpr=MemRefExpr(this=0xa8c58c0, type = USE)  
00287     //       NamedRef(this=0xa8c58c0, mSymHandle.hval()=171680520)))
00288     //         mNumDerefs = 1 )
00289 
00290     OA::OA_ptr<OA::MemRefExpr> subSetRefMRE4;
00291     subSetRefMRE4 = subset_mre->composeWith(namedRef1->clone());
00292     OA::OA_ptr<OA::FieldAccess> fieldAccess4;
00293     fieldAccess4 = new OA::FieldAccess(OA::MemRefExpr::USE,subSetRefMRE4,string1);
00294     OA::OA_ptr<OA::Deref> derefMRE4;
00295     derefMRE4 = new OA::Deref(OA::MemRefExpr::USE, fieldAccess4, 1);
00296     std::cout << "== derefMRE4 dump ==" << std::endl << std::endl;
00297     derefMRE4->dump(std::cout,ir);
00298     std::cout << std::endl;
00299     mList.push_back(derefMRE4);
00300 
00301 
00302     
00303     // MemRefExpr2
00304     // MemRefExpr(this=0xaa21ff8, type = USE)
00305     //   SubSetRef(this=0xaa21ff8, mMemRefExpr=MemRefExpr(this=0xa8c02e0, type = USE)  
00306     //     Deref(this=0xa8c02e0, mMemRefExpr=MemRefExpr(this=0xa8c0258, type = USE)  
00307     //       FieldAccess(this=0xa8c0258, mMemRefExpr=MemRefExpr(this=0xa8c01c8, type = USE) 
00308     //         SubSetRef(this=0xa8c01c8, mMemRefExpr=MemRefExpr(this=0xa8c01a8, type = USE)  
00309     //           NamedRef(this=0xa8c01a8, mSymHandle.hval()=171680520)
00310     OA::OA_ptr<OA::MemRefExpr> subSetRefMRE5;
00311     subSetRefMRE5 = subset_mre->composeWith(derefMRE4->clone());
00312     std::cout << "== subSetRefMRE5 dump ==" << std::endl << std::endl;
00313     subSetRefMRE5->dump(std::cout,ir);
00314     std::cout << std::endl;
00315     mList.push_back(subSetRefMRE5);
00316 
00317 
00318     // MemRefExpr3
00319     // MemRefExpr(this=0xaa11950, type = USE) 
00320     //   Deref(this=0xaa11950, mMemRefExpr=MemRefExpr(this=0xa8c0258, type = USE)
00321     //     FieldAccess(this=0xa8c0258, mMemRefExpr=MemRefExpr(this=0xa8c01c8, type = USE) 
00322     //       SubSetRef(this=0xa8c01c8, mMemRefExpr=MemRefExpr(this=0xa8c01a8, type = USE) 
00323     //         NamedRef(this=0xa8c01a8, mSymHandle.hval()=171680520)
00324     OA::OA_ptr<OA::MemRefExpr> subSetRefMRE6;
00325     subSetRefMRE6 = subset_mre->composeWith(namedRef1->clone());
00326     OA::OA_ptr<OA::FieldAccess> fieldAccess6;
00327     fieldAccess6 = new OA::FieldAccess(OA::MemRefExpr::USE,subSetRefMRE6,string1);
00328     OA::OA_ptr<OA::Deref> derefMRE6;
00329     derefMRE6 = new OA::Deref(OA::MemRefExpr::USE, fieldAccess6, 1);
00330     std::cout << "== derefMRE6 dump ==" << std::endl << std::endl;
00331     derefMRE6->dump(std::cout,ir);
00332     std::cout << std::endl;
00333     mList.push_back(derefMRE6);
00334 
00335    
00336     // MemRefExpr4
00337     // MemRefExpr(this=0xaa22010, type = DEF)
00338     //   SubSetRef(this=0xaa22010, mMemRefExpr=MemRefExpr(this=0xa86e590, type = USE)
00339     //     Deref(this=0xa86e590, mMemRefExpr=MemRefExpr(this=0xa373fd0, type = USE) 
00340     //       NamedRef(this=0xa373fd0, mSymHandle.hval()=171669608)
00341     //         mNumDerefs = 1 ))
00342     // same as subset_derefMRE1.
00343     std::cout << "== subset_derefMRE1 dump ==" << std::endl << std::endl;
00344     subset_derefMRE1->dump(std::cout,ir);
00345     std::cout << std::endl;
00346     mList.push_back(subset_derefMRE1);
00347 
00348     
00349     // MemRefExpr5
00350     // SubSetRef( USE, 
00351     //   Deref( USE, 
00352     //     FieldAccess( USE, 
00353     //       Deref( USE, 
00354     //         NamedRef( USE, SymHandle("node")), 1), basic_arc), 1))
00355     OA::OA_ptr<OA::FieldAccess> fieldAccess7;
00356     fieldAccess7 = new OA::FieldAccess(OA::MemRefExpr::USE,derefMRE1,string1);
00357     OA::OA_ptr<OA::Deref> derefMRE7;
00358     derefMRE7 = new OA::Deref(OA::MemRefExpr::USE, fieldAccess7, 1);
00359     OA::OA_ptr<OA::MemRefExpr> subSetRefMRE7;
00360     subSetRefMRE7 = subset_mre->composeWith(derefMRE7->clone());
00361     std::cout << "== subSetRefMRE7 dump ==" << std::endl << std::endl;
00362     subSetRefMRE7->dump(std::cout,ir);
00363     std::cout << std::endl;
00364     mList.push_back(subSetRefMRE7);
00365 
00366     // MemRefExpr6
00367     // FieldAccess( DEF, 
00368     //   SubSetRef( USE, 
00369     //     Deref( USE, 
00370     //       NamedRef( USE, SymHandle("new")), 1)), head)
00371     OA::OA_ptr<OA::FieldAccess> fieldAccess8;
00372     fieldAccess8 = new OA::FieldAccess(OA::MemRefExpr::USE,subset_derefMRE1,string1);
00373     std::cout << "== fieldAccess8 dump ==" << std::endl << std::endl;
00374     fieldAccess8->dump(std::cout,ir);
00375     std::cout << std::endl;
00376     mList.push_back(fieldAccess8);
00377 
00378 
00379     // MemRefExpr7
00380     // FieldAccess( USE, 
00381     //   SubSetRef( USE, 
00382     //     Deref( USE, 
00383     //       FieldAccess( USE, 
00384     //         Deref( USE, 
00385     //           NamedRef( USE, SymHandle("arcout")), 1), head), 1)), firstout)
00386 
00387     OA::OA_ptr<OA::FieldAccess> fieldAccess9;
00388     fieldAccess9 = new OA::FieldAccess(OA::MemRefExpr::USE,subSetRefMRE7,string1);
00389     std::cout << "== fieldAccess9 dump ==" << std::endl << std::endl;
00390     fieldAccess9->dump(std::cout,ir);
00391     std::cout << std::endl;
00392     mList.push_back(fieldAccess9);
00393 
00394 
00395     // MemRefExpr8
00396     // FieldAccess( DEF, 
00397     //   SubSetRef( USE, 
00398     //     Deref( USE, 
00399     //       FieldAccess( USE, 
00400     //         SubSetRef( USE, 
00401     //           Deref( USE, 
00402     //             FieldAccess( USE, 
00403     //               SubSetRef( USE, 
00404     //                 Deref( USE, 
00405     //                   FieldAccess( USE, 
00406     //                     Deref( USE, NamedRef( USE, 
00407     //                       SymHandle("arcout")), 1), head), 1)), firstout), 1)), head), 1)), arc_tmp)
00408     OA::OA_ptr<OA::Deref> derefMRE10;
00409     derefMRE10 = new OA::Deref(OA::MemRefExpr::USE, fieldAccess9->clone(), 1);
00410     OA::OA_ptr<OA::MemRefExpr> subSetRefMRE10;
00411     subSetRefMRE10 = subset_mre->composeWith(derefMRE10->clone());
00412     OA::OA_ptr<OA::FieldAccess> fieldAccess10;
00413     fieldAccess10 = new OA::FieldAccess(OA::MemRefExpr::USE,subSetRefMRE10,string1);
00414     derefMRE10 = new OA::Deref(OA::MemRefExpr::USE, fieldAccess10->clone(), 1);
00415     subSetRefMRE10 = subset_mre->composeWith(derefMRE10->clone());
00416     fieldAccess10 = new OA::FieldAccess(OA::MemRefExpr::USE,subSetRefMRE10,string1);
00417     std::cout << "== fieldAccess10 dump ==" << std::endl << std::endl;
00418     fieldAccess10->dump(std::cout,ir);
00419     std::cout << std::endl; 
00420     mList.push_back(fieldAccess10);
00421 
00422 
00423     
00424 
00425     // MemRefExpr9
00426     // IdxExprAccess( USE,
00427     //   SubSetRef( USE,
00428     //     NamedRef( USE,
00429     //       SymHandle("perm"))), MemRefHandle("i"))
00430     OA::OA_ptr<OA::IdxExprAccess> idxExprAccess11;
00431     idxExprAccess11 = new OA::IdxExprAccess(OA::MemRefExpr::USE,subSetRefMRE6,mhandle1);
00432     std::cout << "== idxExprAccess11 dump ==" << std::endl << std::endl;
00433     idxExprAccess11->dump(std::cout,ir);
00434     std::cout << std::endl;
00435     mList.push_back(idxExprAccess11);
00436 
00437 
00438     // MemRefExpr10
00439     // FieldAccess( USE, 
00440     //   SubSetRef( USE, 
00441     //     Deref( USE, 
00442     //       IdxExprAccess( USE, 
00443     //         SubSetRef( USE, 
00444     //           NamedRef( USE, SymHandle("perm"))), MemRefHandle("1")), 1)), cost)
00445     OA::OA_ptr<OA::Deref> derefMRE11;
00446     derefMRE11 = new OA::Deref(OA::MemRefExpr::USE, idxExprAccess11->clone(), 1);
00447     OA::OA_ptr<OA::MemRefExpr> subSetRefMRE11;
00448     subSetRefMRE11 = subset_mre->composeWith(derefMRE11->clone());
00449     OA::OA_ptr<OA::FieldAccess> fieldAccess11;
00450     fieldAccess11 = new OA::FieldAccess(OA::MemRefExpr::USE,subSetRefMRE11->clone(),string1);
00451     std::cout << "== fieldAccess11 dump ==" << std::endl << std::endl;
00452     fieldAccess11->dump(std::cout,ir);
00453     std::cout << std::endl;
00454     mList.push_back(fieldAccess11);
00455 
00456     std::cout << std::endl << std::endl << std::endl << std::endl;
00457 
00458     std::cout << "================================================"
00459               << std::endl;
00460     
00461     std::cout << "Start comparision operators <,==" << std::endl;
00462 
00463     std::list<OA::OA_ptr<OA::MemRefExpr> >::iterator mIter1;
00464     std::list<OA::OA_ptr<OA::MemRefExpr> >::iterator mIter2;
00465 
00466     for(mIter1 = mList.begin(); mIter1 != mList.end(); ++mIter1) {
00467         OA::OA_ptr<OA::MemRefExpr> mreA = *mIter1; 
00468         for(mIter2 = mList.begin(); mIter2 != mList.end(); ++mIter2) {
00469             std::cout << "==============================================" 
00470                       << std::endl;
00471             OA::OA_ptr<OA::MemRefExpr> mreB = *mIter2;
00472             std::cout << std::endl << "\tmre A = ";
00473             mreA->output(*ir);
00474             std::cout << std::endl;
00475             std::cout << std::endl << "\tmre B = ";
00476             mreB->output(*ir);
00477             std::cout << std::endl;
00478             std::cout << "A < B            :" << (mreA<mreB) << std::endl;
00479             std::cout << "B < A            :" << (mreB<mreA) << std::endl;
00480             std::cout << "A == B           :" << (mreA==mreB) << std::endl;
00481             std::cout << "B == A           :" << (mreB==mreA) << std::endl;
00482             std::cout << "(A==B) == (B==A) :"
00483                       << ((mreA == mreB) == (mreB == mreA))
00484                       << std::endl;
00485             
00486             int AlessthanB = (mreA<mreB);
00487             int BlessthanA = (mreB<mreA);
00488             int AequaltoB  = (mreA==mreB);
00489 
00490             if((AlessthanB + BlessthanA + AequaltoB) != 1) {
00491                 std::cout << "more than one of (A<B B<A and A==B) are true" 
00492                           << std::endl;
00493                 assert(0);
00494             } 
00495 
00496 
00497             if((mreA == mreB) != (mreB == mreA)) {
00498                 std::cout << "(mreA == mreB) != (mreB == mreA)"
00499                           << std::endl;
00500                 assert(0);
00501             }
00502 
00503             std::cout << "==============================================="
00504                       << std::endl;
00505         }
00506     }
00507  
00508     std::cout << "End comparision operators <,==" << std::endl;
00509     std::cout << "================================================"
00510               << std::endl;
00511 
00512     return 0;
00513 }
00514 
00515 
00516 

Generated on Sat Oct 31 05:21:24 2009 for OpenAnalysis by  doxygen 1.6.1