LLVM Weekly - #518, December 4th 2023
Welcome to the five hundred and eighteenth 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, @llvmweekly or @asbradbury on Twitter, or @llvmweekly@fosstodon.org or @asb@fosstodon.org.
News and articles from around the web and events
Another dozen videos from the LLVM Dev Meeting are now up on YouTube. Lots of great stuff there, e.g. my Igalia colleague Luke Lau’s presentation on vector codegen in the RISC-V backend.
The deadline for the FOSDEM LLVM devroom CfP has been extended to 8th December.
LLVM 17.0.6 was released.
The next LLVM Bay Area Monthly meetup is taking place today(December 4th).
According to the LLVM calendar in the coming week there will be:
- Office hours with the following hosts: Tobias Grosser, Anastasia Stulova, Quentin Colombet, Johannes Doerfert.
- Online sync-ups on the following topics: Pointer authentication, MemorySSA, OpenMP, C/C++ language working gropu, Flang, RISC-V, MLIR, HLSL, SPIR-V.
- For more details see the LLVM calendar, getting involved documentation on online sync ups and office hours.
On the forums
James Y Knight suggests naming the first release from a branch N.1.0 instead of N.0.0 to make it clearer when a compiler version is unreleased. As noted in the thread, this has some similarity to how GCC numbers its releases.
Ryan Joseph kicked off an interesting thread about LLVM compile times, prompting responses covering things like improvements in recent years and how Mojo deals with this challenge.
Pierre van Houtryve proposed make GlobalISel match table entries 1 byte instead of 8, reducing llc binary size by about 7%.
Utkarsh Saxena noted that with a recent bugfix, if LLVM moves to being built in C++20 mode by default then 17.0.6 would be the minimum version suitable for this. This triggered discussion about the policy for raising the minimum version and reflections from James Y Knight on issues in C++20 mode up until recent releases.
Guillaume Chatelet provided an RFC on LLVM libc testing strategy.
Wang Pengcheng posted an RFC thread on code-size optimisations of SelectionDAG’s MatcherTable, linking to patches written so far that reduce the MatcherTable size by 14% average for in-tree targets.
Artem Dergachev is seeking help in moving a patch for
[[clang::suppress]]
forwards.There’s been a fair bit more discussion about clang-formatting libcxx, with Christopher Di Bella noting that it may be worth addressing some known clang-format bugs before doing this and Louis Dionne proposing a timeline for the next steps.
Nikolas Klauser proposes allowing C++11 lambdas in C++03 as an extension.
LLVM commits
I haven’t separated out all the relevant commits, but more work towards non-instruction debuginfo has been landing. e.g. 3ef98bc.
AArch64’s frame lowering logic was modified to write to the stack at regular enough intervals to ensure the guard page can’t be skipped over (‘stack probing’). cc944f5.
The X86 backend can now use PUSHP/POPP and PUSH2[P]/POP2[P] for register spilling and reloading when targeting a machine with the ‘PPX’ extension. cb112eb.
The recently added ‘disjoint’ flag for ‘or’ is now set when an ‘add’ is converted to an ‘or’ and can be inferred in some cases. 03d4a9d, 7ec4f60.
MC layer support was added for the AArch64 Checked Pointer Arithmetic extension. eef8e1d.
Debugify was modified to be usable with the work-in-progress non-instruction debuginfo support. d2d9dc8.
Terminator folding was enabled for RISC-V. e947f95.
The llvm-reduce documentation gained some example invocations. 792253a.
The RISC-V backend’s split regalloc pass structure for RVV is now enabled by default. d0a39e6.
Clang commits
#pragma clang fp reciprocal
was introduced, allowing control over using reciprocal approximations in floating-point expressions. 0237f1b.Documentation on Clang’s
-verify
command-line option (used extensively when writing Clang tests) is now in the internals manual rather than in VerifyDiagnosticConsumer.h. 15798f4.The clang-offload-bundler documentation was significantly improved. 3cf1909.
Support for mutually exclusive groups was added for YAML-based multilib configurations. As explained in the commit message, this can be used to ensure multiple multilibs aren’t selected at once even if they would otherwise be compatible with the compile-time options. 8727982.
Other project commits
libc hash table functions
hcreate[_r]/hsearch[_r]/hdestroy[_r]
were implemented, using a design inspired by Rust’s hashbrown library. 81e3e7e.Reference counting was disabled for the libcxx classic locale, speeding up parallel stringstream benchmarks significantly. 1a5af34.
LLVM’s libc implementation docs were brought up to date. 43f783f.
Initial support was added for using picolibc with libcxx. 8aeaceb.
The tensor.concat operation was added to MLIR’s tensor dialect. f310a5d.