Obiectivul acestei teme este să scrieți unul sau mai mulți pași de optimizare, folosind framework-ul LLVM, astfel încât să reduceți cât mai mult dimensiunea codului rezultat.
Premisa acestei teme este să scrieți un optimizor care va obține un rezultat bun in benchmarkul “CPLMark” . Veți extinde utilitarul opt din LLVM, adăugând o bibliotecă ce conține pașii voștri de optimizare.
Scorul CPLMark este dimensiunea totală a secțiunilor .text din fișierele din benchmark, după ce au trecut prin optimizorul vostru si apoi au fost compilate cu llc pentru arhitectura ARM.
Fișierele din benchmark sunt în format .ll , dar pentru referință am adăugat și fișierele C originale.
Pentru a calcula scorul unui test se folosește următoarea secvență de comenzi:
# Transform the test .ll file in binary format llvm-as test.ll -o test.bc # Run your optimization passes opt -load=./libLLVMCpl-Contest.so -cpl-my-1st-pass -cpl-my-2nd-pass test.bc > test-optimized.bc # Generate an optimized object file for the ARM architecture llc test-optimized.bc -march=arm -filetype=obj -o test.o # Compute the size of the text section in the object file llvm-size -A test.o
Scorul final este suma scorului individual pentru fiecare test.
Pentru a începe implementarea pașilor LLVM, puteți urmării pașii de mai jos:
mkdir build; cd build
)cmake
cu calea directorului unde ați dezarhivat arhiva (Exemplu: cmake ..
)make
)libLLVMCpl-Contest.so
în directorul de build.Arhiva de start conține trei fișiere sursă, fiecare dintre acestea conținând scheletul de cod pentru un tip de pas de optimizare. Puteți să ii modificați, să îi ștergeți sau să adăugați alți pași. Dacă adăugați sau scoateți fișiere din proiect, trebuie să modifcați fișierul CMakeLists.txt
Numele fiecărui pas trebuie să inceapă cu cpl- . Linia de comandă cu care va fi apelat opt va conține acești pași în ordine alfabetică.
Din infrastructura existentă LLVM puteți folosi pașii de analiză, dar nu și pe cei de transformare; nici direct (nu aveți voie să îi apelați), nici indirect (nu aveți voie să preluați cod).
Pentru a rula testele, dezarhivați arhiva ce conține benchmarkul CPLMark în directorul de build, si apoi rulați ./cplmark.sh