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.