Untitled
unknown
plain_text
5 years ago
3.4 kB
5
Indexable
#include "InterferenceGraph.h"
#include "Test.h"
#include "ResourceAllocationLib.h"
#include "Instruction.h"
#include "Constants.h"
#include <iostream>
#include <vector>
using namespace std;
static InterferenceGraph ig;
InterferenceGraph& buildInterferenceGraph(Instructions& instructions)
{
// Here goes your code.
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
//1. dobavi listu promenljivih.
ig.variables = &getVariables();
//2. podesi velicinu matrice smetnji
InterferenceMatrix interference_matrix;
//resize broja kolona
interference_matrix.resize(ig.variables->size());
//resize sve kolone (da dobijes odg. broj vrsta)
for(int i = 0; i < interference_matrix.size(); ++i)
{
interference_matrix.at(i).resize(interference_matrix.size());
}
//dodela matrice polju ig.matrix
ig.matrix = interference_matrix;
//3. treba proci kroz instrukcije
Instructions::iterator iter = instructions.begin();
for (iter; iter != instructions.end(); ++iter)
{
//treba da ne bude move
if ((*iter)->type != InstructionType::move)
{
//iteriramo po def
Variables::iterator var_iter = (*iter)->def.begin();
for(var_iter; var_iter != (*iter)->def.end(); ++var_iter)
{
//sad iteriramo kroz out
Variables::iterator var_iter_ = (*iter)->out.begin();
for(var_iter_; var_iter_ != (*iter)->out.end(); ++var_iter_)
{
//sad treba da proverimo da li ima smetnje izmedju varijabli
if((*var_iter)->pos != (*var_iter_)->pos)
{
//dodajemo smetnju u matricu smetnji
ig.matrix.at((*var_iter)->pos).at((*var_iter_)->pos) = __INTERFERENCE__;
ig.matrix.at((*var_iter_)->pos).at((*var_iter)->pos) = __INTERFERENCE__;
}
//ne treba else tj ne treba dodavati i cvorove koji nisu u smetnji
}
}
}
}
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
return ig;
}
void printInterferenceMatrix()
{
if (ig.matrix.size() == 0)
{
cout << "There is nothing to print!" << endl;
return;
}
cout << "==========================================" << endl;
cout << "Interference matrix:" << endl;
cout << "==========================================" << endl;
// print existing variables in order to mark rows and columns
for (auto varIt = ig.variables->begin(); varIt != ig.variables->end(); varIt++)
{
cout << "\t" << (*varIt)->name;
}
cout << endl;
auto varIt = ig.variables->begin();
for (auto it1 = ig.matrix.begin(); it1 != ig.matrix.end(); it1++)
{
cout << (*varIt++)->name;
for (auto it2 = (*it1).begin(); it2 != (*it1).end(); it2++)
{
cout << "\t" << *it2;
}
cout << endl;
}
cout << "==========================================" << endl;
}Editor is loading...