Llançament del conjunt de compiladors LLVM 13.0

Després de sis mesos de desenvolupament, es va presentar el llançament del projecte LLVM 13.0: un conjunt d'eines compatible amb GCC (compiladors, optimitzadors i generadors de codi) que compila programes en codi de bits intermedi d'instruccions virtuals semblants a RISC (una màquina virtual de baix nivell amb un sistema d'optimització multinivell). El pseudocodi generat es pot convertir mitjançant un compilador JIT en instruccions de màquina directament en el moment de l'execució del programa.

Millores a Clang 13.0:

  • Suport implementat per a trucades de cua garantides (cridant a una subrutina al final d'una funció, formant una recursivitat de cua si la subrutina es crida a si mateixa). El suport per a les trucades de cua garantides és proporcionat per l'atribut "[[clang::musttail]]" en C++ i "__attribute__((musttail))" en C, utilitzat en una instrucció "return". La funció us permet implementar optimitzacions mitjançant la implementació de codi en una iteració plana per estalviar el consum de la pila.
  • "using" declaracions i extensions de clang proporcionen suport per definir atributs d'estil C++11 utilitzant el format "[[]]".
  • S'ha afegit la marca "-Wreserved-identifier" per mostrar un avís quan especifiqueu identificadors reservats al codi d'usuari.
  • S'han afegit els senyaladors "-Wunused-but-set-parameter" i "-Wunused-but-set-variable" per mostrar un avís si un paràmetre o una variable està establert però no s'utilitza.
  • S'ha afegit el senyalador "-Wnull-pointer-subtraction" per emetre un avís si el codi podria introduir un comportament no definit a causa de l'ús d'un punter nul en les operacions de resta.
  • S'ha afegit el senyalador "-fstack-usage" per generar per a cada fitxer de codi un fitxer ".su" addicional que conté informació sobre la mida dels marcs de pila per a cada funció definida al fitxer que s'està processant.
  • S'ha afegit un nou tipus de sortida a l'analitzador estàtic: "sarif-html", que condueix a la generació d'informes simultàniament en formats HTML i Sarif. S'ha afegit una nova comprovació allocClassWithName. Quan s'especifica l'opció "-analyzer-display-progress", es mostra el temps d'anàlisi de cada funció. L'analitzador de punter intel·ligent (alpha.cplusplus.SmartPtr) està gairebé a punt.
  • S'han ampliat les capacitats associades al suport d'OpenCL. S'ha afegit suport per a les noves extensions cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields i __cl_clang_non_portable_kernel_param_types. La implementació de l'especificació OpenCL 3.0 ha continuat. Per a C, l'especificació OpenCL 1.2 s'utilitza de manera predeterminada tret que se seleccioneu explícitament una altra versió. Per a C++, s'ha afegit suport per a fitxers amb l'extensió ".clcpp".
  • S'ha implementat el suport per a les directives de transformació de bucle ("#pragma omp unrol" i "#pragma omp tile") definides a l'especificació OpenMP 5.1.
  • S'han afegit opcions a la utilitat de format clang: SpacesInLineCommentPrefix per definir el nombre d'espais abans dels comentaris, IndentAccessModifiers, LambdaBodyIndentation i PPIndentWidth per controlar l'alineació d'entrades, expressions lambda i directives del preprocessador. S'han ampliat les possibilitats d'ordenar l'enumeració dels fitxers de capçalera (SortIncludes). S'ha afegit suport per formatar fitxers JSON.
  • S'han afegit una gran part de nous xecs a linter clang-tidy.

Innovacions clau en LLVM 13.0:

  • S'ha afegit l'opció "-ehcontguard" per utilitzar la tecnologia CET (Windows Control-flow Enforcement Technology) per protegir-se de l'execució d'explotacions creades mitjançant tècniques de programació orientada al retorn (ROP) en l'etapa de gestió d'excepcions.
  • El projecte debuginfo-test ha estat rebatejat com a cross-project-tests i està dissenyat per provar components de diferents projectes, sense limitar-se a la informació de depuració.
  • El sistema de muntatge proporciona suport per construir diverses distribucions, per exemple, una amb utilitats i l'altra amb biblioteques per a desenvolupadors.
  • Al backend de l'arquitectura AArch64, el suport per a les extensions Armv9-A RME (Extensió de gestió de domini) i SME (Extensió de matriu escalable) s'implementa a l'assemblador.
  • S'ha afegit suport per a ISA V68/HVX al backend per a l'arquitectura Hexagon.
  • El backend x86 ha millorat el suport per als processadors AMD Zen 3.
  • S'ha afegit suport per a l'APU GFX1013 RDNA2 al backend AMDGPU.
  • Libc++ continua implementant noves característiques dels estàndards C++20 i C++2b, inclosa la finalització de la biblioteca "conceptes". S'ha afegit suport per a std::filesystem per a la plataforma Windows basada en MinGW. Fitxers de capçalera separats , I . S'ha afegit l'opció de compilació LIBCXX_ENABLE_INCOMPLETE_FEATURES per desactivar els fitxers de capçalera amb una funcionalitat que no s'ha implementat completament.
  • S'han ampliat les capacitats de l'enllaçador LLD, en què s'implementa el suport per als processadors Big-endian Aarch64 i el backend Mach-O s'ha portat a un estat que permet enllaçar programes habituals. S'han inclòs millores necessàries per enllaçar Glibc mitjançant LLD.
  • La utilitat llvm-mca (Analitzador de codi de màquina) ha afegit suport per als processadors que executen instruccions en ordre (conducte superescalar en ordre), com ara l'ARM Cortex-A55.
  • El depurador LLDB per a la plataforma AArch64 ofereix suport complet per a l'autenticació de punter, els registres MTE (MemTag, Extensió d'etiquetatge de memòria) i SVE. S'han afegit ordres que permeten lligar etiquetes a cada operació d'assignació de memòria i organitzar una comprovació del punter en accedir a la memòria, que s'ha d'associar a l'etiqueta correcta.
  • El depurador LLDB i el frontend per al llenguatge Fortran - Flang s'han afegit als conjunts binaris generats pel projecte.

Font: opennet.ru

Afegeix comentari