Paul Krill
Editor at Large

LLVM 9.0.0 arrives with major improvements

news
Sep 25, 20192 mins

LLVM compiler infrastructure project delivers optimizations for memory, pattern matching, and C++

abstract binary code
Credit: Thinkstock

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.

LLVM supports compilers for the Rust and Swift languages and a toolkit for building new languages. One possible area of growth for LLVM is machine learning, with the MLIR (Multi-Level Intermediate Representation) machine learning compiler infrastructure having just been contributed to the LLVM Foundation. MLIR was created by the developers of the TensorFlow machine learning library.

Where to download LLVM 9.0.0

You can download LLVM 9.0.0 from llvm.org

Paul Krill

Paul Krill is editor at large at InfoWorld. Paul has been covering computer technology as a news and feature reporter for more than 35 years, including 30 years at InfoWorld. He has specialized in coverage of software development tools and technologies since the 1990s, and he continues to lead InfoWorld’s news coverage of software development platforms including Java and .NET and programming languages including JavaScript, TypeScript, PHP, Python, Ruby, Rust, and Go. Long trusted as a reporter who prioritizes accuracy, integrity, and the best interests of readers, Paul is sought out by technology companies and industry organizations who want to reach InfoWorld’s audience of software developers and other information technology professionals. Paul has won a “Best Technology News Coverage” award from IDG.

More from this author