Advertisement
Guest User

Untitled

a guest
May 29th, 2015
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.55 KB | None | 0 0
  1. #include "LivenessAnalysis.h"
  2.  
  3.  
  4. void livenessAnalysis(Instructions instructions)
  5. {
  6.  
  7. //deo osnovnog zadatka
  8. for(auto it = instructions.rbegin(); it != instructions.rend(); it++ )
  9. {
  10. (*it)->in.clear();
  11. (*it)->out.clear();
  12. }
  13.  
  14. //in_ i out_ se moraju ovde deklarisati zbog do while
  15. Variables in_;
  16. Variables out_;
  17.  
  18.  
  19. //promenljiva za do while petlju
  20. bool state = false;
  21.  
  22. do
  23. {
  24. state = false;
  25.  
  26. //osnovni zadatak
  27. for(auto it = instructions.rbegin(); it != instructions.rend(); it++ )
  28. {
  29. in_ = (*it)->in; //kopiramo sadrzaj in liste iz instructions
  30. out_ = (*it)->out; //koriparmo -||- out -||-
  31.  
  32. //out[] <- U s succ in[s] == sve liste in koje se nalaze u listi succ
  33. //prolazimo kroz elemente liste succ
  34. for(auto succ_it = (*it)->succ.begin(); succ_it!= (*it)->succ.end(); succ_it ++)
  35. {
  36. //proalazimo kroz elemente liste in koja se nalazi u succ
  37. for(auto succ_in_it = (*succ_it)->in.begin(); succ_in_it != (*succ_it)->in.end(); succ_in_it ++)
  38. (*it)->out.push_back((*succ_in_it)); //dodajemo elemente in liste u out listu
  39. }
  40.  
  41. //nakon dodavanja moguce je da se pojave duplikati nekih promenljivih, treba ih izbaciti
  42. (*it)->out.sort(); //prvo se lista soritra
  43. (*it)->out.unique(); //pa se izbace duplikati jer unique radi samo sa sortiranom listom
  44.  
  45.  
  46. // in[n] <- use[n] U (out[n] - def[n])
  47. // (out[n] - def[n]) drugim recima: oni elementi iz out koji nisu u def
  48.  
  49. // na in prvo dodajemo use
  50. (*it)->in = (*it)->use;
  51. //prolazimo kroz sve elemente out liste
  52. for(auto out_it = (*it)->out.begin(); out_it != (*it)->out.end(); out_it ++ )
  53. {
  54. //proveravamo da li se element out liste nalazi u def
  55. //ako se ne nalazi treba dodati taj element out liste na in listu
  56. if(!variableExists((*out_it), ((*it)->def)))
  57. (*it)->in.push_back((*out_it));
  58.  
  59. }
  60.  
  61. //opet sortiranje i izbacivanje elemenata koji se ponavljaju
  62. (*it)->in.sort();
  63. (*it)->in.unique();
  64.  
  65.  
  66. //DODATNI ZADATAK
  67. //ovaj if i cela do while petlja
  68. //proveravamo suprotan slucaj od onog u pseudokodu jer je u pseudokodu repeat until
  69. // a ovde radimo sa while (repeat until nema u c++)
  70. // proveravamo da li se bar jedan od parova in_ in i out_ out razlikiju
  71. // ako se razlikiju state postaje true i ponovo ponavljamo petlju do while
  72. // ukoliko su jednaki state ostaje false i petlja se zavrsava :D
  73. if((in_!=(*it)->in) || (out_!=(*it)->out))
  74. {
  75. state = true;
  76. }
  77.  
  78.  
  79. }
  80.  
  81.  
  82.  
  83.  
  84. }while (state);
  85.  
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement