[llvm] [SLP][NFC] Address follow-up cleanups in SLPUtils (PR #210016)
Madhur Amilkanthwar via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 16 02:40:49 PDT 2026
https://github.com/madhur13490 updated https://github.com/llvm/llvm-project/pull/210016
>From ed40c1cb8cc41c9ad0e54a05de36afe0bf31ae55 Mon Sep 17 00:00:00 2001
From: Madhur Amilkanthwar <madhura at nvidia.com>
Date: Wed, 15 Jul 2026 00:07:16 -0700
Subject: [PATCH 1/2] [SLP][NFC] Address follow-up cleanups in SLPUtils
Follow-up to #206881, addressing deferred review comments:
- Assert VL is non-empty in allSameType before consume_front.
- Use llvm::all_of instead of std::all_of in allSameOpcode.
- Rewrite isVectorLikeInstWithConstOps as a dyn_cast + opcode switch.
---
.../Vectorize/SLPVectorizer/SLPUtils.cpp | 22 +++++++++++--------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer/SLPUtils.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer/SLPUtils.cpp
index 3eef3c52c0b7d..7cc57c68e3594 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer/SLPUtils.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer/SLPUtils.cpp
@@ -33,20 +33,23 @@ bool isConstant(Value *V) {
}
bool isVectorLikeInstWithConstOps(Value *V) {
- if (!isa<InsertElementInst, InsertValueInst, ExtractElementInst>(V) &&
- !isa<ExtractValueInst, UndefValue>(V))
- return false;
auto *I = dyn_cast<Instruction>(V);
- if (!I || isa<ExtractValueInst>(I))
+ // Non-instructions are vector-like only if they are undef.
+ if (!I)
+ return isa<UndefValue>(V);
+ switch (I->getOpcode()) {
+ case Instruction::ExtractValue:
+ case Instruction::InsertValue:
return true;
- if (isa<ExtractElementInst>(I))
+ case Instruction::ExtractElement:
return isa<FixedVectorType>(I->getOperand(0)->getType()) &&
isConstant(I->getOperand(1));
- if (isa<InsertElementInst>(I))
+ case Instruction::InsertElement:
return isa<FixedVectorType>(I->getOperand(0)->getType()) &&
isConstant(I->getOperand(2));
- assert(isa<InsertValueInst>(I) && "Expected InsertValueInst");
- return true;
+ default:
+ return false;
+ }
}
unsigned getNumElements(Type *Ty) {
@@ -221,7 +224,7 @@ bool allSameOpcode(ArrayRef<Value *> VL) {
bool IsCmpOp = isa<CmpInst>(MainOp);
CmpInst::Predicate BasePred = IsCmpOp ? cast<CmpInst>(MainOp)->getPredicate()
: CmpInst::BAD_ICMP_PREDICATE;
- return std::all_of(It, VL.end(), [&](Value *V) {
+ return all_of(iterator_range(It, VL.end()), [&](Value *V) {
if (auto *CI = dyn_cast<CmpInst>(V))
return BasePred == CI->getPredicate();
if (auto *I = dyn_cast<Instruction>(V))
@@ -274,6 +277,7 @@ void reorderScalars(SmallVectorImpl<Value *> &Scalars, ArrayRef<int> Mask) {
}
bool allSameType(ArrayRef<Value *> VL) {
+ assert(!VL.empty() && "Expected non-empty list of values.");
Type *Ty = VL.consume_front()->getType();
return all_of(VL, [&](Value *V) { return V->getType() == Ty; });
}
>From 24995e40645a261d61cbf9fa5a395e5d99bd65ad Mon Sep 17 00:00:00 2001
From: Madhur Amilkanthwar <madhura at nvidia.com>
Date: Thu, 16 Jul 2026 15:10:39 +0530
Subject: [PATCH 2/2] Update
llvm/lib/Transforms/Vectorize/SLPVectorizer/SLPUtils.cpp
Co-authored-by: Antonio Frighetto <me at antoniofrighetto.com>
---
llvm/lib/Transforms/Vectorize/SLPVectorizer/SLPUtils.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer/SLPUtils.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer/SLPUtils.cpp
index 7cc57c68e3594..29ca7c330aa2e 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer/SLPUtils.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer/SLPUtils.cpp
@@ -224,7 +224,7 @@ bool allSameOpcode(ArrayRef<Value *> VL) {
bool IsCmpOp = isa<CmpInst>(MainOp);
CmpInst::Predicate BasePred = IsCmpOp ? cast<CmpInst>(MainOp)->getPredicate()
: CmpInst::BAD_ICMP_PREDICATE;
- return all_of(iterator_range(It, VL.end()), [&](Value *V) {
+ return all_of(make_range(It, VL.end()), [&](Value *V) {
if (auto *CI = dyn_cast<CmpInst>(V))
return BasePred == CI->getPredicate();
if (auto *I = dyn_cast<Instruction>(V))
More information about the llvm-commits
mailing list