A Look At The Features Coming With LLVM 7.0 & Clang 7.0

Below is a look at the highlights for LLVM 7.0. Overall it's been another busy half-year with many additions to the AMDGPU back-end, the new LLVM MCA utility, continued work on the Spectre front, OpenCL C++ support is introduced, function multi-versioning (FMV) finally for Clang, OpenMP 4.5 offloading to NVIDIA NVPTX, and many other compiler infrastructure improvements.
- llvm-mca is a new tool to predict the performance of machine code on a particular CPU microarchitecture. This estimate is based upon information already within LLVM for its CPU microarchitecture targeting.
- BSD support improvements for the Undefined Behavior Sanitizer on OpenBSD, Memory Sanitizer on FreeBSD, and more.
- The LLVM Hexagon target now supports auto-vectorization for HVX with -fvectorize.
- Many MIPS target improvements including an updated P5600 CPU scheduler model, support for virtualization / Global Invalidate ASE / CRC ASE instructions, and other improvements. The new instructions can also be enabled via the crc/virt/ginv flags in Clang for MIPS.
- PowerPC now has optimized TLS code generation, a complete POWER9 scheduler model, support for the quad-precision floating point type, and other additions.
- The LLVM AMDGPU back-end has Vega 20 support, including the new deep learning instructions. There is also Vega 12 support within the 7.0 release too.
- The AMDGPU back-end also has 32-bit pointers support.
- Speculative load hardening as a Spectre Variant One mitigation feature,
On the Clang 7.0 front:
- The latest sanitizer within Clang is an Implicit Conversion Sanitizer available via -fsanitize=implicit-conversion.
- diagtool is now included with Clang, which is a Clang diagnostics tool.
- Clang now supports Function Multi-Versioning (FMV) using the the attribute target for ELF-based x86/x86_64 system. This addition is largely compatible with GCC's long-standing FMV implementation. This is great and exciting, it's one of the optimizations done by Clear Linux with their packaging to spin optimized functions for common CPU micro-architectures and that optimized code is selected at run-time based upon the CPU in use.
- Intel Tremont CPU support.
- -march=native now works on 64-bit ARM.
- Various Windows improvements.
- Various OpenCL support improvements including initial OpenCL C++ support and improvements to the existing OpenCL C support.
- Clang has support for OpenMP 4.5 offloading to the NVIDIA NVPTX target.
Add A Comment