void WikiAreaPages::createAreaPages_createConnectivityTableSection( MindArea *area , MindLocalCircuitDef& circuit , StringList& lines ) { MapStringToClass<MindLocalCircuitConnectionDef> connections; if( !area -> isTargetArea() ) { // internal connections lines.add( "" ); lines.add( "*Internal Region Connections:*" ); createAreaPages_getInternalConnections( area , circuit , connections ); createAreaPages_addInternalConnections( area , circuit , lines , connections ); } // external connections - in lines.add( "" ); lines.add( "*External Inbound Region Connections:*" ); MapStringToClass<MindLocalCircuitConnectionDef> connectionsInputs; createAreaPages_getExternalConnections( area , circuit , connectionsInputs , true ); createAreaPages_addExternalConnections( area , circuit , lines , connectionsInputs , true ); // external connections - out lines.add( "" ); lines.add( "*External Outbound Region Connections:*" ); MapStringToClass<MindLocalCircuitConnectionDef> connectionsOutputs; createAreaPages_getExternalConnections( area , circuit , connectionsOutputs , false ); createAreaPages_addExternalConnections( area , circuit , lines , connectionsOutputs , false ); // create dot file createDotFile( area , circuit , connections , connectionsInputs , connectionsOutputs ); }
void ReachingDefAna::ComputeDestInstList(){ for( list<BasicBlock*>::iterator it = pr->get_begin(), end = pr->get_end(); it != end; ++it){ for( list<instruction*>::iterator instIt = (*it)->get_begin_inst(), instEnd = (*it)->get_end_inst(); instIt != instEnd; ++instIt){ if( isDefInst((*instIt)->get_opcodeno())){ dIList[(*instIt)->get_destination_operand()].push_back(*instIt); } } } int bitnumber = 0; for(map<operand*,list<instruction*> >::iterator it = dIList.begin(),end=dIList.end(); it != end; ++it){ list<instruction*> tlist = it->second; DestTable[(it->first)].push_back(tlist.size());//Total no. of definitions DestTable[(it->first)].push_back(bitnumber);//start bit no. for(list<instruction*>::iterator it = tlist.begin(), end = tlist.end(); it != end; ++it){ instBitTable[*it] = bitnumber; bitInstTable[bitnumber] = *it; ++bitnumber; } DestTable[(it->first)].push_back(bitnumber-1);//end bit no. } //Initialize cout<<"##Initialization\n"; for( list<BasicBlock*>::iterator it = pr->get_begin(), end = pr->get_end(); it != end; ++it){ (*it)->bitResize(bitnumber); (*it)->initBitToZero(bitnumber); printBB((*it)); } string tst("initialization"); createDotFile(tst); }
void ReachingDefAna::ComputeINOUTIterative(){ BasicBlock* entry = *pr->get_begin(); bool changed = true; int i = 0; do{ map <BasicBlock*,bool> visitedFlag; queue <BasicBlock*> toVisit; toVisit.push(entry); visitedFlag[entry] = true; cout<<"\n## Iteration "<<i++<<" ##\n"; while(!toVisit.empty()){ BasicBlock* cBB = toVisit.front(); toVisit.pop(); for(list<BasicBlock*>::iterator it = cBB->get_begin_succ(), end = cBB->get_end_succ(); it != end; ++it){ if(visitedFlag.find(*it) == visitedFlag.end()){ toVisit.push(*it); visitedFlag[*it] = true; } } bitvec in = cBB->getIn(); bitvec out = cBB->getOut(); bitvec tin(in.getSize()); bitvec tout(out.getSize()); for(list<BasicBlock*>::iterator pit = cBB->get_begin_pred(), pend = cBB->get_end_pred(); pit != pend; ++pit){ tin = tin | (*pit)->getOut(); } tout = tin - cBB->getKill(); tout = tout | cBB->getGen(); if( (in == tin) && (out == tout) ) changed = false; else{ changed = true; cBB->setIn(tin); cBB->setOut(tout); } printBB(cBB); } //ts.append("1"); string ts("Iteration"); createDotFile(ts.append(std::to_string(i))); }while(changed); }
void ReachingDefAna::ComputeINOUTWtList(){ map <BasicBlock*,bool> visitedFlag; queue <BasicBlock*> toVisit; for( list<BasicBlock*>::iterator it = pr->get_begin(), end = pr->get_end(); it != end; ++it){ toVisit.push(*it); visitedFlag[*it] = true; } while( !toVisit.empty() ){ BasicBlock* cBB = toVisit.front(); cout << "\n::VISITING " << cBB->getBBLabel() << " ::\n"; toVisit.pop(); visitedFlag[cBB] = false; bitvec in = cBB->getIn(); bitvec out = cBB->getOut(); bitvec tin(in.getSize()); bitvec tout(out.getSize()); for(list<BasicBlock*>::iterator pit = cBB->get_begin_pred(), pend = cBB->get_end_pred(); pit != pend; ++pit){ tin = tin | (*pit)->getOut(); } tout = tin - cBB->getKill(); tout = tout | cBB->getGen(); cBB->setIn(tin); if( out != tout ){ cBB->setOut(tout); for(list<BasicBlock*>::iterator it = cBB->get_begin_succ(), end = cBB->get_end_succ(); it != end; ++it){ if(visitedFlag[*it] == false){ visitedFlag[*it] = true; toVisit.push(*it); } } } printBB(cBB); } string ts("ReachingDefWtList"); createDotFile(ts); }
/** * generate layout and apply it to the given diagram. * * @return true if generating succeeded */ bool LayoutGenerator::generate(UMLScene *scene, const QString &variant) { QTemporaryFile in; QTemporaryFile out; QTemporaryFile xdotOut; if (!isEnabled()) { uWarning() << "Could not apply autolayout because graphviz installation has not been found."; return false; } #ifdef LAYOUTGENERATOR_DEBUG in.setAutoRemove(false); out.setAutoRemove(false); xdotOut.setAutoRemove(false); #endif // generate filenames in.open(); in.close(); out.open(); out.close(); xdotOut.open(); xdotOut.close(); #ifdef LAYOUTGENERATOR_DEBUG qDebug() << textViewer() << in.fileName(); qDebug() << textViewer() << out.fileName(); qDebug() << textViewer() << xdotOut.fileName(); #endif if (!createDotFile(scene, in.fileName(), variant)) return false; QString executable = m_dotPath + QLatin1Char('/') + m_generator; QProcess p; QStringList args; args << QLatin1String("-o") << out.fileName() << QLatin1String("-Tplain-ext") << in.fileName(); p.start(executable, args); p.waitForFinished(); args.clear(); args << QLatin1String("-o") << xdotOut.fileName() << QLatin1String("-Txdot") << in.fileName(); p.start(executable, args); p.waitForFinished(); #ifdef LAYOUTGENERATOR_DEBUG QTemporaryFile pngFile; pngFile.setAutoRemove(false); pngFile.setFileTemplate(QDir::tempPath() + QLatin1String("/umbrello-layoutgenerator-XXXXXX.png")); pngFile.open(); pngFile.close(); qDebug() << pngViewer() << pngFile.fileName(); args.clear(); args << QLatin1String("-o") << pngFile.fileName() << QLatin1String("-Tpng") << in.fileName(); p.start(executable, args); p.waitForFinished(); #endif #ifndef USE_XDOT if (!readGeneratedDotFile(out.fileName())) #else if (!readGeneratedDotFile(xdotOut.fileName())) #endif return false; return true; }