Differences

This shows you the differences between two versions of the page.

Link to this comparison view

cpl:labs-draft:11 [2016/12/19 23:37]
bogdan.nitulescu [Exercițiul 3]
cpl:labs-draft:11 [2016/12/20 01:58] (current)
bogdan.nitulescu [Exerciții de laborator (15p)]
Line 111: Line 111:
 [[http://​llvm.org/​docs/​ProgrammersManual.html#​dss-bitvector|Aici]] este o scurtă descriere a structurii de date BitVector folosită la exerciţiul 3. [[http://​llvm.org/​docs/​ProgrammersManual.html#​dss-bitvector|Aici]] este o scurtă descriere a structurii de date BitVector folosită la exerciţiul 3.
  
-====== Exerciții de laborator (10p) ======+====== Exerciții de laborator (15p) ======
  
 <​note>​ <​note>​
 Laboratorul este compus dintr-o exerciții practice care includ analiza formei SSA și implementarea unor optimizări. Laboratorul este compus dintr-o exerciții practice care includ analiza formei SSA și implementarea unor optimizări.
-Înainte de începerea exercițiilor downloadați arhiva de {{:​cpl:​labs:​lab10.zip|aici}}.+Înainte de începerea exercițiilor downloadați arhiva de {{:​cpl:​labs:​lab11_2016.zip|aici}}.
  
 Compilati exercitiile cu -O0 pentru a nu lasa compilatorul sa aplice optimizari. Compilati exercitiile cu -O0 pentru a nu lasa compilatorul sa aplice optimizari.
Line 152: Line 152:
 ===== Exercițiul 2 ===== ===== Exercițiul 2 =====
  
-Folosind codul din fişierul ''​Hello2.cpp''​ din archiva ​laboratorului,​ urmăriţi modul în care pot fi implementată simple constant propagation în LLVM. +Scrieti un pass care optimizeaza cazuri de tipul jump to jump. Un caz de jump to jump avem in momentul in care singura intructiune dintr-un basic block este un salt neconditionat intr-un alt bloc. In acest caz toate instructiunile de salt din blocul initial pot fi optimizate pentru a duce direct la blocul destinatie. 
-  * cum se obţine numele unui basic block?+Blocul initial este in acest moment dead code si poate fi eliminat cu pass-ul de la exercitiul anterior. 
 + 
 +<file c jump_to_jump.c>​ 
 +#​include<​stdio.h>​ 
 +#​include<​time.h>​ 
 +#​include<​stdlib.h>​ 
 + 
 +void main(void) { 
 +        int x = rand() % 100 - 10; 
 + 
 +        if ( x < 0 ) { 
 +                return; 
 +        } else { 
 +                printf("​Not negative\n"​);​ 
 +        } 
 + 
 +        printf("​End\n"​);​ 
 +
 + 
 +</​file>​ 
 + 
 +===== Exercițiul 3 ===== 
 + 
 +Folosind codul din fişierul ''​Hello.cpp''​ din arhiva ​laboratorului,​ urmăriţi modul în care pot fi implementată simple constant propagation în LLVM.
   * cum poate fi identificată o instrucţiune inutilă?   * cum poate fi identificată o instrucţiune inutilă?
   * identificaţi metoda responsabilă pentru constant folding   * identificaţi metoda responsabilă pentru constant folding
   * cum se înlocuiesc apariţiile viitoare ale variabilei în cauză cu o constantă?   * cum se înlocuiesc apariţiile viitoare ale variabilei în cauză cu o constantă?
   * de ce se adaugă din nou în worklist unele instrucţiuni?​   * de ce se adaugă din nou în worklist unele instrucţiuni?​
-  * realizaţi un fişier de test (urmând paşii de la exerciţiul 1) pentru a ilustra beneficiile acestui pas. Rulaţi acest pas pe exemplul ales+  * Rulaţi acest pas folosind fisierul ''​test.c''​ din arhiva laboratorului
-===== Exercițiul 3 =====+
  
  
cpl/labs-draft/11.1482183459.txt.gz · Last modified: 2016/12/19 23:37 by bogdan.nitulescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0