Skip to content

Commit 2e50c6b

Browse files
committed
like
1 parent 1d4cbbb commit 2e50c6b

File tree

2 files changed

+32
-12
lines changed

2 files changed

+32
-12
lines changed

llvm/include/llvm/CodeGen/SDPatternMatch.h

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -683,25 +683,45 @@ inline BinaryOpc_match<LHS, RHS, true> m_Xor(const LHS &L, const RHS &R) {
683683
}
684684

685685
template <typename LHS, typename RHS>
686-
inline auto m_SMin(const LHS &L, const RHS &R) {
686+
inline BinaryOpc_match<LHS, RHS, true> m_SMin(const LHS &L, const RHS &R) {
687+
return BinaryOpc_match<LHS, RHS, true>(ISD::SMIN, L, R);
688+
}
689+
690+
template <typename LHS, typename RHS>
691+
inline auto m_SMinLike(const LHS &L, const RHS &R) {
687692
return m_AnyOf(BinaryOpc_match<LHS, RHS, true>(ISD::SMIN, L, R),
688693
MaxMin_match<LHS, RHS, smin_pred_ty, true>(L, R));
689694
}
690695

691696
template <typename LHS, typename RHS>
692-
inline auto m_SMax(const LHS &L, const RHS &R) {
697+
inline BinaryOpc_match<LHS, RHS, true> m_SMax(const LHS &L, const RHS &R) {
698+
return BinaryOpc_match<LHS, RHS, true>(ISD::SMAX, L, R);
699+
}
700+
701+
template <typename LHS, typename RHS>
702+
inline auto m_SMaxLike(const LHS &L, const RHS &R) {
693703
return m_AnyOf(BinaryOpc_match<LHS, RHS, true>(ISD::SMAX, L, R),
694704
MaxMin_match<LHS, RHS, smax_pred_ty, true>(L, R));
695705
}
696706

697707
template <typename LHS, typename RHS>
698-
inline auto m_UMin(const LHS &L, const RHS &R) {
708+
inline BinaryOpc_match<LHS, RHS, true> m_UMin(const LHS &L, const RHS &R) {
709+
return BinaryOpc_match<LHS, RHS, true>(ISD::UMIN, L, R);
710+
}
711+
712+
template <typename LHS, typename RHS>
713+
inline auto m_UMinLike(const LHS &L, const RHS &R) {
699714
return m_AnyOf(BinaryOpc_match<LHS, RHS, true>(ISD::UMIN, L, R),
700715
MaxMin_match<LHS, RHS, umin_pred_ty, true>(L, R));
701716
}
702717

703718
template <typename LHS, typename RHS>
704-
inline auto m_UMax(const LHS &L, const RHS &R) {
719+
inline BinaryOpc_match<LHS, RHS, true> m_UMax(const LHS &L, const RHS &R) {
720+
return BinaryOpc_match<LHS, RHS, true>(ISD::UMAX, L, R);
721+
}
722+
723+
template <typename LHS, typename RHS>
724+
inline auto m_UMaxLike(const LHS &L, const RHS &R) {
705725
return m_AnyOf(BinaryOpc_match<LHS, RHS, true>(ISD::UMAX, L, R),
706726
MaxMin_match<LHS, RHS, umax_pred_ty, true>(L, R));
707727
}

llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4190,26 +4190,26 @@ SDValue DAGCombiner::visitSUB(SDNode *N) {
41904190

41914191
// smax(a,b) - smin(a,b) --> abds(a,b)
41924192
if ((!LegalOperations || hasOperation(ISD::ABDS, VT)) &&
4193-
sd_match(N0, m_SMax(m_Value(A), m_Value(B))) &&
4194-
sd_match(N1, m_SMin(m_Specific(A), m_Specific(B))))
4193+
sd_match(N0, m_SMaxLike(m_Value(A), m_Value(B))) &&
4194+
sd_match(N1, m_SMinLike(m_Specific(A), m_Specific(B))))
41954195
return DAG.getNode(ISD::ABDS, DL, VT, A, B);
41964196

41974197
// smin(a,b) - smax(a,b) --> neg(abds(a,b))
41984198
if (hasOperation(ISD::ABDS, VT) &&
4199-
sd_match(N0, m_SMin(m_Value(A), m_Value(B))) &&
4200-
sd_match(N1, m_SMax(m_Specific(A), m_Specific(B))))
4199+
sd_match(N0, m_SMinLike(m_Value(A), m_Value(B))) &&
4200+
sd_match(N1, m_SMaxLike(m_Specific(A), m_Specific(B))))
42014201
return DAG.getNegative(DAG.getNode(ISD::ABDS, DL, VT, A, B), DL, VT);
42024202

42034203
// umax(a,b) - umin(a,b) --> abdu(a,b)
42044204
if ((!LegalOperations || hasOperation(ISD::ABDU, VT)) &&
4205-
sd_match(N0, m_UMax(m_Value(A), m_Value(B))) &&
4206-
sd_match(N1, m_UMin(m_Specific(A), m_Specific(B))))
4205+
sd_match(N0, m_UMaxLike(m_Value(A), m_Value(B))) &&
4206+
sd_match(N1, m_UMinLike(m_Specific(A), m_Specific(B))))
42074207
return DAG.getNode(ISD::ABDU, DL, VT, A, B);
42084208

42094209
// umin(a,b) - umax(a,b) --> neg(abdu(a,b))
42104210
if (hasOperation(ISD::ABDU, VT) &&
4211-
sd_match(N0, m_UMin(m_Value(A), m_Value(B))) &&
4212-
sd_match(N1, m_UMax(m_Specific(A), m_Specific(B))))
4211+
sd_match(N0, m_UMinLike(m_Value(A), m_Value(B))) &&
4212+
sd_match(N1, m_UMaxLike(m_Specific(A), m_Specific(B))))
42134213
return DAG.getNegative(DAG.getNode(ISD::ABDU, DL, VT, A, B), DL, VT);
42144214

42154215
return SDValue();

0 commit comments

Comments
 (0)