Utgivelse av LLVM 13.0-kompilatorpakken

Etter seks måneders utvikling ble utgivelsen av LLVM 13.0-prosjektet presentert - et GCC-kompatibelt verktøysett (kompilatorer, optimerere og kodegeneratorer) som kompilerer programmer til mellombitkode av RISC-lignende virtuelle instruksjoner (en virtuell maskin på lavt nivå med en optimeringssystem på flere nivåer). Den genererte pseudokoden kan konverteres ved hjelp av en JIT-kompilator til maskininstruksjoner direkte på tidspunktet for programkjøring.

Forbedringer i Clang 13.0:

  • Implementert støtte for garanterte haleanrop (kaller en subrutine helt på slutten av en funksjon, og danner en halerekursjon hvis subrutinen kaller seg selv). Støtte for garanterte hale-anrop er gitt av "[[clang::musttail]]"-attributtet i C++ og "__attribute__((musttail))" i C, brukt i en "return"-setning. Funksjonen lar deg implementere optimaliseringer ved å distribuere kode i en flat iterasjon for å spare stabelforbruk.
  • "bruker"-deklarasjoner og clang-utvidelser gir støtte for å definere C++11-stilattributter ved å bruke "[[]]"-formatet.
  • Lagt til flagget "-Wreserved-identifier" for å vise en advarsel når du spesifiserer reserverte identifikatorer i brukerkoden.
  • Lagt til "-Wunused-but-set-parameter" og "-Wunused-but-set-variable"-flagg for å vise en advarsel hvis en parameter eller variabel er satt, men ikke brukt.
  • Lagt til "-Wnull-pointer-subtraction"-flagg for å gi en advarsel hvis koden kan introdusere udefinert atferd på grunn av bruken av en null-peker i subtraksjonsoperasjoner.
  • Lagt til "-fstack-usage"-flagget for å generere en ekstra ".su"-fil for hver kodefil som inneholder informasjon om størrelsen på stackrammer for hver funksjon definert i filen som behandles.
  • En ny utdatatype er lagt til den statiske analysatoren - "sarif-html", som fører til generering av rapporter samtidig i HTML- og Sarif-formater. Lagt til ny allocClassWithName-sjekk. Når du spesifiserer alternativet "-analyzer-display-progress", vises analysetiden for hver funksjon. Den smarte pekeranalysatoren (alpha.cplusplus.SmartPtr) er nesten klar.
  • Mulighetene knyttet til OpenCL-støtte er utvidet. Lagt til støtte for nye utvidelser cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields og __cl_clang_non_portable_kernel_param_types. Implementeringen av OpenCL 3.0-spesifikasjonen har fortsatt. For C brukes OpenCL 1.2-spesifikasjonen som standard med mindre en annen versjon eksplisitt er valgt. For C++ er støtte for filer med filtypen ".clcpp" lagt til.
  • Støtte for sløyfetransformasjonsdirektiver ("#pragma omp unrol" og "#pragma omp tile") definert i OpenMP 5.1-spesifikasjonen er implementert.
  • Lagt til alternativer til clang-formatverktøyet: SpacesInLineCommentPrefix for å definere antall mellomrom før kommentarer, IndentAccessModifiers, LambdaBodyIndentation og PPIndentWidth for å kontrollere justeringen av oppføringer, lambda-uttrykk og preprosessor-direktiver. Mulighetene for å sortere opptellingen av hodefiler (SortIncludes) er utvidet. Lagt til støtte for formatering av JSON-filer.
  • En stor del av nye sjekker er lagt til linter klang-ryddig.

Nøkkelinnovasjoner i LLVM 13.0:

  • Lagt til "-ehcontguard"-alternativet for å bruke CET-teknologi (Windows Control-flow Enforcement Technology) for å beskytte mot utførelse av utnyttelser bygget ved hjelp av returorientert programmering (ROP)-teknikker i unntakshåndteringsstadiet.
  • Debuginfo-testprosjektet har blitt omdøpt til kryssprosjekttester og er designet for å teste komponenter fra forskjellige prosjekter, ikke begrenset til feilsøkingsinformasjon.
  • Monteringssystemet gir støtte for å bygge flere distribusjoner, for eksempel en med verktøy og den andre med biblioteker for utviklere.
  • I backend for AArch64-arkitekturen er støtte for utvidelsene Armv9-A RME (Realm Management Extension) og SME (Scalable Matrix Extension) implementert i assembleren.
  • Støtte for ISA V68/HVX er lagt til backend for Hexagon-arkitekturen.
  • x86-backend har forbedret støtte for AMD Zen 3-prosessorer.
  • Lagt til støtte for GFX1013 RDNA2 APU til AMDGPU-backend.
  • Libc++ fortsetter å implementere nye funksjoner i C++20- og C++2b-standardene, inkludert fullføringen av "konsept"-biblioteket. Lagt til støtte for std::filesystem for den MinGW-baserte Windows-plattformen. Overskriftsfilene , og er atskilt. Lagt til byggealternativ LIBCXX_ENABLE_INCOMPLETE_FEATURES for å deaktivere overskriftsfiler med ikke fullt implementert funksjonalitet.
  • Mulighetene til LLD-linkeren har blitt utvidet, der støtte for Big-endian Aarch64-prosessorer er implementert, og Mach-O-backend er brakt til en tilstand som tillater kobling av vanlige programmer. Inkluderte forbedringer som trengs for å koble Glibc ved hjelp av LLD.
  • Verktøyet llvm-mca (Machine Code Analyzer) har lagt til støtte for prosessorer som utfører instruksjoner i rekkefølge (superskalar pipeline i rekkefølge), for eksempel ARM Cortex-A55.
  • LLDB-feilsøkeren for AArch64-plattformen gir full støtte for pekerautentisering, MTE (MemTag, Memory Tagging Extension) og SVE-registre. Lagt til kommandoer som lar deg binde tagger til hver minneallokeringsoperasjon og organisere en sjekk av pekeren når du får tilgang til minnet, som må være knyttet til riktig tag.
  • LLDB-feilsøkeren og frontend for Fortran-språket - Flang er lagt til de binære sammenstillingene generert av prosjektet.

Kilde: opennet.ru

Legg til en kommentar