LLVM 11.0 anländer med uppdatering till Python 3, förbättringar för RISC-V och mer

LLVM

Efter sex månaders utveckling lanseringen av den nya upplagan av LLVM 11.0-projektet har presenterats där flera förbättringar presenteras, såsom uppdateringen till Python 3, korrigeringar för att stödja experimentella instruktioner i RISC-V och många fler ändringar.

För dem som inte känner till LLVM bör de veta vad det är en GCC-kompatibel verktygslåda (kompilatorer, optimerare och kodgeneratorer) som sammanställer program till RISC-liknande bitkods mellanliggande virtuella instruktioner (lågnivå virtuell maskin med optimeringssystem på flera nivåer)

Den är utformad för att optimera kompileringstiden, bindningstiden, exekveringstiden på vilket programmeringsspråk som användaren vill definiera. Ursprungligen implementerat för att kompilera C och C ++, LLVM: s språkagnostiska design och projektframgång de har skapat en mängd olika språk.

Den genererade pseudokoden kan konverteras med JIT-kompilatorn till maskininstruktioner direkt vid tidpunkten för programkörningen.

De viktigaste nya funktionerna i LLVM 11.0

I den här nya versionen av LLVM 11.0 byggsystemet har flyttats för att använda Python 3Som sådan tvingas inte användningen av Python 3, eftersom om det inte är tillgängligt, är återställningsalternativet implementerat för att använda Python 2.

Attribut vektor-funktion-abi-variant har lagts till till mellanliggande representation (IR) för att beskriva kartläggningen mellan skalar- och vektorfunktioner för vektorisering samtal. Två separata vektortyper, llvm :: FixedVectorType och llvm :: ScalableVectorType, extraheras från llvm :: VectorType.

Odefinierat beteende är undef-baserat förgrening och överföring från odefinierade värden till standardbiblioteksfunktioner.

I memset / memcpy / memmove är det tillåtet att skicka odefinierade pekare, men om parametern med storleken är lika med noll.

LLJIT lägger till stöd för att göra statiska initialiseringar genom metoderna LLJIT :: initialisera och LLJIT :: deinitialisera.

Lade till förmåga att lägga till statiska bibliotek till JITDylib med hjälp av klassen StaticLibraryDefinitionGenerator. Lade till C API för ORCv2 (API för att skapa JIT-kompilatorer).

För att förbättra stödet för de olika processorarkitekturerna:

  • Lagt till stöd för Cortex-A34, Cortex-A77, Cortex-A78 och Cortex-X1-processorer på baksidan av AArch64-arkitekturen. ARMv8.2-BF16 (BFloat16) och ARMv8.6-A-tillägg har implementerats, inklusive RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Activity Övervakar virtualisering) och ARMv8.0-DGH (tips för datainsamling).
  • Lagt till stöd för Cortex-M55, Cortex-A77, Cortex-A78 och Cortex-X1-processorer på ARM-backend. Implementerade förlängningarna Armv8.6-A Matrix Multiply och RMv8.2-AA32BF16 BFloat16.
  • Lagt till stöd för kodgenerering för POWER10-processorer i PowerPC-backend. Förbättrade loopoptimeringar och förbättrat stöd för flytande punktoperationer.
  • Arkitekturen backend RISC-V kan ta emot korrigeringar med stöd för experimentella utökade instruktionsuppsättningar som ännu inte officiellt har godkänts.

Utöver det, möjligheten att generera kod för bindningsfunktioner tillhandahålls integrerad med SVE-vektorinstruktioner.

Backend för AVR-arkitekturen har flyttats från den experimentella kategorin till de stabila som ingår i basfördelningen.

X86-backend stöder Intel AMX och TSXLDTRK instruktioner. Lagt till skydd mot LVI-attacker (Load Value Injection) och den allmänna mekanismen för undertryckande av spekulativ utförande av biverkningar implementerades också för att blockera attacker orsakade av spekulativ körning av operationer på CPU: n.

Av de andra förändringarna som sticker ut:

  • Backend för SystemZ-arkitekturen ger stöd för MemorySanitizer och LeakSanitizer.
  • Libc ++ lägger till stöd för matematisk konstant rubrikfil .
  • Utökade funktioner för LLD-länkaren.
  • Förbättrat ELF-stöd, inklusive tillagda alternativ "–lto-emit-asm", "–lto-whole-program-visible", "–print-archive-stats", "–shuffle-section", "–thinlto-single -module "," –Unique "," –rosegment "," –threads = N ".
  • Lagt till "–time-trace" -alternativet för att spara spårning till fil, som sedan kan analyseras genom chrome: // trace-gränssnitt i Chrome.
  • Ett gränssnitt med en Go (llgo) kompilator har tagits bort från utgåvan och kan omstruktureras i framtiden.

Slutligen om du vill veta mer om det om den nya versionen kan du kontrollera detaljerna i följande länk.


Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för data: AB Internet Networks 2008 SL
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.