Advertisement
Lauda

Untitled

Jun 7th, 2013
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.62 KB | None | 0 0
  1. bool doResourceAllocation(stack<Variable*>* simplificationStack, InterferenceGraph* ig)
  2. {
  3.     vector<Variable*> promenjive;
  4.     for (Variables::const_iterator it=ig->variables->begin(); it!=ig->variables->end(); ++it)
  5.         promenjive.push_back(*it);
  6.  
  7.     sort(promenjive.begin(),promenjive.end()); // Sortiramo vektor: cba -> abc
  8.  
  9.     while (!simplificationStack->empty()) //uzimamo jedan po jedan cvor sa steka i "bojimo ga
  10.     {
  11.         bool foundReg = false;
  12.         vector<Regs> used;
  13.         Variable *a = simplificationStack->top(); // Pristupamo sledecem elementu
  14.         simplificationStack->pop(); // Skidamo sa vrha element
  15.  
  16.         for (int i=0; i < ig->size; i++)
  17.             if (ig->values[a->pos][i] == __INTERFERENCE__) // ako je element na preseku kolone(tekuci el.) i vrste(neki vec prethodno obojeni cvor)
  18.                                                                     // jednak __INTERFERENCE__ to znaci da su ta 2 cvora u smetnji(u toj celiji matrice je __INTERFERENCE__)
  19.                 if ((promenjive[i]->assigment)!=-1)
  20.                     used.push_back((Regs)promenjive[i]->assigment);
  21.  
  22.         for (int i=0; i<=__REG_NUMBER__; i++)
  23.         {
  24.             Regs tmp = (Regs)i;
  25.             if (find(used.begin(), used.end(), tmp) == used.end())
  26.             {
  27.                 a->assigment = (Regs)i;
  28.                 foundReg = true;
  29.                 break;
  30.             }
  31.         }
  32.  
  33.         if (!foundReg)
  34.             return false;
  35.     }
  36.     return true;
  37. }
  38.  
  39.  
  40. Instructions* removeMove(Instructions* instrs)
  41. {
  42.     // ovo je dodatni zadatak
  43.     Variable* v;
  44.     for (Instructions::const_iterator it = instrs->begin(); it!=instrs->end(); ++it)
  45.     {
  46.         if ((*it)->type == T_MOVE)
  47.             if (((*it)->src1->assigment == (*it)->dst->assigment) && ((*it)->src2 == NULL))
  48.             {
  49.                 instrs->remove((*it));
  50.                 return instrs;
  51.             }
  52.     }
  53.     return instrs;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement