Izdanje LLVM 13.0 kompajlerskog paketa

Nakon šest mjeseci razvoja, predstavljeno je izdanje LLVM 13.0 projekta - GCC-kompatibilnog kompleta alata (kompajleri, optimizatori i generatori koda) koji kompajlira programe u srednji bit kod RISC-ovih virtualnih instrukcija (virtuelna mašina niskog nivoa sa sistem optimizacije na više nivoa). Generisani pseudokod se može konvertovati pomoću JIT kompajlera u mašinske instrukcije direktno u vreme izvršavanja programa.

Poboljšanja u Clang 13.0:

  • Implementirana podrška za garantirane repne pozive (pozivanje potprograma na samom kraju funkcije, formiranje repne rekurzije ako potprogram sam sebe pozove). Podršku za garantovane repne pozive obezbeđuju atributi "[[clang::musttail]]" u C++ i "__attribute__((musttail))" u C, koji se koriste u naredbi "return". Ova funkcija vam omogućava da implementirate optimizacije postavljanjem koda u ravnu iteraciju kako biste uštedjeli potrošnju steka.
  • "using" deklaracije i clang ekstenzije pružaju podršku za definiranje atributa u stilu C++11 korištenjem "[[]]" formata.
  • Dodata je oznaka "-Wreserved-identifier" za prikaz upozorenja kada navedete rezervirane identifikatore u korisničkom kodu.
  • Dodane su zastavice "-Wunused-but-set-parameter" i "-Wunused-but-set-variable" za prikaz upozorenja ako je parametar ili varijabla postavljena, ali se ne koristi.
  • Dodata zastavica "-Wnull-pointer-subtraction" za izdavanje upozorenja ako kod može uvesti nedefinirano ponašanje zbog upotrebe nul-pokazivača u operacijama oduzimanja.
  • Dodata je oznaka "-fstack-usage" za generiranje za svaku datoteku koda dodatnu datoteku ".su" koja sadrži informacije o veličini okvira steka za svaku funkciju definiranu u datoteci koja se obrađuje.
  • U statički analizator je dodat novi tip izlaza - “sarif-html”, koji vodi do generisanja izvještaja istovremeno u HTML i Sarif formatima. Dodata nova provjera allocClassWithName. Kada specificirate opciju “-analyzer-display-progress”, prikazuje se vrijeme analize svake funkcije. Analizator pametnog pokazivača (alpha.cplusplus.SmartPtr) je skoro spreman.
  • Mogućnosti povezane sa OpenCL podrškom su proširene. Dodata podrška za nove ekstenzije cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields i __cl_clang_non_portable_kernel_param_types. Implementacija OpenCL 3.0 specifikacije je nastavljena. Za C, OpenCL 1.2 specifikacija se koristi po defaultu osim ako druga verzija nije eksplicitno odabrana. Za C++ je dodana podrška za datoteke sa ekstenzijom “.clcpp”.
  • Implementirana je podrška za direktive transformacije petlje (“#pragma omp unrol” i “#pragma omp tile”) definirane u OpenMP 5.1 specifikaciji.
  • Dodate opcije uslužnom programu clang-format: SpacesInLineCommentPrefix za definiranje broja razmaka prije komentara, IndentAccessModifiers, LambdaBodyIndentation i PPIndentWidth za kontrolu poravnanja unosa, lambda izraza i predprocesorskih direktiva. Proširene su mogućnosti za sortiranje nabrajanja datoteka zaglavlja (SortIncludes). Dodata podrška za formatiranje JSON fajlova.
  • Veliki dio novih provjera je dodan u linter clang-tidy.

Ključne inovacije u LLVM 13.0:

  • Dodata je opcija “-ehcontguard” za korištenje tehnologije CET (Windows Control-flow Enforcement Technology) za zaštitu od izvođenja eksploatacija napravljenih korištenjem tehnika programiranja orijentiranog na povratak (ROP) u fazi obrade izuzetaka.
  • Debuginfo-test projekat je preimenovan u cross-project-tests i dizajniran je da testira komponente iz različitih projekata, ne ograničavajući se na informacije o otklanjanju grešaka.
  • Sistem asemblera pruža podršku za izgradnju nekoliko distribucija, na primjer, jedne sa uslužnim programima, a druge sa bibliotekama za programere.
  • U pozadini za AArch64 arhitekturu, podrška za Armv9-A RME (Realm Management Extension) i SME (Scalable Matrix Extension) proširenja je implementirana u asembleru.
  • Podrška za ISA V68/HVX je dodata u pozadinu za arhitekturu Hexagon.
  • x86 backend ima poboljšanu podršku za AMD Zen 3 procesore.
  • Dodata podrška za GFX1013 RDNA2 APU za AMDGPU backend.
  • Libc++ nastavlja da implementira nove karakteristike standarda C++20 i C++2b, uključujući kompletiranje biblioteke „koncepta“. Dodata podrška za std::filesystem za MinGW baziranu Windows platformu. Fajlovi zaglavlja odvojeni , I . Dodata opcija izgradnje LIBCXX_ENABLE_INCOMPLETE_FEATURES za onemogućavanje datoteka zaglavlja s nepotpuno implementiranom funkcionalnošću.
  • Proširene su mogućnosti LLD linkera u kojem je implementirana podrška za Big-endian Aarch64 procesore, a Mach-O backend je doveden u stanje koje omogućava povezivanje redovnih programa. Uključena poboljšanja potrebna za povezivanje Glibc-a koristeći LLD.
  • Uslužni program llvm-mca (Machine Code Analyzer) je dodao podršku za procesore koji izvršavaju instrukcije po redu (superskalarni cevovod u redoslijedu), kao što je ARM Cortex-A55.
  • LLDB debugger za AArch64 platformu pruža punu podršku za Pointer Authentication, MTE (MemTag, Memory Tagging Extension) i SVE registre. Dodane su naredbe koje vam omogućavaju da povežete oznake sa svakom operacijom dodjele memorije i organizirate provjeru pokazivača prilikom pristupa memoriji, koja mora biti povezana s ispravnom oznakom.
  • LLDB debugger i frontend za jezik Fortran - Flang dodani su binarnim sklopovima generisanim projektom.

izvor: opennet.ru

Dodajte komentar