LLVM 11.0 arriba amb actualització a Python 3, millores per RISC-V i mes

LLVM

Després de sis mesos de desenvolupament s'ha presentat el llançament de la nova edició de el projecte LLVM 11.0 en la qual es presenten diverses millores, com ara l'actualització a Python 3, pegats per admetre instruccions experimentals en RISC-V i molts canvis més.

Per als qui desconeixen de LLVM, han de saber que és un kit d'eines compatible amb GCC (Compiladors, optimitzadors i generadors de codi) que compila programes en instruccions virtuals intermèdies de codi de bits similars a RISC (màquina virtual de baix nivell amb un sistema d'optimització de múltiples nivells).

Està dissenyada per optimitzar el temps de compilació, El temps d'enllaçat, el temps d'execució en qualsevol llenguatge de programació que l'usuari vulgui definir. Implementat originalment per compilar C i C ++, El disseny agnòstic de LLVM pel que fa a el llenguatge, i l'èxit de el projecte han engendrat una àmplia varietat de llenguatges.

El pseudocodi generat pot convertir utilitzant el compilador JIT en instruccions de màquina directament en el moment de l'execució de el programa.

Principals novetats de LLVM 11.0

En aquesta nova versio de LLVM 11.0 el sistema de compilació s'ha mogut per utilitzar Python 3, Com a tal l'ús de Python 3 no és forçat, ja que en cas que no està disponible, l'opció de reversió s'implementa per utilitzar Python 2.

l'atribut vector-function-abi-variant s'ha afegit a la representació intermèdia (IR) per descriure el mapatge entre les funcions escalars i vectorials per a les trucades de vectorització. Dos tipus de vectors separats, LLVM :: FixedVectorType i LLVM :: ScalableVectorType, s'extreuen de LLVM :: VectorType.

El comportament indefinit és la ramificació basada en undef i el pas de valors indefinits a funcions de biblioteca estàndard.

En memset / memcpy / memmove, es permet passar punters indefinits, però si el paràmetre amb la mida és igual a zero.

LLJIT afegeix suport per a realitzar inicialitzacions estàtiques a través dels mètodes LLJIT :: initialize i LLJIT :: deinitialize.

Es va agregar la capacitat d'agregar biblioteques estàtiques a JITDylib utilitzant la classe StaticLibraryDefinitionGenerator. Es va agregar C API per ORCv2 (API per crear compiladors JIT).

Per la part de la millora de suport per a les diferents arquitectures de processadors:

  • es va agregar suport pels processadors Cortex-A34, Cortex-A77, Cortex-A78 i Cortex-X1 en el backend de l'arquitectura AArch64. Es van implementar les extensions ARMv8.2-BF16 (BFloat16) i ARMv8.6-A, que inclouen RMv8.6-MCV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine grained Traps), ARMv8.6-AMU (Activity monitors virtualization) i ARMv8.0-DGH (suggeriment de recopilació de dades).
  • Es va agregar suport per als processadors Cortex-M55, Cortex-A77, Cortex-A78 i Cortex-X1 en el backend ARM. Va implementar les extensions Armv8.6-A Matrix Multiply i RMv8.2-AA32BF16 BFloat16.
  • Es va agregar suport per a la generació de codi per a processadors POWER10 al backend de PowerPC. Optimitzacions de bucle millorades i suport millorat per a operacions de punt flotant.
  • El rerefons de l'arquitectura RISC-V pot rebre pegats amb suport per conjunts d'instruccions esteses experimentals que encara no s'han aprovat oficialment.

A més d'això, es proporciona la capacitat de generar codi per a funcions d'enllaç integrades a instruccions vectorials SVE.

El backend per a l'arquitectura AVR s'ha mogut de la categoria experimental a les estables incloses en la distribució base.

El backend x86 admet instruccions Intel AMX i TSXLDTRK. Es va agregar protecció contra atacs LVI (Load Value Injection) i també es va implementar el mecanisme general de supressió d'efectes secundaris d'execució especulativa per bloquejar atacs causats per l'execució especulativa d'operacions a la CPU.

Dels altres canvis que es destaquen:

  • El backend per a l'arquitectura SystemZ agrega suport per MemorySanitizer i LeakSanitizer.
  • Libc ++ afegeix suport per a l'arxiu de capçalera de constants matemàtiques .
  • Capacitats ampliades de l'enllaçador LLD.
  • Compatibilitat amb ELF millorada, incloses les opcions agregades «-lto-emit-asm», «-lto-whole-program-visible», «-print-archive-stats», «-shuffle-section», «-thinlto-single -module »,« -unique »,« -rosegment »,« -threads = N ».
  • Es va agregar l'opció «-time-traci» per guardar el rastreig en un arxiu, que després es pot analitzar a través de la interfície de rastreig chrome: // a Chrome.
  • Una interfície amb un compilador Go (llgo) s'ha eliminat de la versió i pot reestructurar-se en el futur.

Finalment si vols conèixer més a l'respecte sobre aquesta nova versió, pots consultar els detalls en el següent enllaç.


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: AB Internet Networks 2008 SL
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.