LLVM 11.0 ankommer med opdatering til Python 3, forbedringer til RISC-V og mere

LLVM

Efter seks måneders udvikling udgivelsen af ​​den nye udgave af LLVM 11.0-projektet er blevet præsenteret hvori forskellige forbedringer præsenteres, såsom opdateringen til Python 3, patches til understøttelse af eksperimentelle instruktioner i RISC-V og mange flere ændringer.

For dem, der ikke kender til LLVM, skal de vide, at det er det et GCC-kompatibelt værktøjssæt (kompilatorer, optimerere og kodegeneratorer), der kompilerer programmer til bitcode mellemliggende virtuelle instruktioner svarende til RISC (lavt niveau virtuel maskine med et multi-level optimeringssystem).

Det er designet til at optimere kompileringstiden., linktiden, udførelsestiden i et hvilket som helst programmeringssprog, som brugeren ønsker at definere. Oprindeligt implementeret til at kompilere C og C++, det sprogagnostiske design af LLVM og projektets succes De har affødt en bred vifte af sprog.

Den genererede pseudokode kan konverteres ved hjælp af JIT-kompileren til maskininstruktioner direkte på programudførelsestidspunktet.

Vigtigste nye funktioner i LLVM 11.0

I denne nye version af LLVM 11.0 byggesystemet er blevet flyttet til at bruge Python 3, som sådan er brugen af ​​Python 3 ikke tvunget, da i tilfælde af at den ikke er tilgængelig, implementeres rollback-muligheden til at bruge Python 2.

Attribut vektor-funktion-abi-variant er blevet tilføjet til mellemrepræsentation (IR) at beskrive kortlægningen mellem skalar- og vektorfunktioner til vektorering af opkald. To separate vektortyper, llvm ::FixedVectorType og llvm::ScalableVectorType, uddrages fra llvm::VectorType.

Den udefinerede adfærd er forgrening baseret på undef og videregivelse af udefinerede værdier til standard biblioteksfunktioner.

I memset/memcpy/memmove er det tilladt at sende udefinerede pointere, men hvis størrelsesparameteren er lig nul.

LLJIT tilføjer understøttelse til at udføre statiske initialiseringer gennem metoderne LLJIT::initialize og LLJIT::deinitialize.

Tilføjet mulighed for at tilføje statiske biblioteker til JITDylib ved at bruge klassen StaticLibraryDefinitionGenerator. Tilføjet C API til ORCv2 (API til oprettelse af JIT-kompilere).

Med hensyn til at forbedre understøttelsen af ​​de forskellige processorarkitekturer:

  • Tilføjet understøttelse af Cortex-A34, Cortex-A77, Cortex-A78 og Cortex-X1 processorer i backend af AArch64-arkitekturen. Implementeret ARMv8.2-BF16 (BFloat16) og ARMv8.6-A udvidelser, inklusive RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Activity Monitors virtualization) og ARMv8.0-DGH (tip til dataindsamling).
  • Tilføjet understøttelse af Cortex-M55, Cortex-A77, Cortex-A78 og Cortex-X1-processorer på ARM-backend. Implementerede Armv8.6-A Matrix Multiply og RMv8.2-AA32BF16 BFloat16 udvidelser.
  • Tilføjet understøttelse af kodegenerering til POWER10-processorer i PowerPC-backend. Forbedrede sløjfeoptimeringer og forbedret understøttelse af floating point-operationer.
  • Baggrunden for arkitekturen RISC-V kan modtage patches med support til eksperimentelle udvidede instruktionssæt, der endnu ikke er officielt godkendt.

Ud over det muligheden for at generere kode til hook-funktioner er tilvejebragt indbygget i SVE vektor instruktioner.

Backend for AVR-arkitekturen er flyttet fra den eksperimentelle kategori til de stabile, der indgår i basisfordelingen.

x86-backend understøtter Intel AMX og TSXLDTRK instruktioner. Tilføjet beskyttelse mod LVI-angreb (Load Value Injection) og den generelle Speculative Execution Side Effect Suppression-mekanisme blev også implementeret for at blokere angreb forårsaget af spekulativ udførelse af operationer på CPU'en.

Af de andre ændringer, der skiller sig ud:

  • Backend til SystemZ-arkitekturen tilføjer understøttelse af MemorySanitizer og LeakSanitizer.
  • Libc++ tilføjer understøttelse af matematiske konstanter header-fil .
  • Udvidede muligheder for LLD-linkeren.
  • Forbedret ELF-understøttelse, inklusive tilføjede muligheder "–lto-emit-asm", "–lto-whole-program-visible", "–print-archive-stats", "–shuffle-section", "–thinlto-single -module ”, “–unik”, “–rosegment”, “–tråde = N”.
  • Tilføjet mulighed "–time-trace" for at gemme sporet til en fil, som derefter kan parses via chrome://trace-grænsefladen i Chrome.
  • En grænseflade til en Go-kompiler (llgo) er blevet fjernet fra udgivelsen og kan blive omstruktureret i fremtiden.

Endelig hvis du vil vide mere om det om denne nye version, kan du konsultere detaljerne i følgende link.


Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for data: AB Internet Networks 2008 SL
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.