Demat'iNal,
Après 6 release candidates, la version 11.0.0 de l'écosystème LLVM a finalement été rendue publique.
LLVM suit un cycle de sortie de 6 mois, quelles sont donc les grandes nouveautés ? On notera déjà l'arrivée du compilateur Flang dans la suite officielle LLVM, qui se dote ainsi d'un compilateur Fortran. Il vient remplacer le peu usité llvmgo
qui a été retiré du dépôt officiel.
LLVM release note
LLVM possédait déjà un type vectoriel, p.e. <i32 x 4>
pour un vecteur de 4 entiers 32 bits. Ce type de taille fixe est maintenant complété par un type vectoriel de taille variable, noté <vscale x 4 x i32>
pour un vecteur de 4, 8, 12 etc entiers de 32 bits, pour pouvoir cibler des jeux d'instruction comme SVE de ARM.
Plusieurs ajustements ont été faits pour la gestion propagation des valeurs poison et undef. Le lecteur intéressé se délectera de cette video du LLVM Virtual Developer Meeting sur la différence entre undef et poison.
Il est maintenant possible de positionner l'attribut probe-stack
à "inline-asm"
ce qui fournit, sur les architectures x86 (implémenté par votre serviteur), SystemZ et PowerPC, une protection contre l'attaque stack clash
Clang release note
Clang est maintenant doté d'un recoverable AST, qui permet de mieux gérer la représentation des erreurs; En cas d'erreur de syntaxe, le code suivant l'erreur est plus facilement parsé dans de bonnes conditions. Cette fonctionnalité est activée par défaut pour le front-end C++.
De nouveaux avertissements voient le jour : -Wpointer-to-int-cast
, Wuninitialized-const-reference
et -Wimplicit-const-int-float-conversion
. Leur dénommination me parait suffisament explicite ;-)
Clang fournit désormais des types intrinsèques, _ExtInt(N)
où N
est un entier spécifiant la taille du type entier. Cela permet de déclarer des entiers de 57 bits.
Les projets reposant sur une génération a priori des profiles utilisés par les options de Profile Guided Optimization devront regénérer leurs profiles, l'algorithme de hash utilisé ayant reçu un correctif de bug par votre serviteur.
L'option -O
est dorénavant un alias de -O1
et non plus -O2
.
En spécifiant -fpic/-fPIC -fno-semantic-interposition
la sémantique d'interposition requise par ELF n'est plus respectée, pour le plus grand plaisir des optimisations.
L'option -fstack-clash-protection
permet de tirer parti des protéctions contre stack clash implémentée au niveau LLVM.
Plusieurs options relatives à la gestion des nombres flottants: -ffp-exception-behavior={ignore,maytrap,strict}
et -ffp-model={precise,strict,fast}
.
D'un point de vue langage, le support d'OpenMP5 a été amélioré, la version du standard C utilisée par défaut est gnu17, la defect report P1766R1 qui restreint l'usage de structure anonymes dans un typedef, à la C, est appliquée de manière rétroactive à toutes les version de C++
Others
la suite de compilation LLVM inclut également des outils basés sur clang, un éditeur de lien, lld, une implémentation de la bibliothèque standard C++, libc++, un optimiseur polyhèdrique polly, et, pour ceux qui ont suivi, un compilateur Fortran flang.
En vrac, Flang supporte Fortran2018, <numbers>
fait son arrivée dans la libc++, pas mal de travail niveau performance et de nouveaux diagnostiques dans clangd
et plein d'autres choses que je ne comprends pas bien ;-)
Je vous invite à lire leur notes si ces sujets vous intéresse !
# OpenMP
Posté par barmic 🦦 . Évalué à 3. Dernière modification le 13 octobre 2020 à 18:13.
Je ne connais pas bien OpenMP est une API qui est implémentée par les compilateurs ou une bibliothèque qui doit avoir un support dans les compilateurs ?
Edit: un bout de recherche m'a permis de voir que c'était une API désolé pour le bruit
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: OpenMP
Posté par serge_sans_paille (site web personnel) . Évalué à 6. Dernière modification le 13 octobre 2020 à 20:49.
D'un point de vue outil, le support OpenMP implique :
libomp
, pour pouvoir optimiser certaines séquences[^] # Re: OpenMP
Posté par lasher . Évalué à 3. Dernière modification le 20 octobre 2020 à 11:33.
Pour compléter la réponse de serge_sans_paille, OpenMP c'est 3 choses:
# Flang n'est pas encore vraiment opérationnel
Posté par vmagnin (site web personnel) . Évalué à 4. Dernière modification le 13 octobre 2020 à 22:11.
Attention, Flang (aussi appelé f18) dans LLVM11 peut parser du code Fortran, mais il appelle un autre compilateur, par défaut gfortran, pour la compilation :
Il faudra donc encore patienter.
A noter que le paquet flang-11 est disponible dans la Fedora Rawhide :
https://pkgs.org/download/flang
# Rust 1.47
Posté par StyMaar . Évalué à 2.
La dernière version de Rust sortie la semaine dernière supporte également LLVM 11 comme back-end, et ça offre des gain appréciables en terme de rapidité de compilation (une partie étant en fait un correction de régressions causées par LLVM 10).
# Lien cassé
Posté par cladmi . Évalué à 0.
Le lien pour "la sémantique d'interposition" pointe actuellement vers une URL vide donc on revient sur cette page.
[^] # Re: Lien cassé
Posté par Benoît Sibaud (site web personnel) . Évalué à 3.
Faute de cible, j'ai retiré le lien. Merci.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.