LLVM Weekly - #585, March 17th 2025
Welcome to the five hundred and eighty-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 https://llvmweekly.org and pass it on to anyone else you think may be interested. Please send any tips or feedback via email: asb@asbradbury.org, or Mastodon: @llvmweekly@fosstodon.org / @asb@fosstodon.org, or Bluesky: @llvmweekly.org / @asbradbury.org.
News and articles from around the web and events
LLVM 20.1.0 was released.
An in-depth LLVM project blog post from David Spickett goes into depth on the history of Flang, technical implementation details, and the switch from flang-new to flang.
The agenda for the MLIR workshop at EuroLLVM is now available.
The next LLVM Bay Area meetup will take place on 31st March.
The next HelloLLVM online meetup will take place on March 22nd.
According to the LLVM calendar in the coming week there will be the following:
- Office hours with the following hosts: Phoebe Wang, Johannes Doerfert, Aaron Ballman.
- Online sync-ups on the following topics: Flang, vectorizer, modules, libc++, security response group, LLVM/offload, C/C++ language working group, LLVM area team, classic flang, SPIR-V, OpenMP, infrastructure area team, LLVM memory safety.
- For more details see the LLVM calendar, getting involved documentation on online sync ups and office hours.
On the forums
Alex Zinenko, on on behalf of the MLIR area team announced the roles of team members and introduced the group, and Renato Golin share dminutes from the first meeting.
Renato Golin shared notes from the tensor compiler design group.
Yuta Mukai proposed a new pass for write-allocate evasion.
Pater Waller shared a graph of the speedup of clang build with PGO and BOLT.
Krzysztof Parzyszek proposes updating Flang to follow LLVM’s recommendation of using early exits.
LLVM commits
A new
!match
operator was added to TableGen to do regex matching. 376e3b6.A new hook was added to scale the register spill weight by a target-specific factor, and used for RISC-V. The reasoning is that different register classes have different spill costs (as noted in the commit, for RISC-V vector registers with
LMUL > 1
are more expensive than whenLMUL=1
). 08a3c53.Assembler/disassembler support was implemented for Xtensa MAC16. 69527b0.
The SLP vectorizer learned a new “SplitVectorize” mode where it will split vectorised operations by opcode, reducing register pressure (see the commit message for an example). 1008539.
A new
-cost-kind=all
flag can now be used to print output of all cost model kinds. cdf1833.The cost model for early exit loops in the loop vectorizer was improved. 26ecf97.
LLVM’s code review documentation now covers upstreaming changes to LLVM from a downstream project. 77b55c7.
A new AdvisoryLock interface was added to Support. d8dfdaf.
Optimisations were implemented for SystemZ vector comparison, widening and high-word vector multiply, and zero/sign extension. 7af3d39, cdc7864, 4a4987b.
The instructions on cross-compiling LLVM were totally rewritten, and have been tested when targeting 32-bit Arm, AArch64, or 64-bit RISC-V from an x86_64 host. ba11e1e.
Clang commits
By default Clang now uses the in-tree LLVM SPIR-V backend to generated SPIR-V binaries, rather than invoking the external
llvm-spirv
tool. 919d293.alpha.webkit.UnretainedLambdaCapturesChecker, alpha.webkit.NoUnretainedMemberChecker, alpha.webkit.UnretainedCallArgsChecker, alpha.webkit.RetainPtrCtorAdoptChecker, and alpha.webkit.ForwardDeclChecker were added. 5c3b059, c8ec807, caf3018, be9ca85. 4dcba5e.
ClangIR flattening support was committed (a pass that ensures the ClangIR CFG is flat). 701148f.
__builtin_elementwise_exp10
was added. 7decd04.The process for proposing an extension to Clang was documented. 1d89d7d.
Other project commits
Flang’s FrontendActions.cpp was split in order to decrease the maximum compilation time and memory usage of a single translation unit (it was one of the biggest compilation units). Additionally, precompiled headers are now used to further reduce memory usage and compilation time. 0c7e895, 0c5eb4d.
Documentation was added for the LLVM libc UEFI target. 4e841d7.
As part of porting LLDB to AIX, support for NativeProcess was implemented. ec95ce3.
Module flags support was added to MLIR’s LLVMIR dialect. 29a0000.