LLVM Weekly - #102, Dec 14th 2015
Welcome to the one hundred and second 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.
The canonical home for this issue can be found here at llvmweekly.org.
News and articles from around the web
Version 1.5 of the Rust programming language has been released. Rust of course uses LLVM as its backend.
George Balatsouras has written a blog post on compiling a project using autotools to LLVM bitcode.
On the mailing lists
Derek Schuff kicked off a discussion about whether virtual registers should be allowed after register allocation for targets with infinite virtual register sets. For targets such as WebAssembly and NVPTX, it of course doesn't make sense to have a fixed size register file. A number of people raised concerns that using virtual registers after register allocation seems like a hack that could result in difficult corner cases, or suggested that supporting infinite (or at least growable) physical register sets might be an interesting alternative. Matthias Braun gave a really good summary of the issues.
Discussion has continued on adding an HasInaccessibleState attribute. Vaivaswatha Nagaraj summarised the key points of the discussion so far while Joseph Tremoulet shared some thoughts based on his experience on the Microsoft Phoenix compiler.
Alexander Riccio is interested in feedback on his proposal to integrate more static analysis tests. He's looking to import code published by NIST.
Philip Reames has posted an RFC on extending atomic loads and stores to floating point and vector types. Feedback appears to be positive.
Hans Wennborg has proposed a schedule for the 3.8 release. Under this proposal, 3.8 would be branched on the 13th of January 2016 with a final release targeted for 18th February.
Craig Topper has provided a useful description of how patterns are ordered by TableGen.
David Li has posted an update detailing remaining steps for size reduction of profile-guided optimisation.
When writing your own backend, how should you handle checking the range of immediates for your assembly parser? Alex Bradbury explains how.
LLVM commits
A new minimum spanning tree based method of instrumenting code for profile-guided optimisation was added. This guarantees the minimum number of CFG edges are instrumented. r255132.
MatchBSwap in InstCombine will now also detect bit reversals. r255334.
Sample-based profile-guided optimisation memory usage has been reduced by 10x by changing from using a DenseMap for sample records to a std::map. r255389.
An
Instruction::getFunction
method was added. It's perhaps surprising this didn't exist before. r254975.FP16 vector instructions defined in ARMv8.2-A are now supported. r255010.
The EarlyCSE (common subexpression elimination) pass learned to perform value forwarding for unordered atomics. r255054.
Debug info in LLVM IR can now refer to macros. r255245.
LLVM's developer policy has been updated to detail the currently accepted C API stability policy and other guidelines. r255300.
A massive rework of funclet-oriented exception handling (needed for Windows exceptions) has landed. r255422.
Clang commits
Clang gained an option to use the new ThinLTO pipeline. r254927.
Hexagon will use the integrated assembler by default. r255127.
dllexport and dllimport attributes are now exposed through the libclang API. r255273.
Other project commits
ThreadSanitizer gained initial support for PPC64. r255057.