Release av LLVM 13.0-kompilatorpaketet

Efter sex månaders utveckling presenterades lanseringen av LLVM 13.0-projektet - en GCC-kompatibel verktygslåda (kompilatorer, optimerare och kodgeneratorer) som kompilerar program till mellanliggande bitkod av RISC-liknande virtuella instruktioner (en virtuell maskin på låg nivå med en optimeringssystem på flera nivåer). Den genererade pseudokoden kan konverteras med hjälp av en JIT-kompilator till maskininstruktioner direkt vid tidpunkten för programexekveringen.

Förbättringar i Clang 13.0:

  • Implementerat stöd för garanterade svansanrop (anropar en subrutin i slutet av en funktion, bildar en svansrekursion om subrutinen anropar sig själv). Stöd för garanterade slutanrop tillhandahålls av "[[clang::musttail]]"-attributet i C++ och "__attribute__((musttail))" i C, som används i en "return"-sats. Funktionen låter dig implementera optimeringar genom att distribuera kod i en platt iteration för att spara stackförbrukning.
  • "using"-deklarationer och clang-tillägg ger stöd för att definiera attribut i C++11-stil med formatet "[[]]".
  • Lade till flaggan "-Wreserved-identifier" för att visa en varning när reserverade identifierare anges i användarkoden.
  • Lade till flaggor "-Wunused-but-set-parameter" och "-Wunused-but-set-variable" för att visa en varning om en parameter eller variabel är inställd men inte används.
  • Lade till flaggan "-Wnull-pointer-subtraction" för att utfärda en varning om koden kan introducera odefinierat beteende på grund av användningen av en nollpekare i subtraktionsoperationer.
  • Lade till flaggan "-fstack-usage" för att generera en extra ".su"-fil för varje kodfil som innehåller information om storleken på stackramar för varje funktion som definieras i filen som bearbetas.
  • En ny utdatatyp har lagts till i den statiska analysatorn - "sarif-html", vilket leder till generering av rapporter samtidigt i HTML- och Sarif-format. Lade till ny allocClassWithName-kontroll. När du anger alternativet "-analyzer-display-progress" visas analystiden för varje funktion. Den smarta pekaranalysatorn (alpha.cplusplus.SmartPtr) är nästan klar.
  • Möjligheterna förknippade med OpenCL-stöd har utökats. Lade till stöd för nya tillägg cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields och __cl_clang_non_portable_kernel_param_types. Implementeringen av OpenCL 3.0-specifikationen har fortsatt. För C används OpenCL 1.2-specifikationen som standard om inte en annan version uttryckligen väljs. För C++ har stöd för filer med filtillägget ".clcpp" lagts till.
  • Stöd för looptransformationsdirektiv ("#pragma omp unrol" och "#pragma omp tile") definierade i OpenMP 5.1-specifikationen har implementerats.
  • Tillagda alternativ till verktyget clang-format: SpacesInLineCommentPrefix för att definiera antalet blanksteg före kommentarer, IndentAccessModifiers, LambdaBodyIndentation och PPIndentWidth för att styra justeringen av poster, lambda-uttryck och preprocessor-direktiv. Möjligheterna att sortera uppräkningen av rubrikfiler (SortIncludes) har utökats. Lagt till stöd för formatering av JSON-filer.
  • En stor del av nya kontroller har lagts till linter clang-tyy.

Viktiga innovationer i LLVM 13.0:

  • Lade till alternativet "-ehcontguard" för att använda CET-teknik (Windows Control-flow Enforcement Technology) för att skydda mot exekvering av exploater byggda med returorienterad programmering (ROP)-tekniker i undantagshanteringsstadiet.
  • Debuginfo-testprojektet har bytt namn till cross-project-tests och är designat för att testa komponenter från olika projekt, inte begränsat till felsökningsinformation.
  • Monteringssystemet ger stöd för att bygga flera distributioner, till exempel en med verktyg och den andra med bibliotek för utvecklare.
  • I backend för AArch64-arkitekturen är stöd för Armv9-A RME (Realm Management Extension) och SME (Scalable Matrix Extension) tillägg implementerat i assemblern.
  • Stöd för ISA V68/HVX har lagts till backend för Hexagon-arkitekturen.
  • x86-backend har förbättrat stöd för AMD Zen 3-processorer.
  • Lade till stöd för GFX1013 RDNA2 APU till AMDGPU-backend.
  • Libc++ fortsätter att implementera nya funktioner i C++20- och C++2b-standarderna, inklusive färdigställandet av "koncept"-biblioteket. Tillagt stöd för std::filesystem för den MinGW-baserade Windows-plattformen. Rubrikfiler separerade , Och . Lade till byggalternativ LIBCXX_ENABLE_INCOMPLETE_FEATURES för att inaktivera rubrikfiler med inte fullt implementerad funktionalitet.
  • Möjligheterna för LLD-linkern har utökats, där stöd för Big-endian Aarch64-processorer är implementerat, och Mach-O-backend har förts till ett tillstånd som tillåter länkning av vanliga program. Inkluderade förbättringar som behövs för att länka Glibc med LLD.
  • Verktyget llvm-mca (Machine Code Analyzer) har lagt till stöd för processorer som exekverar instruktioner i ordning (superskalär pipeline i ordning), såsom ARM Cortex-A55.
  • LLDB-felsökaren för AArch64-plattformen ger fullt stöd för Pointer Authentication, MTE (MemTag, Memory Tagging Extension) och SVE-register. Tillagda kommandon som låter dig binda taggar till varje minnesallokeringsoperation och organisera en kontroll av pekaren vid åtkomst till minne, som måste associeras med rätt tagg.
  • LLDB-felsökaren och frontend för Fortran-språket - Flang har lagts till i de binära sammansättningarna som genereras av projektet.

Källa: opennet.ru

Lägg en kommentar