LLVM 9.0.0 arrives with major improvements


The LLVM community has released version 9.0.0 of the LLVM Compiler Infrastructure project. The update features optimizations for memory, pattern matching, and C++.

With the new release, LLVM will remove stores to constant memory under the assumption the code in question must be dead. This had proven to be a problem for some C/C++ code bases that expect to be able to cast away const. This has been an undefined behavior that until now had not been actively utilized for optimization purposes in this exact way.

In addition, LLVM now will pattern-match wide scalar values stored by a succession of narrow stores. For example, Clang will compile the following function writing a 32-bit value in big-endian order in a portable manner:

void write32be(unsigned char *dst, uint32_t x) {
  dst[0] = x >> 24;
  dst[1] = x >> 16;
  dst[2] = x >> 8;
  dst[3] = x >> 0;
)

Also, the LLVM optimizer now will convert calls to memcmp into bcmp in some instances.

Other changes in LLVM 9.0.0 include:

  • Experimental support for C++ for the OpenCL framework.
  • Two new extension points, EP_FullLinkTimeOptimizationEarly and EP_FullLinkTimeOptimizationLast, are available for plug-ins to specialize the legacy pass manager full LTO pipeline.
  • Support for asm goto, enabling, for example, the mainline Linux kernel for x86_64 to build with Clang.
  • The CMake parameter CLANG_ANALYZER_ENABLE_Z3_SOLVER was replaced by LLVM_ENABLE_Z3_SOLVER.
  • LLVM now emits range checks for jump tables when lowering switches with unreachable default destination.
  • The RISCV target has graduated from the “experimental” phase. It is now built by default.
  • The ORCv1 JIT API was deprecated.

One issue that remains with LLVM 9.0.0 results in Clang being miscompiled by GCC 9. This is cited as a known issue with the release.

READ ALSO  Tesla and Walmart address solar panel fire issues



Source link

?
WP Twitter Auto Publish Powered By : XYZScripts.com