LLVM 7 intègre deux nouveaux outils importants : llvm-exegesis et llvm-mca. Le premier mesure de manière automatique les propriétés de la planification des instructions (latence/uops) et fournit un moyen d’éditer les modèles de planification. Le second représente un outil d’analyse de performance statique qui utilise les informations disponibles dans LLVM pour prédire statiquement la performance du code machine pour un CPU spécifique.
Parmi les autres nouveautés et améliorations caractérisant LLVM 7, on peut signaler que :
- le programme d’installation de LLVM 7 pour Windows ne permet plus d’intégrer LLVM dans Visual Studio. Toutefois, une nouvelle extension LLVM prenant en charge Visual Studio 2017 est disponible sur Visual Studio Marketplace. Cette extension permet d’utiliser l’infrastructure de compilateur LLVM à partir de Visual Studio pour construire des projets C/C++ ;
- sur LLVM 7, LoopInstSimplify (–loop-instsimplify) a été supprimée et l’optimisation des casts à virgule flottante a été améliorée. Mais l’utilisateur peut désactiver cette dernière fonctionnalité lorsque des incohérences surviennent, en spécifiant un attribut de fonction : "strict-float -cast-overflow"="false". Cet attribut peut être créé par l’option « ;clang -fno-strict-float-float-cast-overflow ;» et les sanitizers de code peuvent être utilisés pour détecter les motifs affectés ;
- LLVM_ON_WIN32 n’est plus sous la dépendance de llvm/Config/config/config.h et llvm/Config/llvm-config.h. La macro DEBUG a été renommée en LLVM_DEBUG, mais l’interface est restée la même. Par ailleurs, les informations de débogage CodeView peuvent au besoin être maintenant émises pour les configurations MinGW ;
- LLVM 7 introduit le support de X-Ray instrumentation, UBsan et libFuzzer (x86 et x64) pour OpenBSD, tandis que du côté de FreeBSD, MSan (x86_64), X-Ray instrumentation et libFuzzer (x86 et x64) sont désormais gérés. Cette liste peut être complétée par l’ajout du support du code JITed avec perf et de l’assembler directive « ;.rva ;» pour les cibles COFF ;
- L’outil opt supporte maintenant l’option « ;-load-pass-plugin ;» pour charger les pass plugins pour le nouveau PassManager et l’outil llvm-rc (Windows Resource Compiler) a été légèrement amélioré. La prise en charge préliminaire/expérimentale des informations de débogage DWARF v5, y compris la nouvelle table d’accélération.debug_names, est également de la partie ;
- des optimisations ont été apportées au back-end de l’AMDGPU et des techniques de mitigation contre les vulnérabilités matérielles affectant certains CPU (Spectre V1 notamment) ont été renforcées.
Une liste mieux détaillée des améliorations et des nouveautés qui caractérisent LLVM 7 est disponible sur le site officiel.
Source : LLVM
Et vous ?
Utilisez-vous LLVM ? Si oui, pour quels usages ?
Voir aussi
Le compilateur Clang pour les langages C, C++ et Objective-C sort en version 6.0 avec une protection contre la faille Spectre et d'autres correctifs
Le compilateur AOCC d'AMD pour les langages C, C++ et Fortran sort en version 1.2, il supporte désormais le compilateur FLANG et les retpolines
LLVM et Clang s'apprêtent à faire un bond en avant avec OpenCL et CUDA avec l'intégration d'AMD HIP et d'OpenCL C++