LLVM 11.0 ajunge cu actualizare la Python 3, îmbunătățiri pentru RISC-V și multe altele

LLVM

După șase luni de dezvoltare a fost prezentată lansarea noii ediții a proiectului LLVM 11.0 în care sunt prezentate mai multe îmbunătățiri, cum ar fi actualizarea la Python 3, patch-uri pentru a sprijini instrucțiunile experimentale în RISC-V și multe alte modificări.

Pentru cei care nu sunt familiarizați cu LLVM, ar trebui să știe ce este un set de instrumente compatibil GCC (compilatoare, optimizatoare și generatoare de cod) care compilează programe în instrucțiuni virtuale intermediare de tip bit-cod RISC (mașină virtuală de nivel scăzut cu un sistem de optimizare pe mai multe niveluri).

Este conceput pentru a optimiza timpul de compilare, timpul de legare, timpul de execuție în orice limbaj de programare dorește să definească utilizatorul. Implementat inițial pentru a compila C și C ++, Designul agnostic al limbajului LLVM și succesul proiectului au generat o mare varietate de limbi.

Pseudocodul generat poate fi convertit folosind compilatorul JIT în instrucțiuni ale mașinii direct în momentul executării programului.

Principalele caracteristici noi ale LLVM 11.0

În această nouă versiune a LLVM 11.0 sistemul de construire a fost mutat pentru a utiliza Python 3Ca atare, utilizarea Python 3 nu este forțată, deoarece, în cazul în care nu este disponibilă, opțiunea de revenire este implementată pentru a utiliza Python 2.

Atribut s-a adăugat vector-function-abi-variant la reprezentare intermediară (IR) pentru a descrie maparea între funcțiile scalare și vectoriale pentru apeluri de vectorizare. Două tipuri separate de vectori, llvm :: FixedVectorType și llvm :: ScalableVectorType, sunt extrase din llvm :: VectorType.

Comportamentul nedefinit este ramificarea nedefinită și trecerea de la valori nedefinite la funcțiile de bibliotecă standard.

În memset / memcpy / memmove, este permis să treacă pointeri nedefiniți, dar dacă parametrul cu dimensiunea este egal cu zero.

LLJIT adaugă suport pentru efectuarea inițializărilor statice prin metodele LLJIT :: initialize și LLJIT :: deinitialize.

A fost adăugat capacitatea de a adăuga biblioteci statice la JITDylib folosind clasa StaticLibraryDefinitionGenerator. Adăugat C API pentru ORCv2 (API pentru crearea compilatoarelor JIT).

Din partea îmbunătățirii suportului pentru diferite arhitecturi de procesor:

  • Adăugat suport pentru procesoarele Cortex-A34, Cortex-A77, Cortex-A78 și Cortex-X1 în backend-ul arhitecturii AArch64. Au fost implementate extensiile ARMv8.2-BF16 (BFloat16) și ARMv8.6-A, inclusiv RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Capete cu granulație fină), ARMv8.6-AMU (Activitate) Monitorizează virtualizarea) și ARMv8.0-DGH (indiciu pentru colectarea datelor).
  • S-a adăugat suport pentru procesoarele Cortex-M55, Cortex-A77, Cortex-A78 și Cortex-X1 pe backend-ul ARM. Am implementat extensiile Armv8.6-A Matrix Multiply și RMv8.2-AA32BF16 BFloat16.
  • S-a adăugat suport pentru generarea de cod pentru procesoarele POWER10 din backend-ul PowerPC. Optimizări îmbunătățite ale buclei și suport îmbunătățit pentru operațiile în virgulă mobilă.
  • Backend-ul arhitectural RISC-V poate primi patch-uri cu suport pentru seturi de instrucțiuni extinse experimentale care nu au fost încă aprobate oficial.

Pe lângă aceasta, este asigurată capacitatea de a genera cod pentru funcții de legare integrat instrucțiunilor SVE vectoriale.

Backend-ul pentru arhitectura AVR a fost mutat din categoria experimentală în cele stabile incluse în distribuția de bază.

Backend-ul x86 acceptă instrucțiunile Intel AMX și TSXLDTRK. S-a adăugat protecție împotriva atacurilor LVI (Load Value Injection) și mecanismul general de suprimare a efectelor secundare ale execuției speculative au fost de asemenea implementate pentru a bloca atacurile cauzate de execuția speculativă a operațiilor pe CPU.

Dintre celelalte schimbări care se remarcă:

  • Backend-ul pentru arhitectura SystemZ adaugă suport pentru MemorySanitizer și LeakSanitizer.
  • Libc ++ adaugă suport pentru fișierul antet matematic constant .
  • Capabilități extinse de linker LLD.
  • Suport ELF îmbunătățit, inclusiv opțiunile adăugate „–lto-emit-asm”, „–lto-întreg-program-vizibil”, „–print-arhivă-statistici”, „–shuffle-section”, „–thinlto-single -module "," –Unică "," –rosegment "," –file = N ".
  • S-a adăugat opțiunea „–trag de timp” pentru a salva urmărirea în fișier, care poate fi apoi analizată prin interfața chrome: // trace din Chrome.
  • O interfață cu un compilator Go (llgo) a fost eliminată din versiune și poate fi restructurată în viitor.

În cele din urmă dacă vrei să afli mai multe despre asta despre această nouă versiune, puteți verifica detaliile din următorul link.


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: AB Internet Networks 2008 SL
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.