LLVM Weekly - #478, February 27th 2023
Welcome to the four hundred and seventy-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 asb@asbradbury.org, or @llvmweekly or @asbradbury on Twitter.
Readers might be interested to note I finally got round to some light updates on my blog, and kicked off some notes on publicly visible development work I’ve been doing in recent weeks.
News and articles from around the web and events
Unfortunately the Cambridge LLVM social planned for February 28th is cancelled.
The LLVM Foundation strategic planning meetings on grants on scholarships will take place today and tomorrow.
At the next online MLGO meeting on March 3rd, Yuowei Liang will present “Learning Compiler Pass Orders using Coreset and Normalized Value Prediction”.
According to the LLVM calendar in the coming week there will be:
- Office hours with the following hosts: Quentin Colombet, Johannes Doerfert.
- Online sync-ups on the following topics: MLIR C/C++ frontend, pointer authentication, OpenMP, Clang C/C++ language working group, Flang, RISC-V, embedded toolchains, HLSL, SPIR_V, MLGO, GPU.
- For more details see the LLVM calendar, getting involved documentation on online sync ups and office hours.
On the forums
Tom Stellard proposed the introduction of “RFC shepherds” to help guide an RFC through to a definitive yes or no decision.
Nikita Popov posted an RFC on replacing getelementptr (GEP) with ptradd, listing the issues with GEPs and pointing out that as getelementptr can be converted to ptradd as long as DataLayout is available, there should be a clean migration path.
Mehdi Amini initiated an RFC discussion on ‘MLIR actions’, to aid tracing and debugging MLIR-based compilers.
LLVM 16.0.0-rc3 was tagged.
Two PSAs to note from the MLIR sub-forum: 1) in-tree conversion passes can now emit opaque pointers, and 2) the old ‘fold’ signature has been removed entirely.
Peter Klausler shares the most recent report to the US Fortran Programming Language Standards Technical Committee on the status of Flang.
Denis Revunov posted an RFC on adding a new mode to BOLT to rewrite an entire binary (as opposed to leaving the old sections in-place).
Diana shared an MLIR RFC on adding support for translating a subset of MLIR dialects to C99.
“Flightor” proposed adding a prefetch pragma to Clang, to work around some issues with
__builtin_prefetch
.“Muon” started a discussion about the lack of clarity on the semantics of floating-point instructions, specifically the extent to which it’s specified they correspond to IEEE 754 arithmetic. Eli Friedman listed some caveats for basic FP ops (e.g. fadd) IEEE 754 conformance.
Mathieu Fehr proposed IRDL, a dialect for dynamic dialects in MLIR.
Brad Richardson invoked the little-used LLVM contentious decision making process on the topic of renaming flang-new to flang.
Kristof Beyls provided an experience report from trialling reviewable.io and git spr, as potential helper tools for the upcoming LLVM migration to GitHub PRs.
LLVM commits
Whole program devirtualisation was taught about relative vtables. db28818.
llvm.experimental.vector.deinterleave2
andllvm.experimental.vector.interleave2
intrinsics were introduced, with lowering also added for RISC-V. d515ecc, 8d15e72.LowerTypeTests can now generate Armv6-M jump tables. a8cd35c.
A new pass was introduced to the RISC-V backend that initialises undef vector values to a temporary pseudo instructions in order to prevent a violation of register allocation constraints. 3b8c0b3.
Support was added for the vendor-specific RISC-V extensions XTHeadMemPair, XTHeadCmo, XTHeadSync, XTHeadMemIdx, XTHeadFMemIdx, XTheadCondMov, XTHeadMemPair bbb58a2, f5b484c, 16a6cf6, f626220, 7b79e8d, f68f04d, bbb58a2.
The
nofpclass
parameter attribute was introduced to LLVM IR, which can be used to indicate forbidden floating point value kinds (e.g. NaNs). 5da6744.
Clang commits
Clang no longer supports
std::experimental::coroutine_traits
and-fcoroutines-ts
was removed. 55900a0, 6ed67cc.There’s been more incremental progress on clang-format support for Verilog, with clang-format now putting ports on separate lines in Verilog module headers. 6e473ae.
clang-format gained the ability to use simple macro replacements in formatting. 0140283.