Liberazione di a suite di compilatori LLVM 11.0

Dopu à sei mesi di sviluppu prisentatu liberazione di u prugettu LLVM 11.0 - Strumenti cumpatibili cù GCC (compilatori, ottimisatori è generatori di codice), cumpilendu prugrammi in codice di bit intermediu di struzzioni virtuali simili à RISC (macchina virtuale di livellu bassu cù un sistema di ottimisazione multi-livellu). U pseudocode generatu pò esse cunvertitu cù un compilatore JIT in struzzioni di a macchina direttamente à u mumentu di l'esekzione di u prugramma.

U cambiamentu chjave in a nova versione era l'inclusione di Flancu, frontend per a lingua Fortran. Flang supporta Fortran 2018, OpenMP 4.5 è OpenACC 3.0, ma u sviluppu di u prugettu ùn hè ancu finitu è ​​u front end hè limitatu à l'analisi di codice è a verificazione di a correttezza. A generazione di codice intermediu LLVM ùn hè ancu supportatu è per generà fugliali eseguibili, u codice canonicu hè generatu è passatu à un compilatore Fortran esternu.

Migliuramenti in Clang 11.0:

  • Aggiunta a capacità di restaurà l'arburu di sintassi astratta (AST) per u codice C++ rottu, chì pò esse usatu per aiutà à diagnosticà l'errori è furnisce infurmazioni supplementari à utilità esterne cum'è clang-tidy è clangd. A funzione hè attivata per difettu per u codice C++ è hè cuntrullata attraversu l'opzioni "-Xclang -f[no-]recovery-ast".
  • Aggiunti novi modi di diagnosticu:
    • "-Wpointer-to-int-cast" hè un gruppu di avvirtimenti nantu à u casting pointers à un tipu interu int chì ùn accoglie micca tutti i valori pussibuli.
    • "-Wuninitialized-const-reference" - avvistu di passà variabili non inizializzati in paràmetri di funzione chì accettanu argumenti di riferimentu cù l'attributu "const".
    • "-Wimplicit-const-int-float-conversion" - attivatu per difettu avvisu nantu à a cunversione implicita di una custante reale à un tipu interu.
  • Per a piattaforma ARM, e funzioni C integrate in u compilatore sò furnite (Intrinseci), rimpiazzati da istruzzioni vettoriali efficienti Arm v8.1-M MVE è CDE. E funzioni dispunibuli sò definite in i schedarii di header arm_mve.h è arm_cde.h.
  • Aggiuntu un inseme di tipi interi estesi _ExtInt(N), chì vi permettenu di creà tipi chì ùn sò micca multiplici di putenzi di dui, chì ponu esse processati in modu efficiente nantu à FPGA / HLS. Per esempiu, _ExtInt(7) definisce un tipu interu custituitu di 7 bits.
  • Aghjunghje macros chì definiscenu u supportu per e funzioni C integrate basate nantu à l'istruzzioni ARM SVE (Scalable Vector Extension):
    __ARM_FEATURE_SVE, __ARM_FEATURE_SVE_BF16,
    __ARM_FEATURE_SVE_MATMUL_FP32, __ARM_FEATURE_SVE_MATMUL_FP64,
    __ARM_FEATURE_SVE_MATMUL_INT8,
    __ARM_FEATURE_SVE2, __ARM_FEATURE_SVE2_AES,
    __ARM_FEATURE_SVE2_BITPERM,
    __ARM_FEATURE_SVE2_SHA3,
    __ARM_FEATURE_SVE2_SM4. Per esempiu, a macro __ARM_FEATURE_SVE hè definita quandu generà u codice AArch64 cù l'opzione di linea di cumanda "-march=armv8-a+sve".

  • A bandiera "-O" hè avà identificata cù u modu di ottimisazione "-O1" invece di "-O2".
  • Aggiunti novi bandieri di compilatore:
    • "-fstack-clash-protection" - permette a prutezzione contru intersezioni di stack and heap.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" - permette di selezziunà u modu di gestione d'eccezzioni per i numeri in virgule flottante.
    • "-ffp-model={precise,strict,fast}" - Simplifica l'accessu à una seria d'opzioni specializate per i numeri in virgule flottante.
    • "-fpch-codegen" è "-fpch-debuginfo" per generà un header precompilatu (PCH) cù schedarii d'ughjettu separati per u codice è debuginfo.
    • "-fsanitize-coverage-allowlist" è "-fsanitize-coverage-blocklist" per cuntrollà a prova di copertura di e liste bianche è nere.
    • "-mtls-size={12,24,32,48}" per selezziunà a dimensione TLS (almacenamiento locale di filu).
    • "-menable-experimental-extension" per attivà estensioni sperimentali RISC-V.
  • U modu predeterminatu per C hè "-fno-common", chì permette un accessu più efficau à e variàbili glubale in certi piattaforme.
  • A cache di u modulu predeterminatu hè stata spustata da /tmp à u repertoriu ~/.cache. Per annullà, pudete aduprà a bandiera "-fmodules-cache-path=".
  • U standard di lingua C predeterminatu hè statu aghjurnatu da gnu11 à gnu17.
  • Aggiuntu supportu preliminare per l'estensione GNU C "asm in linea» per aghjunghje inserti di assembler. L'estensione hè sempre analizata, ma micca trattata in ogni modu.
  • E capacità assuciate cù u supportu OpenCL è CUDA sò state allargate. Aggiuntu supportu per i diagnostichi di blocchi OpenCL 2.0 è implementatu novi funzioni OpenMP 5.0.
  • Aggiunta l'opzione IndentExternBlock à l'utilità di clang-format per l'allinjamentu in blocchi esterni "C" è esterni "C++".
  • L'analizzatore staticu hà migliurà a gestione di i custruttori ereditati in C++. Aghjunghjite novi cuntrolli alpha.core.C11Lock è alpha.fuchsia.Lock per verificà i chjusi, alpha.security.cert.pos.34c per detectà l'usu inseguru di putenv, webkit.NoUncountedMemberChecker è webkit.RefCntblBaseVirtualDtor per detectà prublemi cù tipi innumerabili, alpha. .cplusplus .SmartPtr per verificà a deferenza di puntatore intelligente null.
  • In linter clang-tidy aghjustatu una grande parte di novi cuntrolli.
  • U servitore di caching clangd (Clang Server) hà migliuratu u rendiment è aghjustatu novi capacità di diagnostica.

