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 );
}
Exemple #2
0
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);
}
Exemple #3
0
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);

}
Exemple #4
0
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;
}