Udgivelse af LLVM 13.0 compiler suite

Efter seks måneders udvikling blev udgivelsen af ​​LLVM 13.0-projektet præsenteret - et GCC-kompatibelt værktøjssæt (kompilatorer, optimeringsværktøjer og kodegeneratorer), der kompilerer programmer til mellembitkode af RISC-lignende virtuelle instruktioner (en virtuel maskine på lavt niveau med en optimeringssystem på flere niveauer). Den genererede pseudokode kan konverteres ved hjælp af en JIT-kompiler til maskininstruktioner direkte på tidspunktet for programudførelse.

Forbedringer i Clang 13.0:

  • Implementeret understøttelse af garanterede haleopkald (kalder en subrutine til allersidst af en funktion, hvilket danner en hale-rekursion, hvis subrutinen kalder sig selv). Understøttelse af garanterede hale-opkald leveres af "[[clang::musttail]]"-attributten i C++ og "__attribute__((musttail))" i C, brugt i en "return"-sætning. Funktionen giver dig mulighed for at implementere optimeringer ved at implementere kode i en flad iteration for at spare stakforbrug.
  • "bruger"-erklæringer og clang-udvidelser giver støtte til at definere C++11-stil attributter ved hjælp af "[[]]" formatet.
  • Tilføjet flaget "-Wreserved-identifier" for at vise en advarsel, når du angiver reserverede identifikatorer i brugerkoden.
  • Tilføjet "-Wunused-but-set-parameter" og "-Wunused-but-set-variable" flag for at vise en advarsel, hvis en parameter eller variabel er indstillet, men ikke brugt.
  • Tilføjet "-Wnull-pointer-subtraction"-flag for at udsende en advarsel, hvis koden muligvis introducerer udefineret adfærd på grund af brugen af ​​en nul-pointer i subtraktionsoperationer.
  • Tilføjede flaget "-fstack-usage" for at generere en ekstra ".su"-fil for hver kodefil, der indeholder information om størrelsen af ​​stak frames for hver funktion, der er defineret i filen, der behandles.
  • En ny outputtype er blevet tilføjet til den statiske analysator - "sarif-html", som fører til generering af rapporter samtidigt i HTML- og Sarif-formater. Tilføjet ny allocClassWithName-kontrol. Når du angiver "-analyzer-display-progress" muligheden, vises analysetiden for hver funktion. Den smarte pointeranalysator (alpha.cplusplus.SmartPtr) er næsten klar.
  • Mulighederne forbundet med OpenCL-understøttelse er blevet udvidet. Tilføjet understøttelse af nye udvidelser cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields og __cl_clang_non_portable_kernel_param_types. Implementeringen af ​​OpenCL 3.0-specifikationen er fortsat. For C bruges OpenCL 1.2-specifikationen som standard, medmindre en anden version eksplicit er valgt. For C++ er understøttelse af filer med filtypenavnet ".clcpp" blevet tilføjet.
  • Understøttelse af løkketransformationsdirektiver ("#pragma omp unrol" og "#pragma omp tile") defineret i OpenMP 5.1-specifikationen er blevet implementeret.
  • Tilføjede muligheder til clang-format-værktøjet: SpacesInLineCommentPrefix for at definere antallet af mellemrum før kommentarer, IndentAccessModifiers, LambdaBodyIndentation og PPIndentWidth til at kontrollere justeringen af ​​indgange, lambda-udtryk og præprocessor-direktiver. Mulighederne for at sortere opregningen af ​​header-filer (SortIncludes) er blevet udvidet. Tilføjet understøttelse af formatering af JSON-filer.
  • En stor del af nye checks er blevet tilføjet til linter clang-rydy.

Vigtigste innovationer i LLVM 13.0:

  • Tilføjet "-ehcontguard"-muligheden for at bruge CET-teknologi (Windows Control-flow Enforcement Technology) til at beskytte mod eksekvering af udnyttelser bygget ved hjælp af Return-Oriented Programming (ROP)-teknikker i undtagelseshåndteringsstadiet.
  • Debuginfo-testprojektet er blevet omdøbt til cross-project-tests og er designet til at teste komponenter fra forskellige projekter, ikke begrænset til fejlfindingsinformation.
  • Monteringssystemet giver støtte til at bygge flere distributioner, for eksempel den ene med hjælpeprogrammer og den anden med biblioteker til udviklere.
  • I backend til AArch64-arkitekturen er understøttelse af Armv9-A RME (Realm Management Extension) og SME (Scalable Matrix Extension) udvidelser implementeret i assembleren.
  • Understøttelse af ISA V68/HVX er blevet tilføjet til backend for Hexagon-arkitekturen.
  • x86-backend har forbedret understøttelse af AMD Zen 3-processorer.
  • Tilføjet understøttelse af GFX1013 RDNA2 APU til AMDGPU-backend.
  • Libc++ fortsætter med at implementere nye funktioner i C++20- og C++2b-standarderne, herunder færdiggørelsen af ​​"koncept"-biblioteket. Tilføjet understøttelse af std::filsystem til den MinGW-baserede Windows-platform. Overskriftsfilerne , og er adskilt. Tilføjet build-indstilling LIBCXX_ENABLE_INCOMPLETE_FEATURES for at deaktivere header-filer med ikke fuldt implementeret funktionalitet.
  • LLD-linkerens muligheder er blevet udvidet, hvor understøttelse af Big-endian Aarch64-processorer er implementeret, og Mach-O-backend er blevet bragt til en tilstand, der tillader sammenkædning af almindelige programmer. Inkluderede forbedringer, der er nødvendige for at linke Glibc ved hjælp af LLD.
  • Hjælpeprogrammet llvm-mca (Machine Code Analyzer) har tilføjet understøttelse af processorer, der udfører instruktioner i rækkefølge (superskalær pipeline i rækkefølge), såsom ARM Cortex-A55.
  • LLDB-debuggeren til AArch64-platformen giver fuld understøttelse af Pointer Authentication, MTE (MemTag, Memory Tagging Extension) og SVE-registre. Tilføjede kommandoer, der giver dig mulighed for at binde tags til hver hukommelsesallokeringsoperation og organisere en kontrol af markøren, når du får adgang til hukommelsen, som skal være knyttet til den korrekte tag.
  • LLDB-debuggeren og frontend for Fortran-sproget - Flang er blevet tilføjet til de binære samlinger, der er genereret af projektet.

Kilde: opennet.ru

Tilføj en kommentar