menu innovazioni LLVM 11.0:

  • U sistema di custruzzione hè stata cambiata per utilizà Python 3. Se Python 3 ùn hè micca dispunibule, hè pussibule di rollback à utilizà Python 2.
  • U front end cù u compilatore per a lingua Go (llgo) hè esclusu da a liberazione, chì pò esse ristrutturata in u futuru.
  • L'attributu vector-function-abi-variant hè statu aghjuntu à a rapprisentazione intermediata (IR) per discrìviri a mappatura trà e funzioni scalari è vettoriali per vectorize chjamate. Da llvm::VectorType ci sò dui tipi di vettori separati llvm::FixedVectorType è llvm::ScalableVectorType.
  • Branching basatu annantu à i valori udef è u passaghju di valori undef à e funzioni standard di a biblioteca hè ricunnisciutu cum'è un cumpurtamentu indefinitu. IN
    memset/memcpy/memmove permette di passà punters undef, ma se u paràmetru cù a dimensione hè zero.

  • LLJIT hà aghjustatu supportu per eseguisce inizializzazioni statiche attraversu i metudi LLJIT::initialize è LLJIT::deinitialize. A capacità di aghjunghje librerie statiche à JITDylib utilizendu a classa StaticLibraryDefinitionGenerator hè stata implementata. Aggiunta C API per ORCv2 (API per a creazione di compilatori JIT).
  • U supportu per i processori Cortex-A64, Cortex-A34, Cortex-A77 è Cortex-X78 hè statu aghjuntu à u backend per l'architettura AArch1. Implementazione ARMv8.2-BF16 (BFloat16) è estensioni ARMv8.6-A, cumprese RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Activity Monitors Virtualization) è ARMv8.0-DGH (suggerimentu di raccolta di dati). A capacità di generà codice per funzioni integrate-bindings à l'istruzzioni vettoriali SVE hè furnita.
  • U supportu per i processori Cortex-M55, Cortex-A77, Cortex-A78 è Cortex-X1 hè statu aghjuntu à u backend per l'architettura ARM. Estensioni implementate
    Armv8.6-A Matrix Multiply è RMv8.2-AA32BF16 BFloat16.

  • U supportu per a generazione di codice per i processori POWER10 hè statu aghjuntu à u backend per l'architettura PowerPC. L'ottimisazioni di loop sò state allargate è u supportu in virgule flottante hè statu migliuratu.
  • U backend per l'architettura RISC-V permette l'accettazione di patches chì supportanu i setti di struzzioni estesi sperimentali chì ùn sò micca stati appruvati ufficialmente.
  • U backend per l'architettura AVR hè stata trasferita da a categuria sperimentale à stabile, inclusa in a distribuzione basica.
  • U backend per l'architettura x86 supporta l'istruzzioni Intel AMX è TSXLDTRK. Prutezzione aghjuntu contr'à attacchi LVI (Load Value Injection), è implementa ancu un mecanismu generale di Suppressione di l'Effetti Laterali di Esecuzione Speculativa per bluccà l'attacchi causati da l'esekzione speculativa di l'operazioni nantu à u CPU.
  • In u backend per l'architettura SystemZ, u supportu per MemorySanitizer è LeakSanitizer hè statu aghjuntu.
  • Aggiuntu supportu per u file header cù custanti matematichi à Libc++ .
  • Expanded Capacità di linker LLD. Supportu migliuratu per u formatu ELF, cumprese l'opzioni aghjunte "--lto-emit-asm", "--lto-whole-program-visibility", "-print-archive-stats", "-shuffle-sections", " -thinlto- single-module", "-unique", "-rosegment", "-threads=N". Aggiunta l'opzione "--time-trace" per salvà a traccia in un schedariu, chì pò esse analizatu per via di l'interfaccia chrome://tracing in Chrome.

Source: opennet.ru

Add a comment