[llvm] [Docs] Add a release note about trivial VP intrinsic removal (PR #218341)
Luke Lau via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 24 00:55:51 PDT 2026
https://github.com/lukel97 created https://github.com/llvm/llvm-project/pull/218341
None
>From 1a7cf5d292f79abbac30fe2a2187c757dff8089e Mon Sep 17 00:00:00 2001
From: Luke Lau <luke at igalia.com>
Date: Mon, 24 Aug 2026 15:54:34 +0800
Subject: [PATCH] [Docs] Add a release note about trivial VP intrinsic removal
---
llvm/docs/ReleaseNotes.md | 79 +++++++++++++++++++++++++++++++++++++++
1 file changed, 79 insertions(+)
diff --git a/llvm/docs/ReleaseNotes.md b/llvm/docs/ReleaseNotes.md
index 051d726b7aa8d..e47593e934b37 100644
--- a/llvm/docs/ReleaseNotes.md
+++ b/llvm/docs/ReleaseNotes.md
@@ -56,6 +56,85 @@ Makes programs 10x faster by doing Special New Thing.
freeing the underlying object (as opposed to only frees through that specific
pointer). Renamed `!nofree` metadata to `!nofreeobj`, as it has the same
semantics.
+* The following VP intrinsics have been removed:
+ * `llvm.vp.select.*`
+ * `llvm.vp.add.*`
+ * `llvm.vp.sub.*`
+ * `llvm.vp.mul.*`
+ * `llvm.vp.ashr.*`
+ * `llvm.vp.lshr.*`
+ * `llvm.vp.shl.*`
+ * `llvm.vp.or.*`
+ * `llvm.vp.and.*`
+ * `llvm.vp.xor.*`
+ * `llvm.vp.abs.*`
+ * `llvm.vp.smax.*`
+ * `llvm.vp.smin.*`
+ * `llvm.vp.umax.*`
+ * `llvm.vp.umin.*`
+ * `llvm.vp.copysign.*`
+ * `llvm.vp.minnum.*`
+ * `llvm.vp.maxnum.*`
+ * `llvm.vp.minimum.*`
+ * `llvm.vp.maximum.*`
+ * `llvm.vp.fadd.*`
+ * `llvm.vp.fsub.*`
+ * `llvm.vp.fmul.*`
+ * `llvm.vp.fdiv.*`
+ * `llvm.vp.frem.*`
+ * `llvm.vp.fneg.*`
+ * `llvm.vp.fabs.*`
+ * `llvm.vp.sqrt.*`
+ * `llvm.vp.fma.*`
+ * `llvm.vp.fmuladd.*`
+ * `llvm.vp.trunc.*`
+ * `llvm.vp.zext.*`
+ * `llvm.vp.sext.*`
+ * `llvm.vp.fptrunc.*`
+ * `llvm.vp.fpext.*`
+ * `llvm.vp.fptoui.*`
+ * `llvm.vp.fptosi.*`
+ * `llvm.vp.uitofp.*`
+ * `llvm.vp.sitofp.*`
+ * `llvm.vp.ptrtoint.*`
+ * `llvm.vp.inttoptr.*`
+ * `llvm.vp.fcmp.*`
+ * `llvm.vp.icmp.*`
+ * `llvm.vp.ceil.*`
+ * `llvm.vp.floor.*`
+ * `llvm.vp.rint.*`
+ * `llvm.vp.nearbyint.*`
+ * `llvm.vp.round.*`
+ * `llvm.vp.roundeven.*`
+ * `llvm.vp.roundtozero.*`
+ * `llvm.vp.lrint.*`
+ * `llvm.vp.llrint.*`
+ * `llvm.vp.bitreverse.*`
+ * `llvm.vp.bswap.*`
+ * `llvm.vp.ctpop.*`
+ * `llvm.vp.ctlz.*`
+ * `llvm.vp.cttz.*`
+ * `llvm.vp.sadd.sat.*`
+ * `llvm.vp.uadd.sat.*`
+ * `llvm.vp.ssub.sat.*`
+ * `llvm.vp.usub.sat.*`
+ * `llvm.vp.fshl.*`
+ * `llvm.vp.fshr.*`
+ * `llvm.vp.is.fpclass.*`
+
+ These intrinsics previously only set masked-off lanes to poison, and will be
+ automatically upgraded to their non-VP equivalent. On RISC-V the VL optimizer
+ should automatically infer `vl` in most cases from a store or reduction
+ instruction, so passing around an explicit EVL operand shouldn't be required.
+ If needed a "root" EVL can be synthesized with `llvm.vp.merge`, e.g:
+
+ ```llvm
+ %x = add <vscale x 2 x i32> %y, %z
+ %res = call <vscale x 2 x i32> @llvm.vp.merge(<vscale x 2 x i32> %x, <vscale x 2 x i32> poison, <vscale x 2 x i1> splat (i1 true), i32 %evl)
+ ```
+
+ The `llvm.vp.merge` will be folded away but the `%evl` will be propagated to
+ the add instruction.
### Changes to LLVM infrastructure
More information about the llvm-commits
mailing list