Izdanje paketa prevoditelja LLVM 13.0

Nakon šest mjeseci razvoja, predstavljeno je izdanje projekta LLVM 13.0 - GCC-kompatibilnog skupa alata (kompilatori, optimizatori i generatori koda) koji kompajlira programe u međubitni kod virtualnih instrukcija sličnih RISC-u (virtualni stroj niske razine s višerazinski optimizacijski sustav). Generirani pseudokod može se pretvoriti pomoću JIT kompajlera u strojne instrukcije izravno u trenutku izvođenja programa.

Poboljšanja u Clangu 13.0:

  • Implementirana podrška za zajamčene repne pozive (pozivanje potprograma na samom kraju funkcije, formiranje repne rekurzije ako potprogram pozove sam sebe). Podršku za zajamčene repne pozive pružaju atributi "[[clang::musttail]]" u C++ i "__attribute__((musttail))" u C, koji se koriste u izjavi "return". Značajka vam omogućuje implementaciju optimizacija implementacijom koda u ravnu iteraciju kako biste uštedjeli potrošnju stoga.
  • "using" deklaracije i clang ekstenzije pružaju podršku za definiranje atributa u stilu C++11 koristeći "[[]]" format.
  • Dodana je oznaka "-Wreserved-identifier" za prikaz upozorenja kada navedete rezervirane identifikatore u korisničkom kodu.
  • Dodane su oznake "-Wunused-but-set-parameter" i "-Wunused-but-set-variable" za prikaz upozorenja ako je parametar ili varijabla postavljena, ali se ne koristi.
  • Dodana je zastavica "-Wnull-pointer-subtraction" za izdavanje upozorenja ako kod može uvesti nedefinirano ponašanje zbog upotrebe null pokazivača u operacijama oduzimanja.
  • Dodana je zastavica "-fstack-usage" za generiranje dodatne ".su" datoteke za svaku kodnu datoteku koja sadrži informacije o veličini okvira snopa za svaku funkciju definiranu u datoteci koja se obrađuje.
  • Statičkom analizatoru dodana je nova vrsta izlaza - “sarif-html”, koja dovodi do generiranja izvješća istovremeno u HTML i Sarif formatu. Dodana nova provjera allocClassWithName. Kada navedete opciju "-analyzer-display-progress", prikazuje se vrijeme analize svake funkcije. Analizator pametnog pokazivača (alpha.cplusplus.SmartPtr) je skoro spreman.
  • Proširene su mogućnosti povezane s podrškom za OpenCL. Dodana podrška za nova proširenja cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields i __cl_clang_non_portable_kernel_param_types. Nastavljena je implementacija specifikacije OpenCL 3.0. Za C se prema zadanim postavkama koristi specifikacija OpenCL 1.2 osim ako nije izričito odabrana druga verzija. Za C++, dodana je podrška za datoteke s ekstenzijom “.clcpp”.
  • Implementirana je podrška za direktive transformacije petlje ("#pragma omp unrol" i "#pragma omp tile") definirane u specifikaciji OpenMP 5.1.
  • Dodane opcije uslužnom programu za formatiranje klana: SpacesInLineCommentPrefix za definiranje broja razmaka prije komentara, IndentAccessModifiers, LambdaBodyIndentation i PPIndentWidth za kontrolu poravnanja unosa, lambda izraza i direktiva pretprocesora. Proširene su mogućnosti sortiranja popisa datoteka zaglavlja (SortIncludes). Dodana podrška za formatiranje JSON datoteka.
  • Velik dio novih provjera dodan je u linter clang-tidy.

Ključne inovacije u LLVM 13.0:

  • Dodana je opcija “-ehcontguard” za korištenje tehnologije CET (Windows Control-flow Enforcement Technology) za zaštitu od izvođenja eksploatacija izgrađenih pomoću tehnika povratno-orijentiranog programiranja (ROP) u fazi rukovanja iznimkama.
  • Projekt debuginfo-test preimenovan je u cross-project-tests i dizajniran je za testiranje komponenti iz različitih projekata, ne ograničavajući se na informacije o otklanjanju pogrešaka.
  • Sustav montaže pruža podršku za izgradnju nekoliko distribucija, na primjer, jednu s uslužnim programima, a drugu s bibliotekama za programere.
  • U pozadini za AArch64 arhitekturu, podrška za Armv9-A RME (Realm Management Extension) i SME (Scalable Matrix Extension) proširenja implementirana je u asembleru.
  • Podrška za ISA V68/HVX dodana je u pozadinu za Hexagon arhitekturu.
  • Pozadina x86 ima poboljšanu podršku za AMD Zen 3 procesore.
  • Dodana podrška za GFX1013 RDNA2 APU u pozadinu AMDGPU.
  • Libc++ nastavlja implementirati nove značajke standarda C++20 i C++2b, uključujući dovršetak biblioteke "koncepti". Dodana podrška za std::filesystem za Windows platformu temeljenu na MinGW-u. Datoteke zaglavlja odvojene , I . Dodana opcija izrade LIBCXX_ENABLE_INCOMPLETE_FEATURES za onemogućavanje datoteka zaglavlja s nepotpuno implementiranom funkcijom.
  • Proširene su mogućnosti LLD povezivača u kojem je implementirana podrška za Big-endian Aarch64 procesore, a Mach-O backend je doveden u stanje koje omogućuje povezivanje regularnih programa. Uključena poboljšanja potrebna za povezivanje Glibca pomoću LLD-a.
  • Uslužni program llvm-mca (Analizer strojnog koda) dodao je podršku za procesore koji izvršavaju instrukcije po redu (superskalarni cjevovod po redu), kao što je ARM Cortex-A55.
  • LLDB debugger za platformu AArch64 pruža punu podršku za provjeru autentičnosti pokazivača, MTE (MemTag, proširenje memorijskog označavanja) i SVE registre. Dodane naredbe koje vam omogućuju vezivanje oznaka za svaku operaciju dodjele memorije i organiziranje provjere pokazivača prilikom pristupa memoriji, koji mora biti povezan s ispravnom oznakom.
  • Program za ispravljanje pogrešaka LLDB i sučelje za jezik Fortran - Flang dodani su binarnim sklopovima koje je generirao projekt.

Izvor: opennet.ru

Dodajte komentar