LLVM 11.0 arriva con l'aggiornamento a Python 3, miglioramenti per RISC-V e altro ancora

LLVM

Dopo sei mesi di sviluppo è stato presentato il lancio della nuova edizione del progetto LLVM 11.0 in cui vengono presentati diversi miglioramenti, come l'aggiornamento a Python 3, patch per supportare le istruzioni sperimentali in RISC-V e molte altre modifiche.

Per coloro che non hanno familiarità con LLVM, dovrebbero sapere di cosa si tratta un toolkit conforme a GCC (compilatori, ottimizzatori e generatori di codice) che compila i programmi in istruzioni virtuali intermedie in codice bit simili a RISC (macchina virtuale di basso livello con un sistema di ottimizzazione multi-livello).

È progettato per ottimizzare i tempi di compilazione, il tempo di binding, il tempo di esecuzione in qualsiasi linguaggio di programmazione che l'utente vuole definire. Originariamente implementato per compilare C e C ++, Design indipendente dal linguaggio di LLVM e successo del progetto hanno generato un'ampia varietà di lingue.

Lo pseudocodice generato può essere convertito utilizzando il compilatore JIT in istruzioni macchina direttamente al momento dell'esecuzione del programma.

Principali novità di LLVM 11.0

In questa nuova versione di LLVM 11.0 il sistema di compilazione è stato spostato per utilizzare Python 3Come tale l'uso di Python 3 non è forzato, poiché nel caso in cui non fosse disponibile, viene implementata l'opzione rollback per usare Python 2.

Attributo è stata aggiunta la variante-funzione-vettore-abi alla rappresentazione intermedia (IR) descrivere la mappatura tra funzioni scalari e vettoriali per le chiamate di vettorizzazione. Due tipi di vettore separati, llvm :: FixedVectorType e llvm :: ScalableVectorType, vengono estratti da llvm :: VectorType.

Il comportamento indefinito è la ramificazione basata su undef e il passaggio da valori indefiniti a funzioni di libreria standard.

In memset / memcpy / memmove, è consentito passare puntatori indefiniti, ma se il parametro con la dimensione è uguale a zero.

LLJIT aggiunge il supporto per eseguire inizializzazioni statiche tramite i metodi LLJIT :: initialize e LLJIT :: deinitialize.

Aggiunto il possibilità di aggiungere librerie statiche a JITDylib utilizzando la classe StaticLibraryDefinitionGenerator. Aggiunta API C per ORCv2 (API per la creazione di compilatori JIT).

Da parte del miglioramento del supporto per le diverse architetture del processore:

  • Aggiunto supporto per processori Cortex-A34, Cortex-A77, Cortex-A78 e Cortex-X1 nel backend dell'architettura AArch64. Sono state implementate le estensioni ARMv8.2-BF16 (BFloat16) e ARMv8.6-A, tra cui RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Activity Monitora la virtualizzazione) e ARMv8.0-DGH (suggerimento per la raccolta dei dati).
  • Aggiunto supporto per processori Cortex-M55, Cortex-A77, Cortex-A78 e Cortex-X1 sul backend ARM. Implementate le estensioni Armv8.6-A Matrix Multiply e RMv8.2-AA32BF16 BFloat16.
  • Aggiunto supporto per la generazione di codice per i processori POWER10 nel backend PowerPC. Ottimizzazioni del ciclo migliorate e supporto migliorato per le operazioni in virgola mobile.
  • Il backend dell'architettura RISC-V può ricevere patch con supporto per i set di istruzioni estesi sperimentali che non sono stati ancora ufficialmente approvati.

Inoltre, viene fornita la capacità di generare codice per le funzioni di associazione integrato alle istruzioni SVE vettoriali.

Il backend per l'architettura AVR è stato spostato dalla categoria sperimentale a quelle stabili incluse nella distribuzione base.

Il backend x86 supporta le istruzioni Intel AMX e TSXLDTRK. Aggiunta protezione contro gli attacchi LVI (Load Value Injection) e il meccanismo generale di soppressione degli effetti collaterali dell'esecuzione speculativa sono stati implementati anche per bloccare gli attacchi causati dall'esecuzione speculativa di operazioni sulla CPU.

Tra le altre modifiche che si distinguono:

  • Il backend per l'architettura SystemZ aggiunge il supporto per MemorySanitizer e LeakSanitizer.
  • Libc ++ aggiunge il supporto per il file di intestazione delle costanti matematiche .
  • Funzionalità del linker LLD estese.
  • Supporto ELF migliorato, incluse opzioni aggiunte "–lto-emit-asm", "–lto-whole-program-visible", "–print-archive-stats", "–shuffle-section", "–thinlto-single -module "," –Unique "," –rosegment "," –threads = N ".
  • Aggiunta l'opzione "–time-trace" per salvare la traccia su file, che può quindi essere analizzata tramite l'interfaccia chrome: // trace in Chrome.
  • Un'interfaccia con un compilatore Go (llgo) è stata rimossa dalla versione e potrebbe essere ristrutturata in futuro.

Infine se vuoi saperne di più su questa nuova versione, puoi controllare i dettagli nel seguente link.


Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile del trattamento: AB Internet Networks 2008 SL
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.