LLVM Weekly - #143, Sep 26th 2016
Welcome to the one hundred and forty-third 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 https://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
Slides and videos are now available from the LLVM Cauldron 2016, which was recently held in Hebden Bridge (UK). A massive thank you to all attendees, speakers, helpers, and sponsors for making the event such a success. A special thanks are due to Simon Cook of Embecosm for handling the video recording (who as you may recall from a previous LLVM Weekly, got the videos online within a few days). Slides and videos are also available from the GNU Tools Cauldron. There was, as you would hope, a large overlap between attendees at the LLVM and GNU events and the joint social event also helped encourage mixing. I hope we'll be able to do something similar next year (i.e. co-located with the GNU Tools Cauldron, and with no fee for attendance).
Sanjoy Das has written up a blog post about how integer overflow fits in with LLVM's ScalarEvolution.
The APOLLO runtime-speculative polyhedral loop optimiser and parallelizer has been released. As explained on the project's homepage, the framework allows a user to mark nested loops to be handled by a speculative parallelization process.
Clang UPC 3.8.1-0 has been released. The Clang UPC project provides a compiler and execution environment for programs written in the Unified Parallel C language. It also includes a UPC to C translator.
The next LLVM social in Berlin will be taking place on Thursday 29th September at 7pm at the offices of Ableton.
Slides from the recent CppCon are starting to appear on GitHub. Videos are also starting to be uploaded to the CppCon YouTube channel.
On the mailing lists
-
Serge Pavlov proposes that Clang support configuration files that allows specifying options that would otherwise be passed on the command-line. Renato Golin moved the discussion towards how this could be used in cross-compilation toolchains, and Richard Pennington dropped by to explain the solution he uses for ellcc.
-
Krzysztof Parzyszek has shared an RFC on supporting variable-sized register classes. This is perhaps best understood by examining the motivation. Right now in-tree targets like MIPS and Hexagon have instructions that have multiple definitions in tablegen that are repeated for different register sizes. For instance, in MIPS OR and OR64. These instructions have the same encoding but need multiple definitions as they operate on different register sizes depending on if the machine is 32-bit or 64-bit. In this proposal, there would be a 'HwMode' which is determined from SubtargetInfo and this mode will determine the register size, spill size, spill alignment and valid types for a given RegisterClass. With the RISC-V backend work I'm upstreaming I'm keen to avoid duplicating definitions of the whole base instruction set across RV32, RV64 and potentially RV128, os discussed here trialled using a multiclass definition to parameterise the whole instruction set. Krzystof's proposal requires changes to TableGen, but should be simpler for the backend writer. A later follow-up helps to clarify how it works. More input on the idea is needed, particularly from maintainers of in-tree or out-of-tree backends that might be simplified with such a change.
-
Sanjoy Das is looking for feedback on his proposal to improve Scalar Evolution's behaviour on IR with no-wrap flags. Sanjoy's introduction to the problem is very clearly written, so I suggest the interested reader click through and take a look. Fundamentally, Sanjoy's proposal is that poison values are modeled as data within SCEV. An alternative approaches was suggested in some of the following discussion, which would be to represent proofs about IR values independently from SCEV.
-
Dylan McKay is looking for help with reviews of patches under submission for the AVR backend.
-
Zachary Turner has made a large list of ideas for the next step of LLDB evolution. Proposals include removing LLDB code that duplicates similary functionality in LLVM (particularly support code like lldb::Regex), adding a suite of smaller utilities such as lldb-breakpoint lldb-symbol and more to ease testing, and improving LLDB's testing. The thread contains 64 responses at the time of writing discussing the details of this proposal.
-
Ayal Zaks has shared an RFC on extending the loop vectorizer to vectorize outer-loops. The current loop vectorizer will only handle innermost loops, and Ayal lists a series of modifications that could be made to change this. The feedback so far appears to be positive.
-
Elena Demikhovsky has posted an RFC on adding new masked.expandload and masked.compressstore intrinsics. These would be lowered to AVX-512 VCOMPRESS and VEXPAND and scalarized on other targets.
-
Vendat Kumar has announced a new LLVM code coverage bot which will produce automatically updated coverage reports. As you would expect, these reports are generated using llvm-cov.
-
Duncan P. N. Exon Smith proposes that ConstantData should not have use-lists. ConstantData was added as a parent type for constants with no operations such as
i32 0
andnull
. Duncan outlines a plan for removing use-lists for these values and has attached some initial patches to do this.
LLVM commits
-
I missed it last week, but there has been a minor change to the stackmap format which will require external tools parsing stackmaps to be updated. Per-function callsite counts were added. r281532.
-
Documentation has been extended for the AMDGPU backend. r281962.
-
The check-coverage-regressions script has been deleted due to being too noisy for practical use. r281871.
-
Support for XRay on 32-bit ARM has been committed. r281878.
-
Development of GlobalISel continues with, amongst other changes, support for stack-based parameters on AArch64. r282153.
-
StringRef gained some predicated searching functions to return or remove characters until a condition is met. r282346.
Clang commits
-
A new tool, clang-change-namespace was born. This tool supports changing the containing namespace of class/function definitions while keeping references to types in the changed namespace correctly qualified. r281918.
-
This week has in fact seen the birth of two new clang tools. clang-move will move a specific class definition from a file to a new one, handling forward declarations etc. in the process. r282070.
-
Detailed user-facing documentation has been added for ThinLTO. r282089.
-
A new checker was added that detects calls to blocking functions (such as sleep or read) in a critical section. r282011.
-
The git-clang-format script gained an option to diff between two commits (rather than just from a commit against the working tree). r282136.