LLVM Weekly - #224, Apr 16th 2018

Welcome to the two hundred and twenty-fourth issue of LLVM Weekly, a weekly newsletter (published every Monday) covering developments in LLVM, Clang, and related projects. LLVM Weekly is brought to you by Alex Bradbury. Subscribe to future issues at http://llvmweekly.org and pass it on to anyone else you think may be interested. Please send any tips or feedback to asb@asbradbury.org, or @llvmweekly or @asbradbury on Twitter.

EuroLLVM is going on today and tomorrow. I'll hopefully see many of you there.

News and articles from around the web

The latest set of papers for the C++ Standards Committee is now available.

On the mailing lists

Robin Kruppe has written an RFC on supporting the proposed RISC-V Vector extension in LLVM. This requires representing a hardware vector length that is unknown at compile time, and may change at runtime. Robin is presenting a lightning talk based on this proposal at EuroLLVM and is keen to discuss further.

Mostyn Bramley-Moore shared work on supporting 'Jumbo'/unity builds with Clang. The proof of concept clang plugin gives unique name to anonymous namespaces and undefs macros defined in each top-level file. This reduces the modifications needed to a large codebase like Clang to support a Jumbo build. Much of the ensuing discussions focus on the merits of Jumbo/unity builds vs Clang header modules.

Greg Clayton has given a detailed summary of the design principles of the ncurses-based LLDB 'GUI', as well as things he would like to see changed.

Mandeep Singh Grang reports that a new llvm::sort wrapper function has been introduced. For an EXPENSIVE_CHECKS build this will randomly shuffle the container before sorting, which helps to uncover non-deterministic sorting of objects with the same key.

Katya Romanova has started a discussion on unifying the bitcode file generation phase for ThinLTO and FullLTO, producing a 'unified' bitcode format. Mehdi Amini proposed a change in the compilation flow that might meet some of Katya's requirements.

LLVM commits

The X86 backend now has a new pass for lowering COPY nodes of EFLAGS. This preserves the necessary state in a GPR rather than using pushf/popf. r329657.

The RISC-V backend gained support for codegen for the RV32D (double-precision floating point) standard instruction set extension. r329871, r329874, and more.

MIPS GlobalISel now has the minimal support necessary to lower a function that returns the sum of two i32 values. r329819.

The newly added InitLLVM class was added to perform common initialization functions needed before using LLVM APIs. r330046.

llvm-mca gained the ability to recognise comments marking regions of code for analysis. r329590.

A partial demangling ABI was added, for use with LLDB. This allows propertie of a demangled name to be queried. r329951.

The Mips backend will now estimate the cost of generating a shifts+adds+subs for a constant multiplication and generate the multiply if it is too high. r330037.

Clang commits

The __builtin_dump_struct builtin will, as the name suggests, dump structure contents at runtime. r329762.

The -Wreturn-std-move and -Wreturn-std-move-in-c++11 diagnostics (off by default) warn when return x should be return std::move(x) for efficiency. r329914.

Clang toolchain drivers can now added multiple libc++ include paths. r329748.

Other project commits