LLVM 12.0 has already been released and these are its news

LLVM

After six months of development the launch of the new version of the LLVM 12.0 project was presented GCC-compliant (compilers, optimizers, and code generators) that compiles programs into an intermediate bitcode of virtual instructions similar to RISC (a low-level virtual machine with a multi-level optimization system).

In this new version we can find various improvements and news, of which we can highlight a new function attribute "tune-cpu" to support -mtune as gcc, as well as improvements to the different platforms.

Main new features of LLVM 12.0

In this new version, we can find that support for the llvm-build build toolkit written in python has been discontinued, instead of which the project has completely switched to using the CMake build system.

The backend for the AArch64 architecture has improved support for the Windows platform: the correct generation of assembler output is provided for target Windows systems, data generation on unwind calls has been optimized (the size of such data has been reduced by 60%), the ability to create data has been added unwind using seh directives.

While PowerPC architecture backend includes new optimizations for inline and loop deployments, improved support for Power10 processors, additional support for MMA instructions for manipulating arrays, and improved support for the AIX operating system.

For x86 added support for AMD Zen 3, Intel Alder Lake and Intel Sapphire Rapids processors, as well as instructions for HRESET, UINTR, and AVXVNNI processors. Removed support for MPX extensions (memory protection extensions) to check pointers against memory area limits (this technology has not been widely used and has since been removed from GCC and clang). The assembler has added support for the prefixes {disp32} and {disp8} and the suffixes .d32 and .d8 to control the size of the offset of operands and transitions. A new attribute "tune-cpu" was added to control the enablement of microarchitectural optimizations.

Another change that stands out is that a new mode has been added "-fsanitize = unsigned-shift-base" to detect unsigned integer overflows after a bit shift to the left. For the Mach-O (macOS) format, support is implemented for arm64, arm, and i386 architectures, link stage optimization (LTO), and stack unwind when handling exceptions.

As well a new feature attribute "tune-cpu" is highlighted that allows the omicroarchitecture optimizations are applied regardless of the "target-cpu" attribute or the TargetMachine CPU that will be used to select the instruction set. If the attribute is not present, the tuning CPU will follow the target CPU.

Libc ++ implements new features of the C ++ 20 standard and started developing features of the C ++ 2b specification, plus added support for assembling with disable support for localization ("-DLIBCXX_ENABLE_LOCALIZATION = OFF") and devices for generating pseudo-random numbers.

While of the improvements for Clang 12, for the AArch64 architecture, new compiler flags have been added "-Moutline-atomics" and "-mno-outline-atomics" to enable and disable atomic helper functions such as "__aarch64_cas8_relax". These runtime functions determine whether there is support for Large System Extensions (LSE) and use the provided atomic processor instructions or rollback to use LL / SC (Load-link / store-conditional) instructions for synchronization.

The 'this' pointer is now processed with non-null and dereferenceable checks (N). The "-fdelete-null-pointer-checks" option can be used to remove the non-null attribute when null values ​​are required.

In Linux for the AArch64 and PowerPC architectures, "-fasynchronous -wind-tables" is enabled to generate tables of roll calls, as in GCC.

In "#pragma clang loop vectorize_width" the ability to specify the "fixed" (default) and "scalable" options to select the vectorization method was added.

In the clangd caching server (Clang Server) on Linux, memory consumption during long-term operation is significantly reduced (a periodic call to malloc_trim is provided to return free memory pages to the operating system).

Finally if you are interested in knowing more about it about this new version, you can Please refer to 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.