Liberazione di a suite di compilatori LLVM 13.0

Dopu à sei mesi di sviluppu, a liberazione di u prughjettu LLVM 13.0 hè presentata - un toolkit compatibile cù GCC (compilatori, ottimizzatori è generatori di codice) chì compila i prugrammi in un bitcode intermediu di struzzioni virtuali simili à RISC (una macchina virtuale di livellu bassu cù un sistema di ottimisazione multi-livellu). U pseudo-codice generatu pò esse cunvertitu da u compilatore JIT in istruzzioni di a macchina ghjustu à u mumentu di l'esekzione di u prugramma.

Migliure in Clang 13.0:

  • Supportu implementatu per i chjami di coda garantiti (chjamà una subrutina à a fine di una funzione, furmendu una recursione di coda se a subrutina si chjama). U supportu per i chjami di coda garantita hè furnitu da l'attributu "[[clang::musttail]]" in C++ è "__attribute__((musttail))" in C, utilizatu in una dichjarazione "return". A funzione permette di implementà ottimisazioni implementendu u codice in una iterazione flat per salvà u cunsumu di stack.
  • "Usendu" dichjarazioni è estensioni di clang furniscenu supportu per definisce l'attributi in stile C++ 11 cù u formatu "[[]]".
  • Aggiuntu a bandiera "-Wreserved-identifier" per vede un avvisu quandu specificate identificatori riservati in u codice d'utilizatore.
  • Aghjunghjite "-Wunused-but-set-parameter" è "-Wunused-but-set-variable" bandiere per vede un avvisu se un paràmetru o variabile hè stabilitu ma micca utilizatu.
  • Aggiunta a bandiera "-Wnull-pointer-subtraction" per emette un avvisu se u codice puderia intruduce un cumpurtamentu indefinitu per via di l'usu di un puntatore nulu in operazioni di sottrazione.
  • Aghjunghjia a bandiera "-fstack-usage" per generà per ogni schedariu di codice un schedariu ".su" supplementu chì cuntene infurmazione nantu à a dimensione di stack frames per ogni funzione definita in u schedariu esse trattatu.
  • Un novu tipu di output hè statu aghjuntu à l'analizzatore staticu - "sarif-html", chì porta à a generazione di rapporti simultaneamente in formati HTML è Sarif. Aggiuntu un novu cuntrollu di allocClassWithName. Quandu si specifica l'opzione "-analyzer-display-progress", u tempu di analisi di ogni funzione hè visualizatu. L'analizzatore di puntatore intelligente (alpha.cplusplus.SmartPtr) hè quasi prontu.
  • E capacità assuciate cù u supportu OpenCL sò state allargate. Aghjunghje supportu per e novi estensioni cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields è __cl_clang_non_portable_kernel_param_types. L'implementazione di a specificazione OpenCL 3.0 hà cuntinuatu. Per C, a specificazione OpenCL 1.2 hè aduprata per automaticamente, salvu chì una altra versione hè esplicitamente scelta. Per C++, u supportu per i schedari cù l'estensione ".clcpp" hè statu aghjuntu.
  • U supportu per e direttive di trasfurmazioni di loop ("#pragma omp unrol" è "#pragma omp tile") definite in a specificazione OpenMP 5.1 hè stata implementata.
  • Opzioni aghjunte à l'utilità di clang-format: SpacesInLineCommentPrefix per definisce u nùmeru di spazii prima di i cumenti, IndentAccessModifiers, LambdaBodyIndentation è PPIndentWidth per cuntrullà l'allineamentu di e entrate, espressioni lambda è direttive di preprocessore. E pussibulità di sorte l'enumerazione di i fugliali di l'intestazione (SortIncludes) sò state allargate. Aghjunghje supportu per u furmatu di i fugliali JSON.
  • Una grande parte di novi cuntrolli sò stati aghjuntu à linter clang-tidy.

Innuvazioni chjave in LLVM 13.0:

  • Aggiunta l'opzione "-ehcontguard" per utilizà a tecnulugia CET (Windows Control-flow Enforcement Technology) per prutegge contra l'esekzione di sfruttamenti custruiti cù tecniche di Programmazione Orientata à Ritornu (ROP) in u stadiu di gestione di eccezzioni.
  • U prughjettu di debuginfo-test hè statu rinominatu cross-project-tests è hè pensatu per pruvà cumpunenti di diversi prughjetti, micca limitati à l'infurmazioni di debugging.
  • U sistema di assemblea furnisce supportu per custruisce parechje distribuzioni, per esempiu, una cù utilità, è l'altra cù biblioteche per sviluppatori.
  • In u backend per l'architettura AArch64, u supportu per l'estensioni Armv9-A RME (Realm Management Extension) è SME (Scalable Matrix Extension) hè implementatu in l'assembler.
  • U supportu per ISA V68 / HVX hè statu aghjuntu à u backend per l'architettura Hexagon.
  • U backend x86 hà migliuratu u supportu per i processori AMD Zen 3.
  • Aggiuntu supportu per GFX1013 RDNA2 APU à u backend AMDGPU.
  • Libc ++ cuntinueghja à implementà e funzioni novi di i standard C ++ 20 è C ++ 2b, cumpresa a cumpleta di a libreria "cuncetti". Aghjunghje supportu per std::filesystem per a piattaforma Windows basata in MinGW. I schedarii di header separati , È . Aggiunta l'opzione di creazione LIBCXX_ENABLE_INCOMPLETE_FEATURES per disattivà i fugliali di l'intestazione cù a funziunalità micca cumplettamente implementata.
  • E capacità di u linker LLD sò stati allargati, in quale hè implementatu u supportu per i processori Big-endian Aarch64, è u backend Mach-O hè statu purtatu à un statu chì permette di ligà i prugrammi regulari. Migliure incluse necessarie per ligà Glibc cù LLD.
  • L'utilità llvm-mca (Machine Code Analyzer) hà aghjustatu u supportu per i prucessori chì eseguinu struzzioni in ordine (pipeline superscalar in ordine), cum'è l'ARM Cortex-A55.
  • U debugger LLDB per a piattaforma AArch64 furnisce un supportu tutale per l'autenticazione di puntatore, i registri MTE (MemTag, Memory Tagging Extension) è SVE. Cumandamenti aghjunti chì permettenu di ligà e tag à ogni operazione di allocazione di memoria è urganizà un cuntrollu di u punteru quandu accede à a memoria, chì deve esse assuciatu cù l'etichetta curretta.
  • U debugger LLDB è u frontend per a lingua Fortran - Flang sò stati aghjuntu à l'assemblei binari generati da u prugettu.

Source: opennet.ru

Add a comment