This shows you the differences between two versions of the page.
cpl:labs:10 [2016/12/11 21:41] bogdan.nitulescu [Exerciții de laborator (10p)] |
cpl:labs:10 [2017/12/05 08:34] (current) bogdan.nitulescu [Exercițiul 1] |
||
---|---|---|---|
Line 303: | Line 303: | ||
====== Exerciții de laborator (10p) ====== | ====== Exerciții de laborator (10p) ====== | ||
+ | |||
+ | {{:cpl:labs:lab10_2016.zip|Arhiva}} laboratorului. | ||
**Indicatii:** | **Indicatii:** | ||
Line 340: | Line 342: | ||
<code bash> | <code bash> | ||
- | clang -O0 -emit-llvm test.c -c -o test.bc | + | clang -c -O0 -emit-llvm test.c -c -o test.bc |
opt -p -mem2reg -dce < test.bc > /dev/null | opt -p -mem2reg -dce < test.bc > /dev/null | ||
opt -p -mem2reg -adce < test.bc > /dev/null | opt -p -mem2reg -adce < test.bc > /dev/null | ||
Line 351: | Line 353: | ||
* La execuție folosiți parametrul ''load'' cu calea către noul pass, ex: | * La execuție folosiți parametrul ''load'' cu calea către noul pass, ex: | ||
<code bash> | <code bash> | ||
- | opt -p -mem2reg -load ../llvm-3.6.2/src/Release+Asserts/lib/DCE.so -mydce < test.bc > /dev/null | + | opt -p -mem2reg -load ~packages/llvm-3.8.0/build/lib/libLLVMScalarOpts.a -mydce < test.bc > /dev/null |
</code> | </code> | ||
* Ce observați? | * Ce observați? | ||
Line 393: | Line 395: | ||
===== Exercițiul 2 ===== | ===== Exercițiul 2 ===== | ||
- | Implementaţi [[http://en.wikipedia.org/wiki/Live_variable_analysis |analiza live variables]]. Algoritmul este explicat clar şi concis în Dragon book dar şi în slide-urile de [[http://infolab.stanford.edu/~ullman/dragon/slides4.pdf|aici]]. Puteţi pleca de la fişierul ''Hello3.cpp'' din arhiva laboratorului. Pentru implementare, urmăriţi şi instrucţiunile din cod. | + | Implementaţi [[http://en.wikipedia.org/wiki/Live_variable_analysis |analiza live variables]]. Algoritmul este explicat clar şi concis în Dragon book dar şi în slide-urile de [[http://infolab.stanford.edu/~ullman/dragon/slides4.pdf|aici]]. Puteţi pleca de la fişierul ''LiveVars.cpp'' din arhiva laboratorului. Pentru implementare, urmăriţi şi instrucţiunile din cod. |
* ce reprezintă gen(B)/def(B)? Dar kill/use? | * ce reprezintă gen(B)/def(B)? Dar kill/use? | ||
* explicaţi ecuaţia de flux pentru in(B) | * explicaţi ecuaţia de flux pentru in(B) |