LLVM 11.0 arrives with update to Python 3, improvements for RISC-V and more

LLVM

After six months of development the launch of the new edition of the LLVM 11.0 project has been presented in which several improvements are presented, such as the update to Python 3, patches to support experimental instructions in RISC-V and many other changes.

For those unfamiliar with LLVM, they should know what it is a GCC compliant toolkit (compilers, optimizers, and code generators) that compiles programs into RISC-like bit-code intermediate virtual instructions (low-level virtual machine with a multi-level optimization system).

It is designed to optimize compilation time, the binding time, the execution time in whatever programming language the user wants to define. Originally implemented to compile C and C ++, LLVM's language agnostic design, and project success they have spawned a wide variety of languages.

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

Main new features of LLVM 11.0

In this new version of LLVM 11.0 the build system has been moved to use Python 3As such the use of Python 3 is not forced, since in case it is not available, the rollback option is implemented to use Python 2.

Attribute vector-function-abi-variant has been added to intermediate representation (IR) to describe the mapping between scalar and vector functions for vectorization calls. Two separate vector types, llvm :: FixedVectorType and llvm :: ScalableVectorType, are extracted from llvm :: VectorType.

Undefined behavior is undef-based branching and passing from undefined values ​​to standard library functions.

In memset / memcpy / memmove, it is allowed to pass undefined pointers, but if the parameter with the size is equal to zero.

LLJIT adds support for doing static initializations through the LLJIT :: initialize and LLJIT :: deinitialize methods.

Added the ability to add static libraries to JITDylib using the StaticLibraryDefinitionGenerator class. Added C API for ORCv2 (API for creating JIT compilers).

On the part of improving support for the different processor architectures:

  • Added support for Cortex-A34, Cortex-A77, Cortex-A78 and Cortex-X1 processors on the backend of the AArch64 architecture. The ARMv8.2-BF16 (BFloat16) and ARMv8.6-A extensions have been implemented, including RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Activity Monitors virtualization) and ARMv8.0-DGH (data collection hint).
  • Added support for Cortex-M55, Cortex-A77, Cortex-A78, and Cortex-X1 processors on the ARM backend. Implemented the Armv8.6-A Matrix Multiply and RMv8.2-AA32BF16 BFloat16 extensions.
  • Added support for code generation for POWER10 processors in the PowerPC backend. Improved loop optimizations and improved support for floating point operations.
  • The architecture backend RISC-V can receive patches with support for experimental extended instruction sets that have not yet been officially approved.

In addition to that, the ability to generate code for binding functions is provided integrated to vector SVE instructions.

The backend for the AVR architecture has been moved from the experimental category to the stable ones included in the base distribution.

The x86 backend supports Intel AMX and TSXLDTRK instructions. Added protection against LVI attacks (Load Value Injection) and the general Speculative Execution Side Effects Suppression mechanism was also implemented to block attacks caused by speculative execution of operations on the CPU.

Of the other changes that stand out:

  • The backend for the SystemZ architecture adds support for MemorySanitizer and LeakSanitizer.
  • Libc ++ adds support for math constant header file .
  • Extended capabilities of the LLD linker.
  • Improved ELF support, including added options "–lto-emit-asm", "–lto-whole-program-visible", "–print-archive-stats", "–shuffle-section", "–thinlto-single -module "," –unique "," –rosegment "," –threads = N ".
  • Added "–time-trace" option to save trace to file, which can then be parsed through chrome: // trace interface in Chrome.
  • An interface with a Go (llgo) compiler has been removed from the release and may be restructured in the future.

Finally if you want to know more about it about this new version, 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.