LLVM 16.0 and it was released and these are its news

LLVM Logo

LLVM is a framework for developing compilers as well as helping to build new programming languages ​​and improve existing languages.

After just over six months of development, the launch of the new version of the project LLVM 16.0, version in which a large number of changes and improvements are implemented.

For those unfamiliar with LLVM, you should know that this is a GCC compatible compiler (compilers, optimizers, and code generators) that compiles programs into a RISC-like virtual instruction intermediate bitcode (a low-level virtual machine with a multilevel optimization system).

The generated pseudocode can be converted by the JIT compiler into machine instructions just at the time of program execution.

Main new features of LLVM 16.0

In this new version that is presented, we can find several important improvements in clang 16.0, of which the default C++/ObjC++ standard stands out, which is set to gnu++17 (formerly gnu++14), which implies support for C++17 features with GNU extensions by default. The use of elements defined in the C++17 standard is allowed in the LLVM code.

Another of the changes that stands out is that it has been added support for Cortex-A715, Cortex-X3 and Neoverse CPUs V2, Armv8.3 extensions and multi-version features to the AArch64 backend.
La platform compatibility Armv2, Armv2A, Armv3 and Armv3M have been discontinued in the ARM architecture backend, for which correct code generation was not guaranteed. Added the ability to generate code for instructions to work with complex numbers and added support for architectures of instruction sets (ISA) AMX-FP16, CMPCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT to X86 backend.

Besides that, the requirements for building LLVM have been increased, Also the build should now be compatible with the C++17 standard, i.e. the build requires at least GCC 7.1, Clang 5.0, Apple Clang 10.0 or Visual Studio 2019 16.7.

On the other hand, it also highlights improved backends for MIPS, PowerPC and RISC-V architectures, as well as support for debugging 64-bit executables for the LoongArch architecture to the LLDB debugger and improved handling of COFF debugging symbols.

Of the other changes that stand out:

  • In the Libc++ library, the main work was focused on implementing support for new features of the C++20 and C++23 standards.
  • Link time has been significantly reduced in the LDD linker by parallelizing address relocation scanning and section initialization operations. Added support for section compression using the ZSTD algorithm.
  • The advanced functions implemented with the C++20 standard are also highlighted.
  • capture structured links in lambda functions.
  • The equality operator within expressions.
  • Ability to not specify the typename keyword in some contexts,
  • Allowability of initialization added between parentheses ("Aggr(val1, val2)").
  • Implemented functions defined in the future C++2b standard.
  • Support provided with type char8_t,
  • Extended the range of characters allowed for use in "\N{…}",
  • Added the ability to use variables declared as "static constexpr" in functions declared as constexpr.
  • Implemented functions defined in the future C2x C standard:
  • Added support for loading multiple configuration files (default configuration files are loaded first, then those specified via the “–config=” flag, which can now be specified multiple times).
  • Changed load order of default config files: clang tries to load file first - .cfg and if it can't find it, it tries to load two files .cfg and .cfg.
  • Added a new build flag "-fcoro-aligned-allocation" for routine frame aligned distribution.
  • Added the "-fmodule-output" flag to enable the single-phase build model of standard C++ modules.
  • Added mode "-Rpass-analysis=stack-frame-layout" to diagnose issues with stack frame layout.
  • Added a new __attribute__((target_version("cpu_features"))) attribute and extended the functionality of the __attribute__((target_clones("cpu_features1″,"cpu_features2",…))) attribute to select specific versions of features provided by the CPU AArch64 .
  • Enhanced diagnostic tools:
  • Added warning "-Wsingle-bit-bitfield-constant-conversion" to catch implicit truncation when assigning one to a one-bit signed bitfield.
  • Extended diagnostics for uninitialized constexpr variables.
  • Added "-Wcast-function-type-strict" and "-Wincompatible-function-pointer-types-strict" warnings to catch potential issues when casting function types.

Finally If you are interested in knowing more about it, you can check the details in the following link


Leave a Comment

Your email address will not be published. Required fields are marked with *

*

*

  1. Responsible for the data: AB Internet Networks 2008 SL
  2. Purpose of the data: Control SPAM, comment management.
  3. Legitimation: Your consent
  4. Communication of the data: The data will not be communicated to third parties except by legal obligation.
  5. Data storage: Database hosted by Occentus Networks (EU)
  6. Rights: At any time you can limit, recover and delete your information.