Autorizovaný software: Frontend překladače jazyka C s podporou pragmat
VUT FIT
1.11.2013
Adam Husár, Tomáš Hruška, Karel Masařík


Jedná se o značné rozšíření frontendu překladače LLVM clang o podporu specifikace pragmat. 
Pomocí pragmat může uživatel dodat překladači další informace o programu.
V překladači LLVM taková podpora předtím nebyla a z důvodu navazujích 
úkolů bylo nutné překladač značně upravit a dodat požadovanou funkcionalitu.

Využití je především v následujících optimalizacích překladače:
- alias analýza
  - označení bloků kódu, kde nemůže docházet k překrývání ukazatelů
- vektorizace (nová pragmata jsou založena na pragmatech pro Intel C/C++ překladač)
  - zde je specifikovat, že si přeji pro cyklus použít SIMD instrukce nehledě na odhad ceny
  - nebo ignorovat závoslosti mezi iteracemi smyčky
  - + dodat další informace
- označení specializovaných instrukcí
  - zde je možné označit část kódu, která se má implementovat přímo v hardwaru


Pro zachování pragmat v kódu jsou použity speciální anotace v kódu, které mají ty výhodu, 
že narozdíl od ladicích informací v kódu zůstávají i po agresivních optimalizacích.


Dále je součástí i testovací průchod CodasipPragmaTest.cpp, který označené části kódy vypíše.
Ten lze využít obdobně jako ukázkový přůchod na http://llvm.org/docs/WritingAnLLVMPass.html.

Upravené  soubory ve zdrojových kódech jsou následující:

clang-3.2.src/lib/compilerdev/clang/lib/Parse/ParsePragma.h
clang-3.2.src/lib/compilerdev/clang/lib/Parse/ParsePragma.cpp
clang-3.2.src/lib/compilerdev/clang/lib/Parse/ParseStmt.cpp
clang-3.2.src/lib/compilerdev/clang/lib/Parse/Parser.cpp
clang-3.2.src/lib/compilerdev/clang/lib/Sema/SemaStmt.cpp
clang-3.2.src/lib/compilerdev/clang/lib/CodeGen/CGStmt.cpp
clang-3.2.src/lib/compilerdev/clang/include/clang/Parse/Parser.h
clang-3.2.src/lib/compilerdev/clang/include/clang/Basic/DiagnosticParseKinds.td
clang-3.2.src/lib/compilerdev/clang/include/clang/Basic/CodasipPragmaKinds.h
clang-3.2.src/lib/compilerdev/clang/include/clang/Basic/TokenKinds.def
clang-3.2.src/lib/compilerdev/clang/include/clang/Basic/Attr.td
clang-3.2.src/lib/compilerdev/clang/include/clang/Sema/Sema.h

