Etter seks måneders utvikling lanseringen av den nye utgaven av LLVM 11.0-prosjektet har blitt presentert der flere forbedringer presenteres, som oppdateringen til Python 3, oppdateringer for å støtte eksperimentelle instruksjoner i RISC-V og mange flere endringer.
For de som ikke er kjent med LLVM, bør de vite hva det er et GCC-kompatibelt verktøysett (kompilatorer, optimaliserere og kodegeneratorer) som kompilerer programmer til RISC-lignende bitkode mellomvirusinstruksjoner (lavnivå virtuell maskin med flernivå optimaliseringssystem)
Den er designet for å optimalisere kompileringstid, bindingstiden, utførelsestiden i ethvert programmeringsspråk som brukeren vil definere. Opprinnelig implementert for å kompilere C og C ++, LLVMs språkagnostiske design og prosjektsuksess de har skapt et bredt utvalg av språk.
Den genererte pseudokoden kan konverteres ved hjelp av JIT-kompilatoren til maskininstruksjoner direkte på tidspunktet for programutførelsen.
Viktigste nye funksjoner i LLVM 11.0
I denne nye versjonen av LLVM 11.0 byggesystemet er flyttet til å bruke Python 3Som sådan er ikke bruk av Python 3 tvunget, siden i tilfelle det ikke er tilgjengelig, er tilbakeføringsalternativet implementert for å bruke Python 2.
Egenskap vektor-funksjon-abi-variant er lagt til til mellomrepresentasjon (IR) for å beskrive kartleggingen mellom skalar- og vektorfunksjoner for vektorisering samtaler. To separate vektortyper, llvm :: FixedVectorType og llvm :: ScalableVectorType, er hentet fra llvm :: VectorType.
Udefinert oppførsel er udef-basert forgrening og overføring fra udefinerte verdier til standard bibliotekfunksjoner.
I memset / memcpy / memmove er det tillatt å passere udefinerte pekere, men hvis parameteren med størrelsen er lik null.
LLJIT legger til støtte for å gjøre statiske initialiseringer gjennom metodene LLJIT :: initialize og LLJIT :: deinitialize.
Lagt til muligheten til å legge til statiske biblioteker i JITDylib ved hjelp av klassen StaticLibraryDefinitionGenerator. Lagt til C API for ORCv2 (API for å lage JIT-kompilatorer).
Fra den delen av forbedringen av støtten til de forskjellige prosessorarkitekturene:
- La til støtte for Cortex-A34, Cortex-A77, Cortex-A78 og Cortex-X1 prosessorer på bakenden av AArch64-arkitekturen. ARMv8.2-BF16 (BFloat16) og ARMv8.6-A-utvidelsene er implementert, inkludert RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Activity Overvåker virtualisering) og ARMv8.0-DGH (hint om datainnsamling).
- Lagt til støtte for Cortex-M55, Cortex-A77, Cortex-A78 og Cortex-X1 prosessorer på ARM-backend. Implementerte Armv8.6-A Matrix Multiply og RMv8.2-AA32BF16 BFloat16 utvidelser.
- Lagt til støtte for kodegenerering for POWER10-prosessorer i PowerPC-backend. Forbedrede løkkeoptimaliseringer og forbedret støtte for flytende punktoperasjoner.
- Arkitekturens bakside RISC-V kan motta oppdateringer med støtte for eksperimentelle utvidede instruksjonssett som ennå ikke er offisielt godkjent.
I tillegg til det, muligheten til å generere kode for bindende funksjoner er gitt integrert i vektor SVE-instruksjoner.
Bakenden for AVR-arkitekturen er flyttet fra den eksperimentelle kategorien til de stabile som er inkludert i basedistribusjonen.
X86-backend støtter Intel AMX og TSXLDTRK instruksjoner. Lagt til beskyttelse mot LVI-angrep (Load Value Injection) og den generelle spekulative utførelsen bivirkningsundertrykkelsesmekanismen ble også implementert for å blokkere angrep forårsaket av spekulativ kjøring av operasjoner på CPU.
Av de andre endringene som skiller seg ut:
- Bakenden for SystemZ-arkitekturen gir støtte for MemorySanitizer og LeakSanitizer.
- Libc ++ legger til støtte for matematisk konstant topptekstfil .
- Utvidede muligheter for LLD linker.
- Forbedret ELF-støtte, inkludert tilleggsutstyr "–lto-emit-asm", "–lto-whole-program-visible", "–print-archive-stats", "–shuffle-section", "–thinlto-single -module "," –Unique "," –rosegment "," –threads = N ".
- Lagt til "–time-trace" -alternativet for å lagre spor i fil, som deretter kan analyseres gjennom Chrome: // Trace-grensesnitt i Chrome.
- Et grensesnitt med en Go (llgo) kompilator er fjernet fra utgivelsen og kan bli omstrukturert i fremtiden.
Endelig hvis du vil vite mer om det om denne nye versjonen, kan du sjekke detaljene i følgende lenke.