LLVM 11.0 arrive avec une mise à jour vers Python 3, des améliorations pour RISC-V et plus

LLVM

Après six mois de développement le lancement de la nouvelle édition du projet LLVM 11.0 a été présenté dans lequel plusieurs améliorations sont présentées, telles que la mise à jour de Python 3, des correctifs pour prendre en charge les instructions expérimentales dans RISC-V et bien d'autres changements.

Pour ceux qui ne connaissent pas LLVM, ils devraient savoir ce que c'est une boîte à outils conforme GCC (compilateurs, optimiseurs et générateurs de code) qui compile les programmes en instructions virtuelles intermédiaires de code bit de type RISC (machine virtuelle de bas niveau avec un système d'optimisation à plusieurs niveaux)

Il est conçu pour optimiser le temps de compilation, le temps de liaison, le temps d'exécution dans tout langage de programmation que l'utilisateur souhaite définir. Initialement implémenté pour compiler C et C ++, Conception indépendante de la langue de LLVM et réussite du projet ils ont engendré une grande variété de langues.

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

Nouvelles fonctionnalités majeures de LLVM 11.0

Dans cette nouvelle version de LLVM 11.0 le système de construction a été déplacé pour utiliser Python 3En tant que tel, l'utilisation de Python 3 n'est pas forcée, car au cas où il ne serait pas disponible, l'option de restauration est implémentée pour utiliser Python 2.

Attribut vector-function-abi-variant a été ajouté à la représentation intermédiaire (IR) pour décrire la correspondance entre les fonctions scalaires et vectorielles pour les appels de vectorisation. Deux types de vecteurs distincts, llvm :: FixedVectorType et llvm :: ScalableVectorType, sont extraits de llvm :: VectorType.

Le comportement non défini est le branchement basé sur undef et le passage de valeurs non définies aux fonctions de bibliothèque standard.

Dans memset / memcpy / memmove, il est permis de passer des pointeurs non définis, mais si le paramètre avec la taille est égal à zéro.

LLJIT ajoute la prise en charge des initialisations statiques via les méthodes LLJIT :: initialize et LLJIT :: deinitialize.

Ajout du possibilité d'ajouter des bibliothèques statiques à JITDylib à l'aide de la classe StaticLibraryDefinitionGenerator. Ajout de l'API C pour ORCv2 (API pour la création de compilateurs JIT).

Concernant l'amélioration de la prise en charge des différentes architectures de processeurs:

  • Ajoutée prise en charge des processeurs Cortex-A34, Cortex-A77, Cortex-A78 et Cortex-X1 dans le backend de l'architecture AArch64. Les extensions ARMv8.2-BF16 (BFloat16) et ARMv8.6-A ont été implémentées, notamment RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Activity Surveille la virtualisation) et ARMv8.0-DGH (indice de collecte de données).
  • Ajout de la prise en charge des processeurs Cortex-M55, Cortex-A77, Cortex-A78 et Cortex-X1 sur le backend ARM. Implémentation des extensions Armv8.6-A Matrix Multiply et RMv8.2-AA32BF16 BFloat16.
  • Ajout de la prise en charge de la génération de code pour les processeurs POWER10 dans le backend PowerPC. Optimisations de boucle améliorées et prise en charge améliorée des opérations en virgule flottante.
  • Le backend de l'architecture RISC-V peut recevoir des correctifs avec support pour les jeux d'instructions expérimentaux étendus qui n'ont pas encore été officiellement approuvés.

En plus de cela, la possibilité de générer du code pour les fonctions de liaison est fournie intégré aux instructions vectorielles SVE.

Le backend de l'architecture AVR a été déplacé de la catégorie expérimentale vers les versions stables incluses dans la distribution de base.

Le backend x86 prend en charge les instructions Intel AMX et TSXLDTRK. Protection supplémentaire contre les attaques LVI (Load Value Injection) et le mécanisme général de suppression des effets secondaires de l'exécution spéculative ont également été mis en œuvre pour bloquer les attaques causées par l'exécution spéculative d'opérations sur le processeur.

Parmi les autres changements qui ressortent:

  • Le backend de l'architecture SystemZ ajoute la prise en charge de MemorySanitizer et LeakSanitizer.
  • Libc ++ ajoute la prise en charge du fichier d'en-tête de constante mathématique .
  • Capacités étendues de l'éditeur de liens LLD.
  • Prise en charge ELF améliorée, avec ajout des options «–lto-emit-asm», «–lto-whole-program-visible», «–print-archive-stats», «–shuffle-section», «–thinlto-single -module "," –Unique "," –rosegment "," –threads = N ".
  • Ajout de l'option "–time-trace" pour enregistrer la trace dans un fichier, qui peut ensuite être analysé via l'interface chrome: // trace dans Chrome.
  • Une interface avec un compilateur Go (llgo) a été supprimée de la version et pourrait être restructurée à l'avenir.

Enfin si vous voulez en savoir plus à propos de cette nouvelle version, vous pouvez vérifier les détails dans le lien suivant.


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.