LLVM Weekly - #375, March 8th 2021
Welcome to the three hundred and seventy-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 to asb@asbradbury.org, or @llvmweekly or @asbradbury on Twitter.
News and articles from around the web
Michał Górny blogged about work on LLDB FreeBSD support, detailing work already done, and work planned for the future.
Scott Wolchok blogged about parameter passing in C and C++.
On the mailing lists
Konrad Trifunovic posted an RFC on upstreaming a proper SPIR-V backend to LLVM, i.e. an LLVM backend that targets the SPIR-V portable IR format. The initial target would be SPIR-V for compute, with potential future extensions for 3d shaders. The RFC provides a brief summary of the previous discussions and areas where consensus wasn’t reched (specifically, the design choice of creating a translator library wrapped within a target, a ‘proper’ target using SelectionDAG/GlobalISel, or a binary emission layer). This resulted in a lengthy thread that I couldn’t hope to fully summarise. One notable line of discussion was around whether the goals could be achieved using MLIR.
Tanya Lattner shared that the deadline for mentors to submit Outreachy project proposals has been extended to March 11th. Unfortunately, at the time of writing that email, nobody had yet submitted a project idea or volunteered to be a mentor.
Kito Cheng proposed an RFC on proposed behaviour of
__fp16
for RISC-V. Sjoerd Meijer outlined some concerns with this proposal.Louis Dionne initiated a discussion on which compilers and compiler versions libc++ should claim to support.
Tom Stellard updated on the status of the 12.0.0 release, indicating it will be delayed by 1-2 weeks.
Kristof Beyls re-advertised the agenda and notes doc for the LLVM security group, who will be meeting next on 16th March.
Louis Dionne proposed improvements to the libc++ approval policy, which would increase the number of people approving patches.
LLVM GPU News Issue #7 is out.
David Zarzycki proposed creating llvm/Support/InternalLimts.h to contain essential constants such as the alignment limit.
Tanya Lattner warns that subscription to LLVM’s mailman lists has had to be disabled temporarily due to someone abusing the sign-up form to generate subscription confirmation emails maliciously.
Min-Yih Hsu notes that the new experimental M68k backend is abou to land.
ORC JIT Weekly #31 is out (in fact, it was out last week and narrowly missed that LLVM Weekly issue). It provides an update on debugger support for JITLink and the JITLink design document.
David Rector created a thread to discuss a benchmark indicating Clang evaluates constexpr substantially more slowly than GCC. Richard Smith noted this was due to GCC memoizing constant evaluations. In a trial where that optimisation isn’t possible, Clang out-performs GCC.
LLVM commits
The llvm-mca static performance analysis tool now support in-order CPUs such as the Arm Cortex-A55. d791695.
LoopVectorize was updated to generate runtime checks earlier in compilation, allowing a more precise estimate of the actual cost of the checks (which will be used in follow-up patches). 53dacb7.
A new JitLink debug support plugin was introduced, for now targeting ELF x86-64. ef23892.
The loop-invariant code motion pass was optimised, resulting in a ~1.8% geomean improvement on CTMark at O3. 3d8f842.
llvm-cov learned to cache file status information, resulting in a huge speedup. 9d8a3e7.
“Dangling pseudo probes” were introduced. These are probes associated with an empty block (e.g. one where all instructions were optimised away). ad2a59f.
The various LLVM IR syntax files were refreshed to support all current attributes. 2da21a1.
The previous MemDep-based implementation of DeadStoreElimination was removed, as the MemorySSA-backed version has been enabled by default without issue for some time. 176bbca.
Clang commits
The ShortNamespaceLine option was added to clang-format, allowing customisation of when a namespace is deemed too short to format. 6ca5281.
Clang can apply the
noundef
attribute at call sites when an argument or return value may never contain uninitialised bits. This allows MemorySanitizer to reduce the amount of generated instrumentation, reducing code size by up to 17% according to the commit message. 10264a1.
Other project commits
The new Darwin backend for LLD is now used by default (as noted in the commit message, this switch is now happening for LLVM 13 rather than LLVM 12). 415c0cd.
libunwind gained support for RV32 hard-float and soft-float RV32 and RV64. b17d464.
C bindings were added for
mlir::ExecutionEngine
, allowing the JIT to be invoked from the C API. 86c8a78.