ActivePerStmt.cpp
Go to the documentation of this file.00001
00015 #include "ActivePerStmt.hpp"
00016
00017 namespace OA {
00018 namespace Activity {
00019
00020 ActivePerStmt::ActivePerStmt()
00021 {
00022 mNumIter = 0;
00023 }
00024
00025
00026 OA_ptr<DataFlow::LocDFSet> ActivePerStmt::getInActiveSet(StmtHandle stmt)
00027 {
00028 if (mInActive.find(stmt)!=mInActive.end()) {
00029 return mInActive[stmt];
00030 } else {
00031 OA_ptr<DataFlow::LocDFSet> emptySet;
00032 emptySet = new DataFlow::LocDFSet;
00033 return emptySet;
00034 }
00035 }
00036
00037 OA_ptr<DataFlow::LocDFSet> ActivePerStmt::getOutActiveSet(StmtHandle stmt)
00038 {
00039 if (mOutActive.find(stmt)!=mOutActive.end()) {
00040 return mOutActive[stmt];
00041 } else {
00042 OA_ptr<DataFlow::LocDFSet> emptySet;
00043 emptySet = new DataFlow::LocDFSet;
00044 return emptySet;
00045 }
00046 }
00047
00048
00049
00050
00051
00052 void ActivePerStmt::copyIntoInActive(StmtHandle s,
00053 OA_ptr<DataFlow::LocDFSet> dfset)
00054 {
00055 OA_ptr<DataFlow::DataFlowSet> cloneDFset = dfset->clone();
00056 mInActive[s] = cloneDFset.convert<DataFlow::LocDFSet>();
00057 }
00058
00059 void ActivePerStmt::copyIntoOutActive(StmtHandle s,
00060 OA_ptr<DataFlow::LocDFSet> dfset)
00061 {
00062 OA_ptr<DataFlow::DataFlowSet> cloneDFset = dfset->clone();
00063 mOutActive[s] = cloneDFset.convert<DataFlow::LocDFSet>();
00064 }
00065
00066
00067
00068
00069
00070 void ActivePerStmt::output(IRHandlesIRInterface &ir)
00071 {
00072 sOutBuild->mapStart("ActiveSets","StmtHandle","ActiveLocDFSet"); {
00073 std::map<StmtHandle, OA_ptr<DataFlow::LocDFSet> >::iterator mapIter;
00074 for (mapIter = mInActive.begin(); mapIter != mInActive.end(); mapIter++) {
00075 StmtHandle stmt = mapIter->first;
00076 OA_ptr<DataFlow::LocDFSet> inActiveSet = mapIter->second;
00077 OA_ptr<DataFlow::LocDFSet> outActiveSet = mOutActive[stmt];
00078 if (outActiveSet.ptrEqual(0)) {
00079 outActiveSet = new DataFlow::LocDFSet();
00080 }
00081 sOutBuild->mapEntryStart(); {
00082 sOutBuild->mapKeyStart(); {
00083 sOutBuild->outputIRHandle(stmt,ir);
00084 } sOutBuild->mapKeyEnd();
00085 sOutBuild->mapValueStart(); {
00086 sOutBuild->objStart("InActiveSet"); {
00087 inActiveSet->output(ir);
00088 } sOutBuild->objEnd("InActiveSet");
00089 sOutBuild->objStart("OutActiveSet"); {
00090 outActiveSet->output(ir);
00091 } sOutBuild->objEnd("OutActiveSet");
00092 } sOutBuild->mapValueEnd();
00093 } sOutBuild->mapEntryEnd();
00094 }
00095 } sOutBuild->mapEnd("ActiveSets");
00096 }
00097
00098
00099
00100
00101
00103 void ActivePerStmt::dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> ir)
00104 {
00105 os << "============================ ActivePerStmt" << std::endl;
00106
00107
00108 std::map<StmtHandle,
00109 OA_ptr<DataFlow::LocDFSet> >::iterator mapIter;
00110 for (mapIter = mInActive.begin(); mapIter != mInActive.end(); mapIter++) {
00111 StmtHandle s = mapIter->first;
00112 OA_ptr<DataFlow::LocDFSet> inActSet = mapIter->second;
00113 OA_ptr<DataFlow::LocDFSet> outActSet = mOutActive[s];
00114 if (outActSet.ptrEqual(0)) {
00115 outActSet = new DataFlow::LocDFSet();
00116 }
00117
00118 os << "StmtHandle(" << ir->toString(s) << ")"
00119 << std::endl << "\tInActive: " << std::endl;
00120 inActSet->dump(os,ir);
00121 os << "\tOutActive: " << std::endl;
00122 outActSet->dump(os,ir);
00123 }
00124 }
00125
00126
00127
00128 }
00129 }