[llvm] 8f36135 - [VPlan] Add m_Intrinsic matcher that takes a variable intrinsic ID (NFC)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 27 13:23:44 PST 2025
Author: Florian Hahn
Date: 2025-11-27T21:23:29Z
New Revision: 8f36135aea5dfbb5f090ca9ad055094c9913f735
URL: https://github.com/llvm/llvm-project/commit/8f36135aea5dfbb5f090ca9ad055094c9913f735
DIFF: https://github.com/llvm/llvm-project/commit/8f36135aea5dfbb5f090ca9ad055094c9913f735.diff
LOG: [VPlan] Add m_Intrinsic matcher that takes a variable intrinsic ID (NFC)
Add a variant of m_Intrinsic that matches a variable runtime ID.
Added:
Modified:
llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp
llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp b/llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp
index 5fbd61a929fe2..92969c8ed9ec0 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp
@@ -845,23 +845,13 @@ bool VPlanTransforms::handleMaxMinNumReductions(VPlan &Plan) {
if (!MinMaxR)
return nullptr;
- auto *RepR = dyn_cast<VPReplicateRecipe>(MinMaxR);
- if (!isa<VPWidenIntrinsicRecipe>(MinMaxR) &&
- !(RepR && isa<IntrinsicInst>(RepR->getUnderlyingInstr())))
+ // Check that MinMaxR is a VPWidenIntrinsicRecipe or VPReplicateRecipe
+ // with an intrinsic that matches the reduction kind.
+ Intrinsic::ID ExpectedIntrinsicID =
+ getMinMaxReductionIntrinsicOp(RedPhiR->getRecurrenceKind());
+ if (!match(MinMaxR, m_Intrinsic(ExpectedIntrinsicID)))
return nullptr;
-#ifndef NDEBUG
- Intrinsic::ID RdxIntrinsicId =
- RedPhiR->getRecurrenceKind() == RecurKind::FMaxNum ? Intrinsic::maxnum
- : Intrinsic::minnum;
- assert(((isa<VPWidenIntrinsicRecipe>(MinMaxR) &&
- cast<VPWidenIntrinsicRecipe>(MinMaxR)->getVectorIntrinsicID() ==
- RdxIntrinsicId) ||
- (RepR && cast<IntrinsicInst>(RepR->getUnderlyingInstr())
- ->getIntrinsicID() == RdxIntrinsicId)) &&
- "Intrinsic did not match recurrence kind");
-#endif
-
if (MinMaxR->getOperand(0) == RedPhiR)
return MinMaxR->getOperand(1);
diff --git a/llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h b/llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h
index 79275e7bffdd0..07dfe31eea46d 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h
+++ b/llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h
@@ -856,6 +856,11 @@ template <Intrinsic::ID IntrID> inline IntrinsicID_match m_Intrinsic() {
return IntrinsicID_match(IntrID);
}
+/// Match intrinsic calls with a runtime intrinsic ID.
+inline IntrinsicID_match m_Intrinsic(Intrinsic::ID IntrID) {
+ return IntrinsicID_match(IntrID);
+}
+
template <Intrinsic::ID IntrID, typename T0>
inline typename m_Intrinsic_Ty<T0>::Ty m_Intrinsic(const T0 &Op0) {
return m_CombineAnd(m_Intrinsic<IntrID>(), m_Argument<0>(Op0));
More information about the llvm-commits
mailing list