LLVM Weekly - #245, September 10th 2018

Welcome to the two hundred and forty-fifth 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.

News and articles from around the web

Applications for LLVM Foundation Travel Grants for full time undergraduate and graduate students are open until September 12th.

The next Zurich LLVM Compiler Social will be held on Thursday 13th September. It features talks on the Lean and Isabelle theorem provers.

The 4th LLVM/GCC social in Shenzhen will take place on September 16th.

Bekket McClane's series on writing an LLVM pass continues with guidance on integrating the pass into Clang.

Nuno Lopes and John Regehr have published a fascinating paper Future Directions for Optimizing Compilers on arXiv. "This paper examines the problem of making optimizing compilers faster, less buggy, and more capable of generating high-quality output."

On the mailing lists

Paul Kirth has shared an RFC on upstreaming Syringe, a dynamic behaviour injection framework. Developed as part of a Google internship, this framework allows users to specify alternate implementations of functions and dynamically switch behaviour at runtime. Gábor Márton provided feedback based on his work on fci_mock which was presented at EuroLLVM this year and suggests joining forces. David Chisnall suggests looking at the LOOM framework which provides similar functionality.

Jakub Kuderski has posted an RFC on per-callsite inline intrinsics, making it possible to manually force desired inlining decisions with a fine granularity.

Jonas Paulsson kicked off a discussion on improving sequences of shufflevector instructions produced by the loop vectorizer.

The 7.0.0 release is almost ready, but there will be a final release candidate (rc3) before the final tag. Hans Wennborg is requesting further additions to the release notes.

Kristina Brooks proposes a new __builtin_type_name Clang extension to retrieve a type name from a pointer. Full justification is given in the thread, which generated a reasonable amount of discussion.

LLVM commits

A new "hot cold" splitting pass was introduced, which can use profile information to outline cold regions to a separate function. r341669.

A new control height reduction pass was merged. This uses information from profiling to merge conditional blocks of code, merging the number of conditional branches in the hot path. r341386.

There were a number of changes related to the SpeculativeLoadHardening 'Spectre' mitigation pass. It learned to harden indirect branches and switches without retpolines, gained a mitigation against the ret2spec attack, and an LLVM IR attribute was added indicating a function body has speculative load hardening enabled. r341356, r341358, r341363.

TargetInstrInfo::has{StoreTo,LoadFrom}StackSlot was extended to return an array of accesses. r341301.

-Rpass-analysis=size-info will now output per-function size-info remarks rather than per-module summaries. r341588.

llvm-objcopy gained support for compressing DWARF .debug sections. r341635.

MemorySanitizer was extended with KMSAN, for kernel instrumentation. r341637.

Clang commits

A new compact binary serialization format was defined for clangd's symbol index. This is 10x more compact than YAML and 40% more compact than gzipped AML. r341375.

DWARF accelerator tables are now enabled by default when tuning for LLDB. r341564.

The deprecated getLocStart, getBeginLoc and getLocEnd APIs were removed. r341573.

Other project commits