LLVM Weekly - #55, Jan 19th 2015
Welcome to the fifty-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.
It seems to have been a very busy week in the world of LLVM, particularly with regards to discussion on the mailing list. Due to travel etc and the volume of traffic, I haven't been able to do much summarisation of mailing list discussion I'm afraid.
The canonical home for this issue can be found here at llvmweekly.org.
News and articles from around the web
LLM/Clang 3.6 has been branched and subsequently, 3.6 RC1 has been tagged.
LLVM/Clang 3.5.1 seems to have been quietly released.
Registration for EuroLLVM 2015, to be held at Goldsmiths College in London, UK on April 13-14th is now open.
All slides and videos from the last LLVM Developers' meeting are now live, including those from Apple employees.
On the mailing lists
Ahmed Bougacha has posted an RFC on adding integer saturation intrinsics to LLVM. There are various questions in the ensuing thread about whether adding an intrisc is necessary and the best way to go about this. i.e. whether it is possible to just pattern match later on in the compilation flow.
In response to a question about using LLDB when attached to a system that may switch between AARch32 and AArch64, Colin Riley has written a good description of current support and potential future support for multiple targets in one debugger session.
Jonathan Ragan-Kelley asks about emitting IR in older formats due to a requirement to emit 3.2-compatible bitcode for Nvidia's libNVVM. Several replies suggest looking at SPIR.
Do you wonder what the difference is between the multiple ways of querying operation costs? Wonder no more.
Duncan P.N. Exon Smith has posted on RFC on first-class debug info in IR. There have been a few changes since the previous proposal.
Chandler Carruth has written a summary of alias analysis pass ordering in LLVM and Clang. This details both the current situation as well as Chandler's views on how it should change in the future.
Philip Reames is seeking wider feedback on two implementation issues for GCStrategy. The two key questions are whether GC-specific properties should be checked in the IR verifier and what the access model for GCStrategy should be. No responses yet, so now is the time to dive in.
Ramshankar Ramanarayanan has posted a proof of concept for a loop fusion pass. Meanwhile, Adam Nemet has an RFC for a loop distribution pass.
Lang Hanes has posted a proposed new JIT API with a catchy name (ORC: On Request Compilation). The aim is to cleanly support a wider range of JIT uses cases, and to be clear this higher level API would not replace the existing MCJIT.
Bjoern Haase has been spending some time examining generated code for armv6 microcontroller targets such as the Cortex M0. He has a series of suggestions for tweaking default optimizer settings for this target.
LLVM commits
A new code diversity feature is now available. The NoopInsertion pass will add random no-ops to x86 binaries to try to make ROP attacks more difficult by increasing diversity. r225908. I highly recommend reading up on the blind ROP attack published last year. It would also be interesting to see an implementation of G-Free for producing binaries without simple gadgets. The commit was later reverted for some reason.
A nice summary of recent MIPS and PowerPC target developments, as well as the OCaml bindings is now there in the form of the 3.6 release notes. r225607, r225695, r225779.
LLVM learned the llvm.frameallocate and llvm.framerecover intrinsics, which allow multiple functions to share a single stack allocation from one function's call frame. r225746, r225752.
An experimental (disabled by default) 'inductive range check elimination' pass has landed. This attempts to eliminates range checks of the form
0 <= A*I + B < Length
. r226201.StackMap/PatchPoint support is now available for the PowerPC target. r225808.
Initial support for Win64 SEH catch handlers has landed. See the commit message for current missing functionality. r225904.
A new utility script has been started to help update simple regression tests. It needs some work to generalise it beyond x86. r225618.
TargetLibraryInfo has been moved into the Analysis library. r226078.
Clang commits
The new
-fno-inline-asm
flag has been added to disallow all inline asm. If it exists in the input code it will be reported as an error.
r226340.-fsanitize-recover
command line flags are again supported. r225719.The integrated assembler is now used by default on 32-bit PowerPC and SPARC. r225958.
Other project commits
The libcxx build system learnt how to cross-compile. r226237.
LLD gained a nice speedup by speculative instantiating archive file members. This shaves off a second or two for linking lld with lld. r226336.
LLD learnt the
--as-needed
flag (previously this was the default behaviour). r226274.OpenMP gained an AARch64 port. r225792.