Izdaja zbirke prevajalnikov LLVM 13.0

Po šestih mesecih razvoja je bila predstavljena izdaja projekta LLVM 13.0 - kompleta orodij, združljivega z GCC (prevajalniki, optimizatorji in generatorji kode), ki prevaja programe v vmesno bitno kodo virtualnih ukazov, podobnih RISC (virtualni stroj nizke ravni z večnivojski optimizacijski sistem). Ustvarjeno psevdokodo je mogoče pretvoriti s pomočjo prevajalnika JIT v strojna navodila neposredno v času izvajanja programa.

Izboljšave v Clang 13.0:

  • Implementirana podpora za zajamčene repne klice (klicanje podprograma na samem koncu funkcije, oblikovanje repne rekurzije, če se podprogram pokliče sam). Podporo za zajamčene repne klice zagotavljata atributa "[[clang::musttail]]" v C++ in "__attribute__((musttail))" v C, uporabljena v stavku "return". Funkcija vam omogoča implementacijo optimizacij z uvajanjem kode v ravno ponovitev, da prihranite porabo sklada.
  • "using" deklaracije in razširitve clang nudijo podporo za definiranje atributov v slogu C++11 z uporabo formata "[[]]".
  • Dodana zastavica »-Wreserved-identifier« za prikaz opozorila, ko v uporabniški kodi podate rezervirane identifikatorje.
  • Dodani zastavici »-Wunused-but-set-parameter« in »-Wunused-but-set-variable« za prikaz opozorila, če je parameter ali spremenljivka nastavljena, vendar ni uporabljena.
  • Dodana zastavica »-Wnull-pointer-subtraction« za izdajo opozorila, če bi lahko koda povzročila nedefinirano vedenje zaradi uporabe ničelnega kazalca v operacijah odštevanja.
  • Dodana zastavica »-fstack-usage« za ustvarjanje dodatne datoteke ».su« za vsako kodno datoteko, ki vsebuje informacije o velikosti okvirjev sklada za vsako funkcijo, definirano v datoteki, ki se obdeluje.
  • Statičnemu analizatorju je bil dodan nov izhodni tip - "sarif-html", ki vodi do hkratnega ustvarjanja poročil v formatih HTML in Sarif. Dodano novo preverjanje allocClassWithName. Ko določite možnost »-analyzer-display-progress«, se prikaže čas analize vsake funkcije. Analizator pametnega kazalca (alpha.cplusplus.SmartPtr) je skoraj pripravljen.
  • Zmogljivosti, povezane s podporo za OpenCL, so bile razširjene. Dodana podpora za nove razširitve cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields in __cl_clang_non_portable_kernel_param_types. Nadaljevala se je implementacija specifikacije OpenCL 3.0. Za C se privzeto uporablja specifikacija OpenCL 1.2, razen če je izrecno izbrana druga različica. Za C++ je dodana podpora za datoteke s pripono ».clcpp«.
  • Implementirana je bila podpora za direktive za transformacijo zanke (»#pragma omp unrol« in »#pragma omp tile«), opredeljene v specifikaciji OpenMP 5.1.
  • Dodane možnosti pripomočku za formatiranje klana: SpacesInLineCommentPrefix za določanje števila presledkov pred komentarji, IndentAccessModifiers, LambdaBodyIndentation in PPIndentWidth za nadzor poravnave vnosov, lambda izrazov in direktiv predprocesorja. Razširjene so možnosti za razvrščanje oštevilčenja datotek glave (SortIncludes). Dodana podpora za oblikovanje datotek JSON.
  • V linter clang-tidy je bil dodan velik del novih pregledov.

Ključne novosti v LLVM 13.0:

  • Dodana možnost »-ehcontguard« za uporabo tehnologije CET (Windows Control-flow Enforcement Technology) za zaščito pred izvajanjem izkoriščanj, zgrajenih s tehnikami povratno usmerjenega programiranja (ROP) na stopnji obravnavanja izjem.
  • Projekt debuginfo-test je bil preimenovan v cross-project-tests in je zasnovan za testiranje komponent iz različnih projektov, ne omejeno na informacije o odpravljanju napak.
  • Sistem za sestavljanje nudi podporo za gradnjo več distribucij, na primer eno s pripomočki in drugo s knjižnicami za razvijalce.
  • V zaledju za arhitekturo AArch64 je podpora za razširitve Armv9-A RME (Realm Management Extension) in SME (Scalable Matrix Extension) implementirana v sestavljalniku.
  • Podpora za ISA V68/HVX je bila dodana v ozadje za arhitekturo Hexagon.
  • Zaledje x86 ima izboljšano podporo za procesorje AMD Zen 3.
  • Dodana podpora za GFX1013 RDNA2 APU v zaledje AMDGPU.
  • Libc++ še naprej izvaja nove funkcije standardov C++20 in C++2b, vključno z dokončanjem knjižnice »konceptov«. Dodana podpora za std::filesystem za platformo Windows, ki temelji na MinGW. Glavne datoteke , in so ločene. Dodana možnost gradnje LIBCXX_ENABLE_INCOMPLETE_FEATURES za onemogočanje datotek glave z ne popolnoma implementirano funkcionalnostjo.
  • Razširjene so bile zmožnosti povezovalnika LLD, v katerem je implementirana podpora za procesorje Big-endian Aarch64, zaledje Mach-O pa je bilo pripeljano v stanje, ki omogoča povezovanje običajnih programov. Vključene izboljšave, potrebne za povezavo Glibc z uporabo LLD.
  • Pripomoček llvm-mca (analizator strojne kode) je dodal podporo za procesorje, ki izvajajo navodila po vrstnem redu (in-order superskalarni cevovod), kot je ARM Cortex-A55.
  • Razhroščevalnik LLDB za platformo AArch64 nudi popolno podporo za avtentikacijo kazalca, MTE (MemTag, razširitev označevanja pomnilnika) in registre SVE. Dodani ukazi, ki omogočajo vezavo oznak na vsako operacijo dodeljevanja pomnilnika in organiziranje preverjanja kazalca pri dostopu do pomnilnika, ki mora biti povezan s pravilno oznako.
  • Razhroščevalnik LLDB in vmesnik za jezik Fortran - Flang sta bila dodana binarnim sestavom, ki jih je ustvaril projekt.

Vir: opennet.ru

Dodaj komentar