Differences

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

Link to this comparison view

cpl:labs:09 [2016/12/04 21:51]
bogdan.nitulescu [Ex.2 - O3]
cpl:labs:09 [2016/12/06 23:02] (current)
bogdan.nitulescu [Ex.3 - Loops (3p)]
Line 235: Line 235:
  
 <code bash> <code bash>
-student@cpl-vm ~/​llvm-3.6.2 $ opt -load llvm-3.6.2/install/​lib/​LLVMHello.so --help+student@cpl-vm ~/​llvm-3.6.2 $ opt -load llvm-3.8.0/​lib/​LLVMHello.so --help
 OVERVIEW: llvm .bc -> .bc modular optimizer and analysis printer OVERVIEW: llvm .bc -> .bc modular optimizer and analysis printer
  
Line 339: Line 339:
  
 ====== Exerciții de laborator ======= ====== Exerciții de laborator =======
 +{{:​cpl:​labs:​lab09.zip|Arhiva}} laboratorului.
 ==== Ex.1 - Mem2Reg. Constant Propagation. Deadcode Elimination (3p) ==== ==== Ex.1 - Mem2Reg. Constant Propagation. Deadcode Elimination (3p) ====
  
Line 356: Line 356:
 Pass-urile executate, impreuna cu output-ul generat dupa fiecare optimizare se gaseste in fisierul passes.txt. Pass-urile executate, impreuna cu output-ul generat dupa fiecare optimizare se gaseste in fisierul passes.txt.
  
-==== Ex.3 - Loops ====+==== Ex.3 - Loops (3p) ====
 Intrati in folder-ul ex.2 din arhiva de laborator. Compilati in cele 2 forme LLVM IR fisierul loops.c. Intrati in folder-ul ex.2 din arhiva de laborator. Compilati in cele 2 forme LLVM IR fisierul loops.c.
-Faceti urmatoarele optimizari: mem2reg, simplifycfg,​ loops, loop-simplify, loop-rotate,​ loop-unroll.+Faceti urmatoarele optimizari: mem2reg, simplifycfg,​ loops, loop-rotate,​ loop-unroll.
 Observati modificarile. Observati modificarile.
 ==== Ex. 4 - LLVM pass (6p) ==== ==== Ex. 4 - LLVM pass (6p) ====
Line 369: Line 369:
  
 Rulati pass-ul ca folosind calea catre bilioteca dinamica compilata. Rulati pass-ul ca folosind calea catre bilioteca dinamica compilata.
 +
 +
 +Cel mai simplu mod pentru a crea pass-ul este sa copiati folderul hello din \$PathToLLVMSrc/​lib/​Transforms/​Hello in \$PathTooLLVMSrc/​lib/​Transforms/​\$MyPass.
 +
 +<​code>​
 +$PathToLLVMSrc/​lib/​Transforms/​$MyPass/​CMakeLists.txt
 +$PathToLLVMSrc/​lib/​Transforms/​$MyPass/​Makefile
 +$PathToLLVMSrc/​lib/​Transforms/​CMakeLists.txt
 +</​code>​
 +
 +Redenumiti \$PathToLLVMSrc/​lib/​Transforms/​\$MyPass/​Hello.exports in \$PathToLLVMSrc/​lib/​Transforms/​\$MyPass/​\$MyPass.exports
 +
 +
 +Mergeti in folderul de build. Pe calculatoarele din laborator este ~/​cpl/​build. Rulati
 +<​code>​
 +cmake $PathToLLVMSrc
 +</​code>​
 +Pentru calculatoarele din laborator acesta este
 +<​code>​
 +cmake ../​llvm-3.8.0.src
 +</​code>​
 +
 +Apoi rulati make in folderul nou create din ~/​cpl/​build/​lib/​Transforms/​$MyPass.
 +
 +Trebuie sa rerulati cmake si make pentru fiecare modificare pe care o faceti in sursa pass-ului vostru.
 +Pass-ul compilat sub forma de biblioteca dinamica se va gasi in ~/​cpl/​build/​lib.
 +
  
 Hints: Hints:
cpl/labs/09.1480881109.txt.gz · Last modified: 2016/12/04 21:51 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