LLVM 12.0 est déjà sorti et voici ses actualités

LLVM

Après six mois de développement le lancement de la nouvelle version du projet LLVM 12.0 a été présenté Conforme à GCC (compilateurs, optimiseurs et générateurs de code) qui compile les programmes en bitcode intermédiaire d'instructions virtuelles similaires à RISC (une machine virtuelle de bas niveau avec un système d'optimisation à plusieurs niveaux).

Dans cette nouvelle version nous pouvons trouver diverses améliorations et nouveautés, dont nous pouvons mettre en évidence un nouvel attribut de fonction "tune-cpu" pour supporter -mtune comme gcc, ainsi que des améliorations aux différentes plates-formes.

Nouvelles fonctionnalités majeures de LLVM 12.0

Dans cette nouvelle version, nous pouvons trouver que prise en charge de la boîte à outils llvm-build build écrit en python n'est plus en production, au lieu de quoi le projet est complètement passé à l'utilisation du système de construction CMake.

Le backend de l'architecture AArch64 a amélioré la prise en charge de la plate-forme Windows: la génération correcte de la sortie de l'assembleur est fournie pour les systèmes Windows cibles, la génération de données sur les appels de déroulement a été optimisée (la taille de ces données a été réduite de 60%), la possibilité de créer des données a été ajoutée à l'aide des directives seh.

Alors que Le backend de l'architecture PowerPC inclut de nouvelles optimisations pour les déploiements en ligne et en boucle, prise en charge améliorée des processeurs Power10, prise en charge supplémentaire des instructions MMA pour la manipulation des baies et prise en charge améliorée du système d'exploitation AIX.

pour les x86 a ajouté la prise en charge des processeurs AMD Zen 3, Intel Alder Lake et Intel Sapphire Rapids, ainsi que des instructions pour les processeurs HRESET, UINTR et AVXVNNI. Suppression de la prise en charge des extensions MPX (extensions de protection de la mémoire) pour vérifier les pointeurs par rapport aux limites de la zone de mémoire (cette technologie n'a pas été largement utilisée et a depuis été supprimée de GCC et clang). L'assembleur a ajouté la prise en charge des préfixes {disp32} et {disp8} et des suffixes .d32 et .d8 pour contrôler la taille du décalage des opérandes et des transitions. Un nouvel attribut "tune-cpu" a été ajouté pour contrôler l'activation des optimisations microarchitecturales.

Un autre changement qui ressort est que un nouveau mode a été ajouté "-fsanitize = unsigned-shift-base" pour détecter les débordements d'entiers non signés après un léger décalage vers la gauche. Pour le format Mach-O (macOS), la prise en charge est implémentée pour les architectures arm64, arm et i386, l'optimisation de la phase de liaison (LTO) et le déroulement de la pile lors de la gestion des exceptions.

Aussi un nouvel attribut de fonctionnalité "tune-cpu" est mis en surbrillance qui permet à l'oles optimisations de microarchitecture sont appliquées indépendamment de l'attribut "target-cpu" ou le CPU TargetMachine qui sera utilisé pour sélectionner le jeu d'instructions. Si l'attribut n'est pas présent, la CPU de réglage suivra la CPU cible.

Libc ++ implémente les nouvelles fonctionnalités du standard C ++ 20 et a commencé à développer des fonctionnalités de la spécification C ++ 2b, plus Ajout de la prise en charge de l'assemblage avec la prise en charge de la désactivation de la localisation ("-DLIBCXX_ENABLE_LOCALIZATION = OFF") et des dispositifs pour générer des nombres pseudo-aléatoires.

Alors que des améliorations pour Clang 12, pour l'architecture AArch64, de nouveaux drapeaux de compilateur ont été ajoutés "-Moutline-atomics" et "-mno-outline-atomics" pour activer et désactiver les fonctions d'assistance atomique telles que "__aarch64_cas8_relax". Ces fonctions d'exécution déterminent s'il existe une prise en charge des extensions de système large (LSE) et utilisent les instructions de processeur atomique fournies ou la restauration pour utiliser les instructions LL / SC (Load-link / store-conditionitional) pour la synchronisation.

Le pointeur 'this' est maintenant traité avec des vérifications non nulles et déréférençables (N). L'option "-fdelete-null-pointer-checks" peut être utilisée pour supprimer l'attribut non nul lorsque des valeurs nulles sont requises.

Sous Linux pour les architectures AArch64 et PowerPC, "-fasynchronous -wind-tables" est activé pour générer des tables d'appels nominaux, comme dans GCC.

Dans "#pragma clang loop vectorize_width", la possibilité de spécifier les options "fixe" (par défaut) et "évolutive" pour sélectionner la méthode de vectorisation a été ajoutée.

Dans le serveur de mise en cache clangd (Clang Server) sous Linux, la consommation de mémoire pendant le fonctionnement à long terme est considérablement réduite (un appel périodique à malloc_trim est fourni pour renvoyer les pages de mémoire libre au système d'exploitation).

Enfin si vous souhaitez en savoir plus à propos de cette nouvelle version, vous pouvez Veuillez vous référer aux détails ci-dessous. lien.


Le contenu de l'article adhère à nos principes de éthique éditoriale. Pour signaler une erreur, cliquez sur c'est par ici !.

Soyez le premier à commenter

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

*

*

  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.