[llvm] [AArch64][SVE] Fold nested boolean UMIN trees (PR #209234)
Paul Walker via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 31 06:47:53 PDT 2026
================
@@ -3366,6 +3366,34 @@ instCombineInStreamingMode(InstCombiner &IC, IntrinsicInst &II) {
return std::nullopt;
}
+static std::optional<Instruction *> instCombineSVEUMin(InstCombiner &IC,
+ IntrinsicInst &II) {
+ // umin(umin(A, 1), umin(B, 1)) -> umin(umin(A,B), 1)
+ constexpr Intrinsic::ID UMinID = Intrinsic::aarch64_sve_umin_u;
+ Value *A, *B;
+ Value *Pg = II.getOperand(0);
+ if (match(II.getOperand(1), m_OneUse(m_Intrinsic<UMinID>(
+ m_Specific(Pg), m_Value(A), m_One()))) &&
+ match(II.getOperand(2), m_OneUse(m_Intrinsic<UMinID>(
+ m_Specific(Pg), m_Value(B), m_One())))) {
+ Value *NewUMin =
+ IC.Builder.CreateIntrinsic(UMinID, II.getType(), {Pg, A, B});
+ Value *NewLogicalUMin = IC.Builder.CreateIntrinsic(
+ UMinID, II.getType(), {Pg, NewUMin, ConstantInt::get(II.getType(), 1)});
+ return IC.replaceInstUsesWith(II, NewLogicalUMin);
+ }
+
+ // umin(umin(A, 1), 1) -> umin(A, 1)
+ Value *InnerUMin;
+ if (match(&II,
+ m_Intrinsic<UMinID>(m_Specific(Pg), m_Value(InnerUMin), m_One())) &&
+ match(InnerUMin,
+ m_Intrinsic<UMinID>(m_Specific(Pg), m_Value(A), m_One())))
----------------
paulwalker-arm wrote:
```suggestion
match(InnerUMin,
m_Intrinsic<UMinID>(m_Specific(Pg), m_Value(), m_One())))
```
https://github.com/llvm/llvm-project/pull/209234
More information about the llvm-commits
mailing list