LLVM Weekly - #597, June 9th 2025
Welcome to the five hundred and ninety-seventh 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
The call for proposals for the LLVM Developers' Meeting is open. Submissions are due by July 15th. The event will take place on October 28th-29th in Santa Clara.
Matt Godbolt has written up a blog post on how Compiler Explorer works in 2025.
According to the LLVM Calendar in the coming week there will be the following:
- Office hours with the following hosts: Aaron Ballman, Alexey Bader, Alina Sbirlea, Kristof Beyls, Johannes Doerfert
- Online sync-ups on the following topics: Flang, alias analysis, modules, libc++, SPIR-V, BOLT, OpenMP for Flang, memory safety.
- For more details see the LLVM calendar, getting involved documentation on online sync ups and office hours.
On the forums
Luc Forget, Ferdinand Lemaire, and Jessica Paquette proposed an MLIR dialect for WebAssembly. This is intended to support ahead of time compilation of Wasm to native code.
A group of MLIR developers proposed introducing the ‘MLIR Project Lighthouse’. The idea is to make a separate LLVM repository, like LLVM’s test-suite that provides end-to-end pipelines. “The key here is to serve as an upstream demonstrator of existing expectations. Downstream projects (such as IREE, TPP, Tile IR, CIRCT) would work together with their communities to add common recipes as standalone scripts/binaries or -opt pass pipelines, and tests, to make sure integration end-to-end testing is done in upstream LLVM/MLIR.”
Jeremy Kun started a discussion on what patterns can/should be upstreamed to MLIR which generated some thoughtful replies.
The LLVM 20.1.7 release was delayed to June 12th and the intention is that this is the last 20.1.x release.
Rahul Joshi suggests changing the LLVM coding standard to deprecate the use of
(void)Foo
in favour of[[maybe_unused]]
for suppressing unused variable warnings.Karl Friebel started a thread to reignite discussions from the EuroLLVM roundtable on MLIR debug information and pass tracing.
Caroline Tice proposed a migration plan for moving libc++ premerge testing to the new LLVM premerge testing infrastructure.
Kristof Beyls on behalf of the security response group proposed improvements to the wording of what is considered a security issue by the LLVM project. The main feedback so far is that it would be good to provide more clarity on what kinds of issues in the parts of the LLVM project deemed “security sensitive” should be be handled as a security issue.
Rahul Joshi notes the large size of some
*ISelLowering.cpp
and suggests an effort to split them up.DonĂ¡t Nagy wrote up notes on the role of ProgramPointTag in the static analyzer as well as ideas to simplify it.
Apologies for missing the discussion before, but Haojian Wu started a discussion on moving to 64-bit source locations in Clang and shared some statistics on the memory usage impact.
Yingwei Zheng started an RFC discussion on a function attribute to provide constant time execution guarantees in LLVM. Respondents so far are suggesting introducing constant-time intrinsics instead.
Britton Watson is still seeking more volunteers for the LLVM Dev Meeting program committee and student travel grant committee.
Joseph Faulls is seeking feedback on an RFC to improve MachineSink sinking into cycles.
LLVM commits
The size of the MC instruction decoder table was reduced by 5-30% across different targets by changes to the decoder opcode representation. e53ccb7.
A
SimplifyTypeTests
pass was introduced. 3fa231f.In order to avoid the need for targets to define
MCTargetExpr
subclasses just to encode an expression with a relocation specifier,MCSpecifierExpr
was introduced. 97a32f2, 4a6b4d3, and more.The new
HashRecognize
analysis was introduced, which will recognise polynomial hashes (e.g. to help select CRC instructions). af2f8a8.MachineCopyPropagation now performs instruction simplification (
TargetInstrInfo::simplifyInstruction
) iteratively, which catches more cases than before. e723e15.The RISC-V backend now materialises constants using
lui
andaddi
rather thanlui
andaddiw
on RV64 whenever possible, which provides more opportunities for memory offset folding. This reduces the dynamic instruction count of the 519.lbm_r benchmark by 4%. 3d2650b.Various LLVM interfaces have been annotated for DLL export, as part of the work to (in the future) support an LLVM Windows DLL (shared library) build. 7dc5dc9.
Initial support was implemented for SVE unwind on Windows AArch64. 6f64a60.
IRMover no longer considers opaque types isomorphic to other types. bb75f65.
A scheduling model was implemented to the RISC-V backend for the Andes 45 series processor. 991d754.
LoopAccessAnalysis now has an option to keep the runtime pointer checks for the pointer that it could analyse even when there are some that it can’t. 81d3189.
LLVM’s libc is no longer included in builds with
LLVM_ENABLE_PROJECTS=all
. 52ad274.The machine scheduler’s instruction clustering was improved. 0487db1.
Clang commits
libclang’s ABI and API stability was documented. It includes a non-exhaustive list of cases where ABI and API breaking changes may occur. ab650c6.
The
-CCC_OVERRIDE_OPTIONS
option was documented. 95ea436.__builtin_get_vtable_pointer
was added. 93314bd.The new
cfi_unchecked_callee
attribute can be used to prevent the compiler from instrumenting Control Flow Integrity checks on indirect function calls. b194cf1.
Other project commits
Building libclc by including it in
LLVM_ENABLE_PROJECTS
was deprecated.LLVM_ENABLE_RUNTIMES
should be used instead. 6306f0f.libc++’s
priority_queue
is nowconstexpr
for C++26. 3e5fd77.Unroll patterns and a blocking pass was added for the MLIR XeGPU dialect. 0210750.
A new
isMaskTriviallyFoldable
helper was added to MLIR’s vectorization hooks, andcreateWriteOrMaskedWrite
gained a new parameter for write indices. b4b86a7.LLVM’s OpenMP library can now be built for SPARC. 3f8827e.