[llvm] [unittests][IR] Fix VPIntrinsicTest after removal of trivial VP intrinsics (PR #219454)
Wenju He via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 28 05:37:39 PDT 2026
https://github.com/wenju-he updated https://github.com/llvm/llvm-project/pull/219454
>From 06b532670309f01cadf7a74040092e1884dc6f77 Mon Sep 17 00:00:00 2001
From: Wenju He <wenju.he at intel.com>
Date: Fri, 28 Aug 2026 14:20:10 +0200
Subject: [PATCH 1/2] [unittests][IR] Fix VPIntrinsicTest after removal of
trivial VP intrinsics
ad9138f6b784 removed llvm.vp.{add,sub,mul,and,or,xor,ashr,lshr,shl}
but didn't update VPIntrinsicTest.cpp, which still declared/used them.
The test still passes today only because UpgradeCallsToIntrinsic
silently erases these now-unregistered bare declarations during
parsing (no call sites to rewrite), so the test never actually
exercises them. Drop them from BinaryIntOpcodes and switch
llvm.vp.mul to llvm.vp.sdiv in CanIgnoreVectorLength/VPReductions.
Co-Authored-By: Claude Sonnet 5 <noreply at anthropic.com>
---
llvm/unittests/IR/VPIntrinsicTest.cpp | 40 +++++++++++++--------------
1 file changed, 19 insertions(+), 21 deletions(-)
diff --git a/llvm/unittests/IR/VPIntrinsicTest.cpp b/llvm/unittests/IR/VPIntrinsicTest.cpp
index 66e12a5fbac29..31ad4fe2ea466 100644
--- a/llvm/unittests/IR/VPIntrinsicTest.cpp
+++ b/llvm/unittests/IR/VPIntrinsicTest.cpp
@@ -40,10 +40,8 @@ class VPIntrinsicTest : public testing::Test {
SMDiagnostic Err;
std::unique_ptr<Module> createVPDeclarationModule() {
- const char *BinaryIntOpcodes[] = {"add", "sub", "mul", "sdiv", "srem",
- "udiv", "urem", "and", "xor", "or",
- "ashr", "lshr", "shl", "smin", "smax",
- "umin", "umax"};
+ const char *BinaryIntOpcodes[] = {"sdiv", "srem", "udiv", "urem",
+ "smin", "smax", "umin", "umax"};
std::stringstream Str;
for (const char *BinaryIntOpcode : BinaryIntOpcodes)
Str << " declare <8 x i32> @llvm.vp." << BinaryIntOpcode
@@ -238,29 +236,29 @@ TEST_F(VPIntrinsicTest, CanIgnoreVectorLength) {
std::unique_ptr<Module> M =
parseAssemblyString(
-"declare <256 x i64> @llvm.vp.mul.v256i64(<256 x i64>, <256 x i64>, <256 x i1>, i32)"
-"declare <vscale x 2 x i64> @llvm.vp.mul.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i1>, i32)"
-"declare <vscale x 1 x i64> @llvm.vp.mul.nxv1i64(<vscale x 1 x i64>, <vscale x 1 x i64>, <vscale x 1 x i1>, i32)"
+"declare <256 x i64> @llvm.vp.sdiv.v256i64(<256 x i64>, <256 x i64>, <256 x i1>, i32)"
+"declare <vscale x 2 x i64> @llvm.vp.sdiv.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i1>, i32)"
+"declare <vscale x 1 x i64> @llvm.vp.sdiv.nxv1i64(<vscale x 1 x i64>, <vscale x 1 x i64>, <vscale x 1 x i1>, i32)"
"declare i32 @llvm.vscale.i32()"
"define void @test_static_vlen( "
" <256 x i64> %i0, <vscale x 2 x i64> %si0x2, <vscale x 1 x i64> %si0x1,"
" <256 x i64> %i1, <vscale x 2 x i64> %si1x2, <vscale x 1 x i64> %si1x1,"
" <256 x i1> %m, <vscale x 2 x i1> %smx2, <vscale x 1 x i1> %smx1, i32 %vl) { "
-" %r0 = call <256 x i64> @llvm.vp.mul.v256i64(<256 x i64> %i0, <256 x i64> %i1, <256 x i1> %m, i32 %vl)"
-" %r1 = call <256 x i64> @llvm.vp.mul.v256i64(<256 x i64> %i0, <256 x i64> %i1, <256 x i1> %m, i32 256)"
-" %r2 = call <256 x i64> @llvm.vp.mul.v256i64(<256 x i64> %i0, <256 x i64> %i1, <256 x i1> %m, i32 0)"
-" %r3 = call <256 x i64> @llvm.vp.mul.v256i64(<256 x i64> %i0, <256 x i64> %i1, <256 x i1> %m, i32 7)"
-" %r4 = call <256 x i64> @llvm.vp.mul.v256i64(<256 x i64> %i0, <256 x i64> %i1, <256 x i1> %m, i32 123)"
+" %r0 = call <256 x i64> @llvm.vp.sdiv.v256i64(<256 x i64> %i0, <256 x i64> %i1, <256 x i1> %m, i32 %vl)"
+" %r1 = call <256 x i64> @llvm.vp.sdiv.v256i64(<256 x i64> %i0, <256 x i64> %i1, <256 x i1> %m, i32 256)"
+" %r2 = call <256 x i64> @llvm.vp.sdiv.v256i64(<256 x i64> %i0, <256 x i64> %i1, <256 x i1> %m, i32 0)"
+" %r3 = call <256 x i64> @llvm.vp.sdiv.v256i64(<256 x i64> %i0, <256 x i64> %i1, <256 x i1> %m, i32 7)"
+" %r4 = call <256 x i64> @llvm.vp.sdiv.v256i64(<256 x i64> %i0, <256 x i64> %i1, <256 x i1> %m, i32 123)"
" %vs = call i32 @llvm.vscale.i32()"
" %vs.x2 = mul i32 %vs, 2"
-" %r5 = call <vscale x 2 x i64> @llvm.vp.mul.nxv2i64(<vscale x 2 x i64> %si0x2, <vscale x 2 x i64> %si1x2, <vscale x 2 x i1> %smx2, i32 %vs.x2)"
-" %r6 = call <vscale x 2 x i64> @llvm.vp.mul.nxv2i64(<vscale x 2 x i64> %si0x2, <vscale x 2 x i64> %si1x2, <vscale x 2 x i1> %smx2, i32 %vs)"
-" %r7 = call <vscale x 2 x i64> @llvm.vp.mul.nxv2i64(<vscale x 2 x i64> %si0x2, <vscale x 2 x i64> %si1x2, <vscale x 2 x i1> %smx2, i32 99999)"
-" %r8 = call <vscale x 1 x i64> @llvm.vp.mul.nxv1i64(<vscale x 1 x i64> %si0x1, <vscale x 1 x i64> %si1x1, <vscale x 1 x i1> %smx1, i32 %vs)"
-" %r9 = call <vscale x 1 x i64> @llvm.vp.mul.nxv1i64(<vscale x 1 x i64> %si0x1, <vscale x 1 x i64> %si1x1, <vscale x 1 x i1> %smx1, i32 1)"
-" %r10 = call <vscale x 1 x i64> @llvm.vp.mul.nxv1i64(<vscale x 1 x i64> %si0x1, <vscale x 1 x i64> %si1x1, <vscale x 1 x i1> %smx1, i32 %vs.x2)"
+" %r5 = call <vscale x 2 x i64> @llvm.vp.sdiv.nxv2i64(<vscale x 2 x i64> %si0x2, <vscale x 2 x i64> %si1x2, <vscale x 2 x i1> %smx2, i32 %vs.x2)"
+" %r6 = call <vscale x 2 x i64> @llvm.vp.sdiv.nxv2i64(<vscale x 2 x i64> %si0x2, <vscale x 2 x i64> %si1x2, <vscale x 2 x i1> %smx2, i32 %vs)"
+" %r7 = call <vscale x 2 x i64> @llvm.vp.sdiv.nxv2i64(<vscale x 2 x i64> %si0x2, <vscale x 2 x i64> %si1x2, <vscale x 2 x i1> %smx2, i32 99999)"
+" %r8 = call <vscale x 1 x i64> @llvm.vp.sdiv.nxv1i64(<vscale x 1 x i64> %si0x1, <vscale x 1 x i64> %si1x1, <vscale x 1 x i1> %smx1, i32 %vs)"
+" %r9 = call <vscale x 1 x i64> @llvm.vp.sdiv.nxv1i64(<vscale x 1 x i64> %si0x1, <vscale x 1 x i64> %si1x1, <vscale x 1 x i1> %smx1, i32 1)"
+" %r10 = call <vscale x 1 x i64> @llvm.vp.sdiv.nxv1i64(<vscale x 1 x i64> %si0x1, <vscale x 1 x i64> %si1x1, <vscale x 1 x i1> %smx1, i32 %vs.x2)"
" %vs.wat = add i32 %vs, 2"
-" %r11 = call <vscale x 2 x i64> @llvm.vp.mul.nxv2i64(<vscale x 2 x i64> %si0x2, <vscale x 2 x i64> %si1x2, <vscale x 2 x i1> %smx2, i32 %vs.wat)"
+" %r11 = call <vscale x 2 x i64> @llvm.vp.sdiv.nxv2i64(<vscale x 2 x i64> %si0x2, <vscale x 2 x i64> %si1x2, <vscale x 2 x i1> %smx2, i32 %vs.wat)"
" ret void "
"}",
Err, C);
@@ -350,7 +348,7 @@ TEST_F(VPIntrinsicTest, VPReductions) {
SMDiagnostic Err;
std::stringstream Str;
- Str << "declare <8 x i32> @llvm.vp.mul.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, "
+ Str << "declare <8 x i32> @llvm.vp.sdiv.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, "
"i32)";
for (const char *ReductionOpcode : ReductionIntOpcodes)
Str << " declare i32 @llvm.vp.reduce." << ReductionOpcode
@@ -365,7 +363,7 @@ TEST_F(VPIntrinsicTest, VPReductions) {
// Mix in a regular non-reduction intrinsic to check that the
// VPReductionIntrinsic subclass works as intended.
- Str << " %r0 = call <8 x i32> @llvm.vp.mul.v8i32(<8 x i32> %val, <8 x i32> "
+ Str << " %r0 = call <8 x i32> @llvm.vp.sdiv.v8i32(<8 x i32> %val, <8 x i32> "
"%val, <8 x i1> %m, i32 %vl)";
unsigned Idx = 1;
>From 5e74788bee074d15d231db78d738855fdb6dc0af Mon Sep 17 00:00:00 2001
From: Wenju He <wenju.he at intel.com>
Date: Fri, 28 Aug 2026 14:37:22 +0200
Subject: [PATCH 2/2] add clang-format off
---
llvm/unittests/IR/VPIntrinsicTest.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/llvm/unittests/IR/VPIntrinsicTest.cpp b/llvm/unittests/IR/VPIntrinsicTest.cpp
index 31ad4fe2ea466..5030f184adcc9 100644
--- a/llvm/unittests/IR/VPIntrinsicTest.cpp
+++ b/llvm/unittests/IR/VPIntrinsicTest.cpp
@@ -234,6 +234,7 @@ TEST_F(VPIntrinsicTest, CanIgnoreVectorLength) {
LLVMContext C;
SMDiagnostic Err;
+ // clang-format off
std::unique_ptr<Module> M =
parseAssemblyString(
"declare <256 x i64> @llvm.vp.sdiv.v256i64(<256 x i64>, <256 x i64>, <256 x i1>, i32)"
@@ -262,6 +263,7 @@ TEST_F(VPIntrinsicTest, CanIgnoreVectorLength) {
" ret void "
"}",
Err, C);
+ // clang-format on
auto *F = M->getFunction("test_static_vlen");
assert(F);
More information about the llvm-commits
mailing list