LLVM 16.0 Released With New Intel/AMD CPU Support, More C++20 / C2X Features
LLVM 16 was released on Friday night as the latest half-year feature release to this open-source compiler stack. From initial AMD Zen 4 support to bringing up new Intel CPU instruction sets and processor targets for their new processors being introduced through 2024, there is a lot of exciting hardware additions in LLVM 16.0. LLVM 16.0 is also notable for faster LLD linking, Zstd compressed debug sections, stabilizing of its LoongArch target, defaulting to C++17 for Clang, and much more. Here's a look at all the exciting changes of LLVM 16.
The highlights for LLVM 16 along with its sub-projects like Clang 16 and LLD 16 include the following items as catching my interest:
- Clang's default C++ standard is now GNU++17 (the GNU dialect of C++17) rather than GNU++14/C++14 as the prior default.
- More C++20 features have been implemented along with bug fixes to existing C++20 features and also making some preparations for C++2b features.
- More C2X features have also been implemented for Clang 16.0.
- Various Clang 16 compiler diagnostics improvements.
- THe LLVM 16's LLD linker has much faster link speeds for ELF objects compared to LLVM 15.
- LLVM 16 LLD also now supports Zstd compressed sections, similar to GCC 13's Zstd support.
- LLVM's LoongArch CPU back-end has been promoted out of being "experimental" and is now enabled by default. There is also initial LoongArch JITLink support and other features enabled. LLVM's LLDB debugger also supports debugging LoongArch 64-bit binaries as well as the Clang compiler support being in good shape now for this Chinese CPU architecture.
- New Intel x86 ISA extensions are supported with LLVM 16.0 including AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8, and AVX-NE-CONVERT.
- New Intel CPU targets supported are Raptor Lake, Meteor Lake, Emerald Rapids, Sierra Forest, Granite Rapids, and Grand Ridge.
- Initial support for AMD Zen 4 processors with -march=znver4 but this doesn't contain the tuning that landed after the LLVM 16 branching.
- LLVM's RISC-V back-end added support for many new extensions like Zca, Zbe, Zbf, Zbm, Zbp, Zbr, and Zbt.
- LLVM added support for the Arm Cortex-A715 / Cortex-X3 / Neoverse-V2 cores.
- LLVM's AArch64 back-end now supports Function Multi-Versioning (FMV) for allowing custom code paths to be taken for optimized performance based upon the run-time CPU/capabilities.
- Support for Armv2A / Armv2A / Armv3 / Armv3M architectures has been removed.
- LLVM 16's libc++ C++ standard library has added support for more C++20 and C++23 features. Among those changes are the C++20 spaceship operator supporting more types, the C++20 ranges library has been completed, and the C++20 format library has improved.
LLVM 16.0 is available for download from GitHub in source form and various release binaries. There is also a brief release announcement on the LLVM Discourse.
The highlights for LLVM 16 along with its sub-projects like Clang 16 and LLD 16 include the following items as catching my interest:
- Clang's default C++ standard is now GNU++17 (the GNU dialect of C++17) rather than GNU++14/C++14 as the prior default.
- More C++20 features have been implemented along with bug fixes to existing C++20 features and also making some preparations for C++2b features.
- More C2X features have also been implemented for Clang 16.0.
- Various Clang 16 compiler diagnostics improvements.
- THe LLVM 16's LLD linker has much faster link speeds for ELF objects compared to LLVM 15.
- LLVM 16 LLD also now supports Zstd compressed sections, similar to GCC 13's Zstd support.
- LLVM's LoongArch CPU back-end has been promoted out of being "experimental" and is now enabled by default. There is also initial LoongArch JITLink support and other features enabled. LLVM's LLDB debugger also supports debugging LoongArch 64-bit binaries as well as the Clang compiler support being in good shape now for this Chinese CPU architecture.
- New Intel x86 ISA extensions are supported with LLVM 16.0 including AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8, and AVX-NE-CONVERT.
- New Intel CPU targets supported are Raptor Lake, Meteor Lake, Emerald Rapids, Sierra Forest, Granite Rapids, and Grand Ridge.
- Initial support for AMD Zen 4 processors with -march=znver4 but this doesn't contain the tuning that landed after the LLVM 16 branching.
- LLVM's RISC-V back-end added support for many new extensions like Zca, Zbe, Zbf, Zbm, Zbp, Zbr, and Zbt.
- LLVM added support for the Arm Cortex-A715 / Cortex-X3 / Neoverse-V2 cores.
- LLVM's AArch64 back-end now supports Function Multi-Versioning (FMV) for allowing custom code paths to be taken for optimized performance based upon the run-time CPU/capabilities.
- Support for Armv2A / Armv2A / Armv3 / Armv3M architectures has been removed.
- LLVM 16's libc++ C++ standard library has added support for more C++20 and C++23 features. Among those changes are the C++20 spaceship operator supporting more types, the C++20 ranges library has been completed, and the C++20 format library has improved.
LLVM 16.0 is available for download from GitHub in source form and various release binaries. There is also a brief release announcement on the LLVM Discourse.
14 Comments