[llvm] 8db13de - [VPlan] Remove redundant x && (y && x) -> x && y combine (#213219)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 31 03:55:39 PDT 2026
Author: Luke Lau
Date: 2026-07-31T18:55:33+08:00
New Revision: 8db13de265a5f12d49147930da6d16a3ad7b40e3
URL: https://github.com/llvm/llvm-project/commit/8db13de265a5f12d49147930da6d16a3ad7b40e3
DIFF: https://github.com/llvm/llvm-project/commit/8db13de265a5f12d49147930da6d16a3ad7b40e3.diff
LOG: [VPlan] Remove redundant x && (y && x) -> x && y combine (#213219)
It can be subsumed by making the combine above commutative. In theory
this isn't NFC as it changes the order, in practice it doesn't make a
difference.
Added:
Modified:
llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h
llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h b/llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h
index cf6d5e1408fc6..d575d1f150e7a 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h
+++ b/llvm/lib/Transforms/Vectorize/VPlanPatternMatch.h
@@ -199,6 +199,11 @@ inline bind_const_int m_ConstantInt(uint64_t &C) { return C; }
/// Match a VPValue, capturing it if we match.
inline match_bind<VPValue> m_VPValue(VPValue *&V) { return V; }
+/// Match against the nested pattern, and capture the value if we match.
+template <typename Op_t> inline auto m_VPValue(VPValue *&V, const Op_t &Op) {
+ return m_CombineAnd(Op, m_VPValue(V));
+}
+
/// Match a VPIRValue.
inline match_bind<VPIRValue> m_VPIRValue(VPIRValue *&V) { return V; }
diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
index 348dbe514a56e..4d6f40ec32a62 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
@@ -1188,16 +1188,10 @@ static bool simplifyLogicalRecipe(VPSingleDefRecipe *Def, VPBuilder &Builder,
}
// x && (x && y) -> x && y
- if (match(Def, m_LogicalAnd(m_VPValue(X),
- m_LogicalAnd(m_Deferred(X), m_VPValue())))) {
- Def->replaceAllUsesWith(Def->getOperand(1));
- return true;
- }
-
- // x && (y && x) -> x && y
- if (match(Def, m_LogicalAnd(m_VPValue(X),
- m_LogicalAnd(m_VPValue(Y), m_Deferred(X))))) {
- Def->replaceAllUsesWith(Builder.createLogicalAnd(X, Y));
+ if (match(Def, m_c_LogicalAnd(m_VPValue(X),
+ m_VPValue(Z, m_c_LogicalAnd(m_Deferred(X),
+ m_VPValue()))))) {
+ Def->replaceAllUsesWith(Z);
return true;
}
More information about the llvm-commits
mailing list