LLVM 16.0 ed è stato rilasciato e queste sono le sue novità

Logo LLVM

LLVM è un framework per lo sviluppo di compilatori, oltre ad aiutare a costruire nuovi linguaggi di programmazione e migliorare i linguaggi esistenti.

Dopo poco più di sei mesi di sviluppo, il lancio di la nuova versione del progetto LLVM 16.0, versione in cui viene implementato un gran numero di modifiche e miglioramenti.

Per chi non ha familiarità con LLVM, dovresti sapere che questo è un compilatore compatibile con GCC (compilatori, ottimizzatori e generatori di codice) che compila i programmi in un bitcode intermedio di istruzione virtuale simile a RISC (una macchina virtuale di basso livello con un sistema di ottimizzazione multilivello).

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

Principali novità di LLVM 16.0

In questa nuova versione che viene presentata, possiamo trovare diversi importanti miglioramenti nel clangore 16.0, di cui spicca lo standard predefinito C++/ObjC++, che è impostato su gnu++17 (precedentemente gnu++14), che implica il supporto per le funzionalità C++ 17 con estensioni GNU per impostazione predefinita. L'uso di elementi definiti nello standard C++17 è consentito nel codice LLVM.

Un altro dei cambiamenti che spicca è che è stato aggiunto supporto per CPU Cortex-A715, Cortex-X3 e Neoverse V2, estensioni Armv8.3 e funzionalità multi-versione per il backend AArch64.
La compatibilità della piattaforma Armv2, Armv2A, Armv3 e Armv3M sono stati interrotti nel backend dell'architettura ARM, per il quale non era garantita la corretta generazione del codice. Aggiunta la possibilità di generare codice per le istruzioni per lavorare con numeri complessi e aggiunta supporto per le architetture di set di istruzioni (ISA) AMX-FP16, CMPCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT al back-end X86.

A parte quello, i requisiti per la costruzione di LLVM sono stati aumentati, Anche la build ora dovrebbe essere compatibile con lo standard C++17, ovvero la build richiede almeno GCC 7.1, Clang 5.0, Apple Clang 10.0 o Visual Studio 2019 16.7.

D'altra parte, mette anche in evidenza backend migliorati per le architetture MIPS, PowerPC e RISC-V, oltre al supporto per il debug degli eseguibili a 64 bit per l'architettura LoongArch nel debugger LLDB e una migliore gestione dei simboli di debug COFF.

Delle altre modifiche che risaltano:

  • Nella libreria Libc++, il lavoro principale si è concentrato sull'implementazione del supporto per le nuove funzionalità degli standard C++20 e C++23.
  • Il tempo di collegamento è stato notevolmente ridotto nel linker LDD parallelizzando la scansione del riposizionamento dell'indirizzo e le operazioni di inizializzazione della sezione. Aggiunto il supporto per la compressione delle sezioni utilizzando l'algoritmo ZSTD.
  • Sono inoltre evidenziate le funzionalità avanzate implementate con lo standard C++20.
  • acquisire collegamenti strutturati nelle funzioni lambda.
  • L'operatore di uguaglianza all'interno delle espressioni.
  • Possibilità di non specificare la parola chiave typename in alcuni contesti,
  • Consentibilità dell'inizializzazione aggiunta tra parentesi ("Aggr(val1, val2)").
  • Funzioni implementate definite nel futuro standard C++2b.
  • Supporto fornito con il tipo char8_t,
  • Esteso l'intervallo di caratteri consentiti per l'uso in "\N{…}",
  • Aggiunta la possibilità di usare variabili dichiarate come "static constexpr" nelle funzioni dichiarate come constexpr.
  • Funzioni implementate definite nel futuro standard C2x C:
  • Aggiunto il supporto per il caricamento di più file di configurazione (i file di configurazione predefiniti vengono caricati per primi, quindi quelli specificati tramite il flag "–config=", che ora può essere specificato più volte).
  • Modificato l'ordine di caricamento dei file di configurazione predefiniti: clang tenta di caricare prima il file - .cfg e se non riesce a trovarlo, prova a caricare due file .cfg e .cfg.
  • Aggiunto un nuovo flag di build "-fcoro-aligned-allocation" per la distribuzione allineata ai frame di routine.
  • Aggiunto il flag "-fmodule-output" per abilitare il modello di build a fase singola dei moduli C++ standard.
  • Aggiunta la modalità "-Rpass-analysis=stack-frame-layout" per diagnosticare i problemi con il layout dello stack frame.
  • Aggiunto un nuovo attributo __attribute__((target_version("cpu_features"))) ed estesa la funzionalità dell'attributo __attribute__((target_clones("cpu_features1″,"cpu_features2",…))) per selezionare versioni specifiche delle funzionalità fornite dalla CPU AArch64 .
  • Strumenti diagnostici avanzati:
  • Aggiunto avviso "-Wsingle-bit-bitfield-constant-conversion" per rilevare il troncamento implicito quando si assegna uno a un bitfield con segno a un bit.
  • Diagnostica estesa per variabili constexpr non inizializzate.
  • Aggiunti avvisi "-Wcast-function-type-strict" e "-Wincompatible-function-pointer-types-strict" per rilevare potenziali problemi durante il cast dei tipi di funzione.

Infine Se sei interessato a saperne di più, puoi controllare i dettagli nel file 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.