LLVM 11.0 kommer med oppdatering til Python 3, forbedringer for RISC-V og mer

LLVM

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.


Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: AB Internet Networks 2008 SL
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.