From 2b334cec867f080c9468ea01b1b3df98176bb32d Mon Sep 17 00:00:00 2001 From: Luke Lau Date: Fri, 5 Sep 2025 18:26:17 +0800 Subject: [PATCH] [RISCV][LoopIdiomVectorize] Replace vp.icmp -> regular icmp To match the general direction of the loop vectorizer and reduce our dependency on trivial VP intrinsics[1], replace the use of vp.icmp with a regular icmp. RISCVVLOptimizer can take care of propagating VL. [1]: https://discourse.llvm.org/t/rfc-remove-codegen-support-for-trivial-vp-intrinsics-in-the-risc-v-backend/87999 --- .../Vectorize/LoopIdiomVectorize.cpp | 9 ++---- .../RISCV/rvv/vfirst-byte-compare-index.ll | 2 +- .../LoopIdiom/RISCV/byte-compare-index.ll | 28 +++++++++---------- 3 files changed, 17 insertions(+), 22 deletions(-) diff --git a/llvm/lib/Transforms/Vectorize/LoopIdiomVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopIdiomVectorize.cpp index 491f0b76f4ae0..8d1915a6a5ed4 100644 --- a/llvm/lib/Transforms/Vectorize/LoopIdiomVectorize.cpp +++ b/llvm/lib/Transforms/Vectorize/LoopIdiomVectorize.cpp @@ -574,13 +574,8 @@ Value *LoopIdiomVectorize::createPredicatedFindMismatch( Intrinsic::vp_load, {VectorLoadType, VectorLhsGep->getType()}, {VectorRhsGep, AllTrueMask, VL}, nullptr, "rhs.load"); - StringRef PredicateStr = CmpInst::getPredicateName(CmpInst::ICMP_NE); - auto *PredicateMDS = MDString::get(VectorLhsLoad->getContext(), PredicateStr); - Value *Pred = MetadataAsValue::get(VectorLhsLoad->getContext(), PredicateMDS); - Value *VectorMatchCmp = Builder.CreateIntrinsic( - Intrinsic::vp_icmp, {VectorLhsLoad->getType()}, - {VectorLhsLoad, VectorRhsLoad, Pred, AllTrueMask, VL}, nullptr, - "mismatch.cmp"); + Value *VectorMatchCmp = + Builder.CreateICmpNE(VectorLhsLoad, VectorRhsLoad, "mismatch.cmp"); Value *CTZ = Builder.CreateIntrinsic( Intrinsic::vp_cttz_elts, {ResType, VectorMatchCmp->getType()}, {VectorMatchCmp, /*ZeroIsPoison=*/Builder.getInt1(false), AllTrueMask, diff --git a/llvm/test/CodeGen/RISCV/rvv/vfirst-byte-compare-index.ll b/llvm/test/CodeGen/RISCV/rvv/vfirst-byte-compare-index.ll index abfb652f2206e..7c34475a11d04 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vfirst-byte-compare-index.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfirst-byte-compare-index.ll @@ -111,7 +111,7 @@ mismatch_vec_loop: ; preds = %mismatch_vec_loop_i %lhs.load = call @llvm.vp.load.nxv16i8.p0(ptr %20, shufflevector ( insertelement ( poison, i1 true, i64 0), poison, zeroinitializer), i32 %19) %21 = getelementptr inbounds i8, ptr %b, i64 %mismatch_vector_index %rhs.load = call @llvm.vp.load.nxv16i8.p0(ptr %21, shufflevector ( insertelement ( poison, i1 true, i64 0), poison, zeroinitializer), i32 %19) - %mismatch.cmp = call @llvm.vp.icmp.nxv16i8( %lhs.load, %rhs.load, metadata !"ne", shufflevector ( insertelement ( poison, i1 true, i64 0), poison, zeroinitializer), i32 %19) + %mismatch.cmp = icmp ne %lhs.load, %rhs.load %22 = call i32 @llvm.vp.cttz.elts.i32.nxv16i1( %mismatch.cmp, i1 false, shufflevector ( insertelement ( poison, i1 true, i64 0), poison, zeroinitializer), i32 %19) %23 = icmp ne i32 %22, %19 br i1 %23, label %mismatch_vec_loop_found, label %mismatch_vec_loop_inc diff --git a/llvm/test/Transforms/LoopIdiom/RISCV/byte-compare-index.ll b/llvm/test/Transforms/LoopIdiom/RISCV/byte-compare-index.ll index afc28cfda45aa..110b4a8b2e902 100644 --- a/llvm/test/Transforms/LoopIdiom/RISCV/byte-compare-index.ll +++ b/llvm/test/Transforms/LoopIdiom/RISCV/byte-compare-index.ll @@ -42,7 +42,7 @@ define i32 @compare_bytes_simple(ptr %a, ptr %b, i32 %len, i32 %n) { ; CHECK-NEXT: [[LHS_LOAD:%.*]] = call @llvm.vp.load.nxv16i8.p0(ptr [[TMP20]], splat (i1 true), i32 [[TMP19]]) ; CHECK-NEXT: [[TMP21:%.*]] = getelementptr inbounds i8, ptr [[B]], i64 [[MISMATCH_VECTOR_INDEX]] ; CHECK-NEXT: [[RHS_LOAD:%.*]] = call @llvm.vp.load.nxv16i8.p0(ptr [[TMP21]], splat (i1 true), i32 [[TMP19]]) -; CHECK-NEXT: [[MISMATCH_CMP:%.*]] = call @llvm.vp.icmp.nxv16i8( [[LHS_LOAD]], [[RHS_LOAD]], metadata !"ne", splat (i1 true), i32 [[TMP19]]) +; CHECK-NEXT: [[MISMATCH_CMP:%.*]] = icmp ne [[LHS_LOAD]], [[RHS_LOAD]] ; CHECK-NEXT: [[FIRST:%.*]] = call i32 @llvm.vp.cttz.elts.i32.nxv16i1( [[MISMATCH_CMP]], i1 false, splat (i1 true), i32 [[TMP19]]) ; CHECK-NEXT: [[TMP22:%.*]] = icmp ne i32 [[FIRST]], [[TMP19]] ; CHECK-NEXT: br i1 [[TMP22]], label [[MISMATCH_VECTOR_LOOP_FOUND:%.*]], label [[MISMATCH_VECTOR_LOOP_INC]] @@ -132,7 +132,7 @@ define i32 @compare_bytes_simple(ptr %a, ptr %b, i32 %len, i32 %n) { ; LMUL8-NEXT: [[LHS_LOAD:%.*]] = call @llvm.vp.load.nxv64i8.p0(ptr [[TMP20]], splat (i1 true), i32 [[TMP19]]) ; LMUL8-NEXT: [[TMP21:%.*]] = getelementptr inbounds i8, ptr [[B]], i64 [[MISMATCH_VECTOR_INDEX]] ; LMUL8-NEXT: [[RHS_LOAD:%.*]] = call @llvm.vp.load.nxv64i8.p0(ptr [[TMP21]], splat (i1 true), i32 [[TMP19]]) -; LMUL8-NEXT: [[MISMATCH_CMP:%.*]] = call @llvm.vp.icmp.nxv64i8( [[LHS_LOAD]], [[RHS_LOAD]], metadata !"ne", splat (i1 true), i32 [[TMP19]]) +; LMUL8-NEXT: [[MISMATCH_CMP:%.*]] = icmp ne [[LHS_LOAD]], [[RHS_LOAD]] ; LMUL8-NEXT: [[FIRST:%.*]] = call i32 @llvm.vp.cttz.elts.i32.nxv64i1( [[MISMATCH_CMP]], i1 false, splat (i1 true), i32 [[TMP19]]) ; LMUL8-NEXT: [[TMP22:%.*]] = icmp ne i32 [[FIRST]], [[TMP19]] ; LMUL8-NEXT: br i1 [[TMP22]], label [[MISMATCH_VECTOR_LOOP_FOUND:%.*]], label [[MISMATCH_VECTOR_LOOP_INC]] @@ -218,7 +218,7 @@ define i32 @compare_bytes_simple(ptr %a, ptr %b, i32 %len, i32 %n) { ; LOOP-DEL-NEXT: [[LHS_LOAD:%.*]] = call @llvm.vp.load.nxv16i8.p0(ptr [[TMP20]], splat (i1 true), i32 [[TMP19]]) ; LOOP-DEL-NEXT: [[TMP21:%.*]] = getelementptr inbounds i8, ptr [[B]], i64 [[MISMATCH_VECTOR_INDEX]] ; LOOP-DEL-NEXT: [[RHS_LOAD:%.*]] = call @llvm.vp.load.nxv16i8.p0(ptr [[TMP21]], splat (i1 true), i32 [[TMP19]]) -; LOOP-DEL-NEXT: [[MISMATCH_CMP:%.*]] = call @llvm.vp.icmp.nxv16i8( [[LHS_LOAD]], [[RHS_LOAD]], metadata !"ne", splat (i1 true), i32 [[TMP19]]) +; LOOP-DEL-NEXT: [[MISMATCH_CMP:%.*]] = icmp ne [[LHS_LOAD]], [[RHS_LOAD]] ; LOOP-DEL-NEXT: [[FIRST:%.*]] = call i32 @llvm.vp.cttz.elts.i32.nxv16i1( [[MISMATCH_CMP]], i1 false, splat (i1 true), i32 [[TMP19]]) ; LOOP-DEL-NEXT: [[TMP22:%.*]] = icmp ne i32 [[FIRST]], [[TMP19]] ; LOOP-DEL-NEXT: br i1 [[TMP22]], label [[MISMATCH_VECTOR_LOOP_FOUND:%.*]], label [[MISMATCH_VECTOR_LOOP_INC]] @@ -409,7 +409,7 @@ define i32 @compare_bytes_signed_wrap(ptr %a, ptr %b, i32 %len, i32 %n) { ; CHECK-NEXT: [[LHS_LOAD:%.*]] = call @llvm.vp.load.nxv16i8.p0(ptr [[TMP20]], splat (i1 true), i32 [[TMP19]]) ; CHECK-NEXT: [[TMP21:%.*]] = getelementptr inbounds i8, ptr [[B]], i64 [[MISMATCH_VECTOR_INDEX]] ; CHECK-NEXT: [[RHS_LOAD:%.*]] = call @llvm.vp.load.nxv16i8.p0(ptr [[TMP21]], splat (i1 true), i32 [[TMP19]]) -; CHECK-NEXT: [[MISMATCH_CMP:%.*]] = call @llvm.vp.icmp.nxv16i8( [[LHS_LOAD]], [[RHS_LOAD]], metadata !"ne", splat (i1 true), i32 [[TMP19]]) +; CHECK-NEXT: [[MISMATCH_CMP:%.*]] = icmp ne [[LHS_LOAD]], [[RHS_LOAD]] ; CHECK-NEXT: [[FIRST:%.*]] = call i32 @llvm.vp.cttz.elts.i32.nxv16i1( [[MISMATCH_CMP]], i1 false, splat (i1 true), i32 [[TMP19]]) ; CHECK-NEXT: [[TMP22:%.*]] = icmp ne i32 [[FIRST]], [[TMP19]] ; CHECK-NEXT: br i1 [[TMP22]], label [[MISMATCH_VECTOR_LOOP_FOUND:%.*]], label [[MISMATCH_VECTOR_LOOP_INC]] @@ -499,7 +499,7 @@ define i32 @compare_bytes_signed_wrap(ptr %a, ptr %b, i32 %len, i32 %n) { ; LMUL8-NEXT: [[LHS_LOAD:%.*]] = call @llvm.vp.load.nxv64i8.p0(ptr [[TMP20]], splat (i1 true), i32 [[TMP19]]) ; LMUL8-NEXT: [[TMP21:%.*]] = getelementptr inbounds i8, ptr [[B]], i64 [[MISMATCH_VECTOR_INDEX]] ; LMUL8-NEXT: [[RHS_LOAD:%.*]] = call @llvm.vp.load.nxv64i8.p0(ptr [[TMP21]], splat (i1 true), i32 [[TMP19]]) -; LMUL8-NEXT: [[MISMATCH_CMP:%.*]] = call @llvm.vp.icmp.nxv64i8( [[LHS_LOAD]], [[RHS_LOAD]], metadata !"ne", splat (i1 true), i32 [[TMP19]]) +; LMUL8-NEXT: [[MISMATCH_CMP:%.*]] = icmp ne [[LHS_LOAD]], [[RHS_LOAD]] ; LMUL8-NEXT: [[FIRST:%.*]] = call i32 @llvm.vp.cttz.elts.i32.nxv64i1( [[MISMATCH_CMP]], i1 false, splat (i1 true), i32 [[TMP19]]) ; LMUL8-NEXT: [[TMP22:%.*]] = icmp ne i32 [[FIRST]], [[TMP19]] ; LMUL8-NEXT: br i1 [[TMP22]], label [[MISMATCH_VECTOR_LOOP_FOUND:%.*]], label [[MISMATCH_VECTOR_LOOP_INC]] @@ -585,7 +585,7 @@ define i32 @compare_bytes_signed_wrap(ptr %a, ptr %b, i32 %len, i32 %n) { ; LOOP-DEL-NEXT: [[LHS_LOAD:%.*]] = call @llvm.vp.load.nxv16i8.p0(ptr [[TMP20]], splat (i1 true), i32 [[TMP19]]) ; LOOP-DEL-NEXT: [[TMP21:%.*]] = getelementptr inbounds i8, ptr [[B]], i64 [[MISMATCH_VECTOR_INDEX]] ; LOOP-DEL-NEXT: [[RHS_LOAD:%.*]] = call @llvm.vp.load.nxv16i8.p0(ptr [[TMP21]], splat (i1 true), i32 [[TMP19]]) -; LOOP-DEL-NEXT: [[MISMATCH_CMP:%.*]] = call @llvm.vp.icmp.nxv16i8( [[LHS_LOAD]], [[RHS_LOAD]], metadata !"ne", splat (i1 true), i32 [[TMP19]]) +; LOOP-DEL-NEXT: [[MISMATCH_CMP:%.*]] = icmp ne [[LHS_LOAD]], [[RHS_LOAD]] ; LOOP-DEL-NEXT: [[FIRST:%.*]] = call i32 @llvm.vp.cttz.elts.i32.nxv16i1( [[MISMATCH_CMP]], i1 false, splat (i1 true), i32 [[TMP19]]) ; LOOP-DEL-NEXT: [[TMP22:%.*]] = icmp ne i32 [[FIRST]], [[TMP19]] ; LOOP-DEL-NEXT: br i1 [[TMP22]], label [[MISMATCH_VECTOR_LOOP_FOUND:%.*]], label [[MISMATCH_VECTOR_LOOP_INC]] @@ -797,7 +797,7 @@ define i32 @compare_bytes_simple_end_ne_found(ptr %a, ptr %b, ptr %c, ptr %d, i3 ; CHECK-NEXT: [[LHS_LOAD:%.*]] = call @llvm.vp.load.nxv16i8.p0(ptr [[TMP20]], splat (i1 true), i32 [[TMP19]]) ; CHECK-NEXT: [[TMP21:%.*]] = getelementptr inbounds i8, ptr [[B]], i64 [[MISMATCH_VECTOR_INDEX]] ; CHECK-NEXT: [[RHS_LOAD:%.*]] = call @llvm.vp.load.nxv16i8.p0(ptr [[TMP21]], splat (i1 true), i32 [[TMP19]]) -; CHECK-NEXT: [[MISMATCH_CMP:%.*]] = call @llvm.vp.icmp.nxv16i8( [[LHS_LOAD]], [[RHS_LOAD]], metadata !"ne", splat (i1 true), i32 [[TMP19]]) +; CHECK-NEXT: [[MISMATCH_CMP:%.*]] = icmp ne [[LHS_LOAD]], [[RHS_LOAD]] ; CHECK-NEXT: [[FIRST:%.*]] = call i32 @llvm.vp.cttz.elts.i32.nxv16i1( [[MISMATCH_CMP]], i1 false, splat (i1 true), i32 [[TMP19]]) ; CHECK-NEXT: [[TMP22:%.*]] = icmp ne i32 [[FIRST]], [[TMP19]] ; CHECK-NEXT: br i1 [[TMP22]], label [[MISMATCH_VECTOR_LOOP_FOUND:%.*]], label [[MISMATCH_VECTOR_LOOP_INC]] @@ -898,7 +898,7 @@ define i32 @compare_bytes_simple_end_ne_found(ptr %a, ptr %b, ptr %c, ptr %d, i3 ; LMUL8-NEXT: [[LHS_LOAD:%.*]] = call @llvm.vp.load.nxv64i8.p0(ptr [[TMP20]], splat (i1 true), i32 [[TMP19]]) ; LMUL8-NEXT: [[TMP21:%.*]] = getelementptr inbounds i8, ptr [[B]], i64 [[MISMATCH_VECTOR_INDEX]] ; LMUL8-NEXT: [[RHS_LOAD:%.*]] = call @llvm.vp.load.nxv64i8.p0(ptr [[TMP21]], splat (i1 true), i32 [[TMP19]]) -; LMUL8-NEXT: [[MISMATCH_CMP:%.*]] = call @llvm.vp.icmp.nxv64i8( [[LHS_LOAD]], [[RHS_LOAD]], metadata !"ne", splat (i1 true), i32 [[TMP19]]) +; LMUL8-NEXT: [[MISMATCH_CMP:%.*]] = icmp ne [[LHS_LOAD]], [[RHS_LOAD]] ; LMUL8-NEXT: [[FIRST:%.*]] = call i32 @llvm.vp.cttz.elts.i32.nxv64i1( [[MISMATCH_CMP]], i1 false, splat (i1 true), i32 [[TMP19]]) ; LMUL8-NEXT: [[TMP22:%.*]] = icmp ne i32 [[FIRST]], [[TMP19]] ; LMUL8-NEXT: br i1 [[TMP22]], label [[MISMATCH_VECTOR_LOOP_FOUND:%.*]], label [[MISMATCH_VECTOR_LOOP_INC]] @@ -995,7 +995,7 @@ define i32 @compare_bytes_simple_end_ne_found(ptr %a, ptr %b, ptr %c, ptr %d, i3 ; LOOP-DEL-NEXT: [[LHS_LOAD:%.*]] = call @llvm.vp.load.nxv16i8.p0(ptr [[TMP20]], splat (i1 true), i32 [[TMP19]]) ; LOOP-DEL-NEXT: [[TMP21:%.*]] = getelementptr inbounds i8, ptr [[B]], i64 [[MISMATCH_VECTOR_INDEX]] ; LOOP-DEL-NEXT: [[RHS_LOAD:%.*]] = call @llvm.vp.load.nxv16i8.p0(ptr [[TMP21]], splat (i1 true), i32 [[TMP19]]) -; LOOP-DEL-NEXT: [[MISMATCH_CMP:%.*]] = call @llvm.vp.icmp.nxv16i8( [[LHS_LOAD]], [[RHS_LOAD]], metadata !"ne", splat (i1 true), i32 [[TMP19]]) +; LOOP-DEL-NEXT: [[MISMATCH_CMP:%.*]] = icmp ne [[LHS_LOAD]], [[RHS_LOAD]] ; LOOP-DEL-NEXT: [[FIRST:%.*]] = call i32 @llvm.vp.cttz.elts.i32.nxv16i1( [[MISMATCH_CMP]], i1 false, splat (i1 true), i32 [[TMP19]]) ; LOOP-DEL-NEXT: [[TMP22:%.*]] = icmp ne i32 [[FIRST]], [[TMP19]] ; LOOP-DEL-NEXT: br i1 [[TMP22]], label [[MISMATCH_VECTOR_LOOP_FOUND:%.*]], label [[MISMATCH_VECTOR_LOOP_INC]] @@ -1248,7 +1248,7 @@ define i32 @compare_bytes_extra_cmp(ptr %a, ptr %b, i32 %len, i32 %n, i32 %x) { ; CHECK-NEXT: [[LHS_LOAD:%.*]] = call @llvm.vp.load.nxv16i8.p0(ptr [[TMP20]], splat (i1 true), i32 [[TMP19]]) ; CHECK-NEXT: [[TMP21:%.*]] = getelementptr inbounds i8, ptr [[B]], i64 [[MISMATCH_VECTOR_INDEX]] ; CHECK-NEXT: [[RHS_LOAD:%.*]] = call @llvm.vp.load.nxv16i8.p0(ptr [[TMP21]], splat (i1 true), i32 [[TMP19]]) -; CHECK-NEXT: [[MISMATCH_CMP:%.*]] = call @llvm.vp.icmp.nxv16i8( [[LHS_LOAD]], [[RHS_LOAD]], metadata !"ne", splat (i1 true), i32 [[TMP19]]) +; CHECK-NEXT: [[MISMATCH_CMP:%.*]] = icmp ne [[LHS_LOAD]], [[RHS_LOAD]] ; CHECK-NEXT: [[FIRST:%.*]] = call i32 @llvm.vp.cttz.elts.i32.nxv16i1( [[MISMATCH_CMP]], i1 false, splat (i1 true), i32 [[TMP19]]) ; CHECK-NEXT: [[TMP22:%.*]] = icmp ne i32 [[FIRST]], [[TMP19]] ; CHECK-NEXT: br i1 [[TMP22]], label [[MISMATCH_VECTOR_LOOP_FOUND:%.*]], label [[MISMATCH_VECTOR_LOOP_INC]] @@ -1344,7 +1344,7 @@ define i32 @compare_bytes_extra_cmp(ptr %a, ptr %b, i32 %len, i32 %n, i32 %x) { ; LMUL8-NEXT: [[LHS_LOAD:%.*]] = call @llvm.vp.load.nxv64i8.p0(ptr [[TMP20]], splat (i1 true), i32 [[TMP19]]) ; LMUL8-NEXT: [[TMP21:%.*]] = getelementptr inbounds i8, ptr [[B]], i64 [[MISMATCH_VECTOR_INDEX]] ; LMUL8-NEXT: [[RHS_LOAD:%.*]] = call @llvm.vp.load.nxv64i8.p0(ptr [[TMP21]], splat (i1 true), i32 [[TMP19]]) -; LMUL8-NEXT: [[MISMATCH_CMP:%.*]] = call @llvm.vp.icmp.nxv64i8( [[LHS_LOAD]], [[RHS_LOAD]], metadata !"ne", splat (i1 true), i32 [[TMP19]]) +; LMUL8-NEXT: [[MISMATCH_CMP:%.*]] = icmp ne [[LHS_LOAD]], [[RHS_LOAD]] ; LMUL8-NEXT: [[FIRST:%.*]] = call i32 @llvm.vp.cttz.elts.i32.nxv64i1( [[MISMATCH_CMP]], i1 false, splat (i1 true), i32 [[TMP19]]) ; LMUL8-NEXT: [[TMP22:%.*]] = icmp ne i32 [[FIRST]], [[TMP19]] ; LMUL8-NEXT: br i1 [[TMP22]], label [[MISMATCH_VECTOR_LOOP_FOUND:%.*]], label [[MISMATCH_VECTOR_LOOP_INC]] @@ -1436,7 +1436,7 @@ define i32 @compare_bytes_extra_cmp(ptr %a, ptr %b, i32 %len, i32 %n, i32 %x) { ; LOOP-DEL-NEXT: [[LHS_LOAD:%.*]] = call @llvm.vp.load.nxv16i8.p0(ptr [[TMP20]], splat (i1 true), i32 [[TMP19]]) ; LOOP-DEL-NEXT: [[TMP21:%.*]] = getelementptr inbounds i8, ptr [[B]], i64 [[MISMATCH_VECTOR_INDEX]] ; LOOP-DEL-NEXT: [[RHS_LOAD:%.*]] = call @llvm.vp.load.nxv16i8.p0(ptr [[TMP21]], splat (i1 true), i32 [[TMP19]]) -; LOOP-DEL-NEXT: [[MISMATCH_CMP:%.*]] = call @llvm.vp.icmp.nxv16i8( [[LHS_LOAD]], [[RHS_LOAD]], metadata !"ne", splat (i1 true), i32 [[TMP19]]) +; LOOP-DEL-NEXT: [[MISMATCH_CMP:%.*]] = icmp ne [[LHS_LOAD]], [[RHS_LOAD]] ; LOOP-DEL-NEXT: [[FIRST:%.*]] = call i32 @llvm.vp.cttz.elts.i32.nxv16i1( [[MISMATCH_CMP]], i1 false, splat (i1 true), i32 [[TMP19]]) ; LOOP-DEL-NEXT: [[TMP22:%.*]] = icmp ne i32 [[FIRST]], [[TMP19]] ; LOOP-DEL-NEXT: br i1 [[TMP22]], label [[MISMATCH_VECTOR_LOOP_FOUND:%.*]], label [[MISMATCH_VECTOR_LOOP_INC]] @@ -1656,7 +1656,7 @@ define void @compare_bytes_cleanup_block(ptr %src1, ptr %src2) { ; CHECK-NEXT: [[LHS_LOAD:%.*]] = call @llvm.vp.load.nxv16i8.p0(ptr [[TMP16]], splat (i1 true), i32 [[TMP15]]) ; CHECK-NEXT: [[TMP17:%.*]] = getelementptr i8, ptr [[SRC2]], i64 [[MISMATCH_VECTOR_INDEX]] ; CHECK-NEXT: [[RHS_LOAD:%.*]] = call @llvm.vp.load.nxv16i8.p0(ptr [[TMP17]], splat (i1 true), i32 [[TMP15]]) -; CHECK-NEXT: [[MISMATCH_CMP:%.*]] = call @llvm.vp.icmp.nxv16i8( [[LHS_LOAD]], [[RHS_LOAD]], metadata !"ne", splat (i1 true), i32 [[TMP15]]) +; CHECK-NEXT: [[MISMATCH_CMP:%.*]] = icmp ne [[LHS_LOAD]], [[RHS_LOAD]] ; CHECK-NEXT: [[FIRST:%.*]] = call i32 @llvm.vp.cttz.elts.i32.nxv16i1( [[MISMATCH_CMP]], i1 false, splat (i1 true), i32 [[TMP15]]) ; CHECK-NEXT: [[TMP18:%.*]] = icmp ne i32 [[FIRST]], [[TMP15]] ; CHECK-NEXT: br i1 [[TMP18]], label [[MISMATCH_VECTOR_LOOP_FOUND:%.*]], label [[MISMATCH_VECTOR_LOOP_INC]] @@ -1745,7 +1745,7 @@ define void @compare_bytes_cleanup_block(ptr %src1, ptr %src2) { ; LMUL8-NEXT: [[LHS_LOAD:%.*]] = call @llvm.vp.load.nxv64i8.p0(ptr [[TMP16]], splat (i1 true), i32 [[TMP15]]) ; LMUL8-NEXT: [[TMP17:%.*]] = getelementptr i8, ptr [[SRC2]], i64 [[MISMATCH_VECTOR_INDEX]] ; LMUL8-NEXT: [[RHS_LOAD:%.*]] = call @llvm.vp.load.nxv64i8.p0(ptr [[TMP17]], splat (i1 true), i32 [[TMP15]]) -; LMUL8-NEXT: [[MISMATCH_CMP:%.*]] = call @llvm.vp.icmp.nxv64i8( [[LHS_LOAD]], [[RHS_LOAD]], metadata !"ne", splat (i1 true), i32 [[TMP15]]) +; LMUL8-NEXT: [[MISMATCH_CMP:%.*]] = icmp ne [[LHS_LOAD]], [[RHS_LOAD]] ; LMUL8-NEXT: [[FIRST:%.*]] = call i32 @llvm.vp.cttz.elts.i32.nxv64i1( [[MISMATCH_CMP]], i1 false, splat (i1 true), i32 [[TMP15]]) ; LMUL8-NEXT: [[TMP18:%.*]] = icmp ne i32 [[FIRST]], [[TMP15]] ; LMUL8-NEXT: br i1 [[TMP18]], label [[MISMATCH_VECTOR_LOOP_FOUND:%.*]], label [[MISMATCH_VECTOR_LOOP_INC]]