Vydanie sady kompilátorov LLVM 13.0

Po šiestich mesiacoch vývoja bolo predstavené vydanie projektu LLVM 13.0 - GCC-kompatibilný toolkit (kompilátory, optimalizátory a generátory kódu), ktorý kompiluje programy do stredného bitového kódu virtuálnych inštrukcií podobných RISC (nízkoúrovňový virtuálny stroj s viacúrovňový optimalizačný systém). Vygenerovaný pseudokód je možné previesť pomocou JIT kompilátora na strojové inštrukcie priamo v čase vykonávania programu.

Vylepšenia v Clang 13.0:

  • Implementovaná podpora pre garantované koncové volania (volanie podprogramu na samom konci funkcie, vytvorenie koncovej rekurzie, ak podprogram volá sám seba). Podpora pre zaručené koncové volania je poskytovaná atribútom "[[clang::musttail]]" v C++ a "__attribute__((musttail))" v C, ktorý sa používa v príkaze "return". Táto funkcia vám umožňuje implementovať optimalizácie nasadením kódu do plochej iterácie, aby sa ušetrila spotreba zásobníka.
  • "using" deklarácie a rozšírenia clang poskytujú podporu pre definovanie atribútov v štýle C++ 11 pomocou formátu "[[]]".
  • Pridaný príznak „-Wreserved-identifier“ na zobrazenie upozornenia, keď sú v kóde používateľa špecifikované vyhradené identifikátory.
  • Pridané príznaky „-Wunused-but-set-parameter“ a „-Wunused-but-set-variable“ na zobrazenie upozornenia, ak je parameter alebo premenná nastavená, ale nepoužíva sa.
  • Pridaný príznak "-Wnull-pointer-subtraction" na vydanie varovania, ak by kód mohol zaviesť nedefinované správanie v dôsledku použitia nulového ukazovateľa pri operáciách odčítania.
  • Pridaný príznak "-fstack-usage" na generovanie dodatočného súboru ".su" pre každý súbor kódu, ktorý obsahuje informácie o veľkosti zásobníkov pre každú funkciu definovanú v spracovávanom súbore.
  • Do statického analyzátora bol pridaný nový typ výstupu – „sarif-html“, ktorý vedie k súčasnému generovaniu reportov vo formátoch HTML a Sarif. Pridaná nová kontrola allocClassWithName. Pri zadaní možnosti „-analyzer-display-progress“ sa zobrazí čas analýzy každej funkcie. Inteligentný analyzátor ukazovateľa (alpha.cplusplus.SmartPtr) je takmer pripravený.
  • Možnosti spojené s podporou OpenCL boli rozšírené. Pridaná podpora pre nové rozšírenia cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields a __cl_clang_non_portable_kernel_param_types. Implementácia špecifikácie OpenCL 3.0 pokračovala. Pre C sa štandardne používa špecifikácia OpenCL 1.2, pokiaľ nie je explicitne vybraná iná verzia. Pre C++ bola pridaná podpora pre súbory s príponou „.clcpp“.
  • Bola implementovaná podpora smerníc transformácie slučiek („#pragma omp unrol“ a „#pragma omp tile“) definovaných v špecifikácii OpenMP 5.1.
  • Do obslužného programu formátu clang boli pridané možnosti: SpacesInLineCommentPrefix na definovanie počtu medzier pred komentármi, IndentAccessModifiers, LambdaBodyIndentation a PPIndentWidth na riadenie zarovnania záznamov, výrazov lambda a direktív preprocesora. Rozšírili sa možnosti triedenia enumerácie hlavičkových súborov (SortIncludes). Pridaná podpora pre formátovanie súborov JSON.
  • Veľká časť nových kontrol bola pridaná do linter clang-tidy.

Kľúčové inovácie v LLVM 13.0:

  • Pridaná možnosť „-ehcontguard“ na použitie technológie CET (Windows Control-flow Enforcement Technology) na ochranu pred spustením exploitov vytvorených pomocou techník návratovo orientovaného programovania (ROP) vo fáze spracovania výnimiek.
  • Projekt debuginfo-test bol premenovaný na cross-project-tests a je určený na testovanie komponentov z rôznych projektov, neobmedzuje sa len na informácie o ladení.
  • Montážny systém poskytuje podporu pre budovanie niekoľkých distribúcií, napríklad jedna s nástrojmi a druhá s knižnicami pre vývojárov.
  • V backende pre architektúru AArch64 je v assembleri implementovaná podpora pre rozšírenia Armv9-A RME (Realm Management Extension) a SME (Scalable Matrix Extension).
  • Do backendu pre architektúru Hexagon bola pridaná podpora pre ISA V68/HVX.
  • Backend x86 má vylepšenú podporu pre procesory AMD Zen 3.
  • Pridaná podpora pre GFX1013 RDNA2 APU do backendu AMDGPU.
  • Libc++ pokračuje v implementácii nových funkcií štandardov C++20 a C++2b, vrátane dokončenia knižnice „pojmov“. Pridaná podpora pre std::filesystem pre platformu Windows založenú na MinGW. Súbory hlavičky sú oddelené , A . Pridaná voľba zostavy LIBCXX_ENABLE_INCOMPLETE_FEATURES na zakázanie súborov hlavičiek s nie úplne implementovanou funkcionalitou.
  • Rozšírili sa možnosti LLD linkera, v ktorom je implementovaná podpora Big-endian procesorov Aarch64 a Mach-O backend sa dostal do stavu, ktorý umožňuje prepojenie bežných programov. Zahrnuté vylepšenia potrebné na prepojenie Glibc pomocou LLD.
  • Nástroj llvm-mca (Machine Code Analyzer) pridal podporu pre procesory, ktoré vykonávajú inštrukcie v poradí (in-order superskalar pipeline), ako napríklad ARM Cortex-A55.
  • Ladiaci nástroj LLDB pre platformu AArch64 poskytuje plnú podporu pre autentifikáciu ukazovateľa, MTE (MemTag, rozšírenie Memory Tagging Extension) a SVE. Pridané príkazy, ktoré vám umožňujú viazať značky na každú operáciu alokácie pamäte a organizovať kontrolu ukazovateľa pri prístupe do pamäte, ktorá musí byť spojená so správnou značkou.
  • Debugger LLDB a frontend pre jazyk Fortran - Flang boli pridané do binárnych zostáv generovaných projektom.

Zdroj: opennet.ru

Pridať komentár