LLVM 16.0 et il est sorti et ce sont ses nouvelles

Logo LLVM

LLVM est un cadre pour développer des compilateurs ainsi que pour aider à créer de nouveaux langages de programmation et à améliorer les langages existants.

Après un peu plus de six mois de développement, le lancement de la nouvelle version du projet LLVM 16.0, version dans laquelle un grand nombre de modifications et d'améliorations sont implémentées.

Pour ceux qui ne connaissent pas LLVM, vous devez savoir que cela est un compilateur compatible GCC (compilateurs, optimiseurs et générateurs de code) qui compile les programmes dans un bitcode intermédiaire d'instruction virtuelle de type RISC (une machine virtuelle de bas niveau avec un système d'optimisation à plusieurs niveaux).

Le pseudocode généré peut être converti par le compilateur JIT en instructions machine juste au moment de l'exécution du programme.

Nouvelles fonctionnalités majeures de LLVM 16.0

Dans cette nouvelle version qui est présentée, nous pouvons trouver plusieurs améliorations importantes dans clang 16.0, dont se démarque le standard C++/ObjC++ par défaut, qui est défini sur gnu++17 (anciennement gnu++14), qui implique la prise en charge des fonctionnalités C++17 avec les extensions GNU par défaut. L'utilisation d'éléments définis dans la norme C++17 est autorisée dans le code LLVM.

Un autre des changements qui ressort est qu'il a été ajouté prise en charge des processeurs Cortex-A715, Cortex-X3 et Neoverse V2, extensions Armv8.3 et fonctionnalités multi-versions pour le backend AArch64.
La compatibilité de la plate-forme Armv2, Armv2A, Armv3 et Armv3M ont été abandonnés dans le backend de l'architecture ARM, pour lequel la génération de code correcte n'était pas garantie. Ajout de la possibilité de générer du code pour les instructions permettant de travailler avec des nombres complexes et ajouté prise en charge des architectures de jeux d'instructions (ISA) AMX-FP16, CMPCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT en backend X86.

Par ailleurs, les exigences pour la construction de LLVM ont été augmentées, De plus, la construction devrait maintenant être compatible avec la norme C++17, c'est-à-dire que la construction nécessite au moins GCC 7.1, Clang 5.0, Apple Clang 10.0 ou Visual Studio 2019 16.7.

D'autre part, il met également en évidence backends améliorés pour les architectures MIPS, PowerPC et RISC-V, ainsi que la prise en charge du débogage des exécutables 64 bits pour l'architecture LoongArch vers le débogueur LLDB et une gestion améliorée des symboles de débogage COFF.

Des autres changements qui se démarquent:

  • Dans la bibliothèque Libc++, le travail principal s'est concentré sur la mise en œuvre de la prise en charge des nouvelles fonctionnalités des normes C++20 et C++23.
  • Le temps de liaison a été considérablement réduit dans l'éditeur de liens LDD en parallélisant les opérations de balayage de relocalisation d'adresse et d'initialisation de section. Ajout de la prise en charge de la compression de section à l'aide de l'algorithme ZSTD.
  • Les fonctions avancées implémentées avec le standard C++20 sont également mises en avant.
  • capturer des liens structurés dans les fonctions lambda.
  • L'opérateur d'égalité dans les expressions.
  • Possibilité de ne pas spécifier le mot-clé typename dans certains contextes,
  • Autorisation d'initialisation ajoutée entre parenthèses ("Aggr(val1, val2)").
  • Fonctions implémentées définies dans le futur standard C++2b.
  • Support fourni avec le type char8_t,
  • Extension de la plage de caractères autorisés à être utilisés dans "\N{…}",
  • Ajout de la possibilité d'utiliser des variables déclarées comme "constexpr statique" dans les fonctions déclarées comme constexpr.
  • Fonctions implémentées définies dans le futur standard C2x C :
  • Ajout de la prise en charge du chargement de plusieurs fichiers de configuration (les fichiers de configuration par défaut sont chargés en premier, puis ceux spécifiés via le drapeau « –config= », qui peut désormais être spécifié plusieurs fois).
  • Modification de l'ordre de chargement des fichiers de configuration par défaut : clang essaie de charger le fichier en premier - .cfg et s'il ne le trouve pas, il essaie de charger deux fichiers .cfg et .cfg.
  • Ajout d'un nouvel indicateur de construction "-fcoro-aligned-allocation" pour la distribution alignée sur les trames de routine.
  • Ajout de l'indicateur "-fmodule-output" pour activer le modèle de construction en une seule phase des modules C++ standard.
  • Ajout du mode "-Rpass-analysis=stack-frame-layout" pour diagnostiquer les problèmes liés à la disposition des cadres de pile.
  • Ajout d'un nouvel attribut __attribute__((target_version("cpu_features"))) et extension de la fonctionnalité de l'attribut __attribute__((target_clones("cpu_features1″,"cpu_features2",…))) pour sélectionner des versions spécifiques des fonctionnalités fournies par le CPU AArch64 .
  • Outils de diagnostic améliorés :
  • Ajout de l'avertissement "-Wsingle-bit-bitfield-constant-conversion" pour intercepter la troncation implicite lors de l'attribution d'un à un champ de bits signé d'un bit.
  • Diagnostics étendus pour les variables constexpr non initialisées.
  • Ajout des avertissements "-Wcast-function-type-strict" et "-Wincompatible-function-pointer-types-strict" pour détecter les problèmes potentiels lors de la diffusion des types de fonction.

Enfin Si vous souhaitez en savoir plus, vous pouvez vérifier les détails dans le lien suivant


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données : AB Internet Networks 2008 SL
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.