[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:49:37 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