Welcome to the forty-eighth 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 firstname.lastname@example.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
John Regehr has posted an update on the Souper superoptimizer which he and his collaborators have been working on. They have implemented a reducer for Souper optimizations that tries to reduce the optimization to something more minimal. There current results given ~4000 distinct optimisations of which ~1500 LLVM doesn't know how to do. Of course many of these may in fact be covered by a single rule or pass. One of the next steps for Souper is to extend Souper to support the synthesis of instruction sequences. See also the discussion on the llvm mailing list.
The LLVM Blog features a summary of recent advances in loop vectorization for LLVM. This includes diagnostics remarks to get feedback on why loops which aren't vectorized are skipped, the loop pragma directive in Clang, and performance warnings when the directive can't be followed.
The LLVM Haskell Compiler (LHC) has been newly reborn along with its blog. The next steps in development are to provide better support for Haskell2010, give reusable libraries for name resolution and type checking, and to produce human-readable compiler output.
The next LLVM Social in Paris will take place on December 9th.
Intel have published a blog post detailing new X86-specific optimisations in GCC 5.0. You may also be interested in the discussion of this post on Hacker News.
On the mailing lists
Hal Finkel has posted an RFC suggesting the removal of the BBVectorize pass on the basis that it hasn't progressed to production quality while the SLP vectorizer exists and has been enabled for some time and it has various bugs and code fixmes. If you feel differently, now is the time to speak up.
Yichao Yu is curious about the current state of MCJIT for ARM. Several people responded to say they've been using it with few problems on ARM, though Renato Golin would like to see a few more success stories before marking it as 'supported' on the appropriate status page.
Tom Stellard is planning to start the 3.5.1 release cycle shortly. Let him know if you'd like to help with testing.
When developing a non-upstreamed LLVM backend, should you do it as a loadable module or just apply to a cloned LLVM repo? Rafael Auler has tried the approach of building his backend as a loadable module and feels it would have been better to fork LLVM and rebase when necessary. This is the approach your esteemed editor has taken (though admittedly it's been far too long since he rebased...).
-debug-ir(emitting the LLVM IR in debug data) was removed. There's no real justification or explanation in the commit message, but it's likely it was unfinished/unused/non-functional. r222945.
InstCombine will now canonicalize toward the value type being stored rather than the pointer type. The rationale (explained in more detail in the commit message) is that memory does not have a type, but operations and the values they produce do. r222748.
The documentation for
!invariant.loadmetadata has been clarified. r222700.
In tablegen, neverHasSideEffects=1 is now hasSideEffects=0. r222801.
Four new ASTMatchers have been added: typedefDecl, isInMainFile, isInSystemFile, and isInFileMatchinName. r222646.