Skip to content

Commit c9c2326

Browse files
committed
[DAG] Add SDPatternMatch m_SMin/m_SMax/m_UMin/m_UMax matchers
1 parent ef8062e commit c9c2326

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

llvm/include/llvm/CodeGen/SDPatternMatch.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,26 @@ inline BinaryOpc_match<LHS, RHS, true> m_Xor(const LHS &L, const RHS &R) {
510510
return BinaryOpc_match<LHS, RHS, true>(ISD::XOR, L, R);
511511
}
512512

513+
template <typename LHS, typename RHS>
514+
inline BinaryOpc_match<LHS, RHS, true> m_SMin(const LHS &L, const RHS &R) {
515+
return BinaryOpc_match<LHS, RHS, true>(ISD::SMIN, L, R);
516+
}
517+
518+
template <typename LHS, typename RHS>
519+
inline BinaryOpc_match<LHS, RHS, true> m_SMax(const LHS &L, const RHS &R) {
520+
return BinaryOpc_match<LHS, RHS, true>(ISD::SMAX, L, R);
521+
}
522+
523+
template <typename LHS, typename RHS>
524+
inline BinaryOpc_match<LHS, RHS, true> m_UMin(const LHS &L, const RHS &R) {
525+
return BinaryOpc_match<LHS, RHS, true>(ISD::UMIN, L, R);
526+
}
527+
528+
template <typename LHS, typename RHS>
529+
inline BinaryOpc_match<LHS, RHS, true> m_UMax(const LHS &L, const RHS &R) {
530+
return BinaryOpc_match<LHS, RHS, true>(ISD::UMAX, L, R);
531+
}
532+
513533
template <typename LHS, typename RHS>
514534
inline BinaryOpc_match<LHS, RHS, false> m_UDiv(const LHS &L, const RHS &R) {
515535
return BinaryOpc_match<LHS, RHS, false>(ISD::UDIV, L, R);

llvm/unittests/CodeGen/SelectionDAGPatternMatchTest.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,10 @@ TEST_F(SelectionDAGPatternMatchTest, matchBinaryOp) {
133133
SDValue And = DAG->getNode(ISD::AND, DL, Int32VT, Op0, Op1);
134134
SDValue Xor = DAG->getNode(ISD::XOR, DL, Int32VT, Op1, Op0);
135135
SDValue Or = DAG->getNode(ISD::OR, DL, Int32VT, Op0, Op1);
136+
SDValue SMax = DAG->getNode(ISD::SMAX, DL, Int32VT, Op0, Op1);
137+
SDValue SMin = DAG->getNode(ISD::SMIN, DL, Int32VT, Op1, Op0);
138+
SDValue UMax = DAG->getNode(ISD::UMAX, DL, Int32VT, Op0, Op1);
139+
SDValue UMin = DAG->getNode(ISD::UMIN, DL, Int32VT, Op1, Op0);
136140

137141
SDValue SFAdd = DAG->getNode(ISD::STRICT_FADD, DL, {Float32VT, MVT::Other},
138142
{DAG->getEntryNode(), Op2, Op2});
@@ -155,6 +159,15 @@ TEST_F(SelectionDAGPatternMatchTest, matchBinaryOp) {
155159
EXPECT_TRUE(sd_match(Or, m_c_BinOp(ISD::OR, m_Value(), m_Value())));
156160
EXPECT_TRUE(sd_match(Or, m_Or(m_Value(), m_Value())));
157161

162+
EXPECT_TRUE(sd_match(SMax, m_c_BinOp(ISD::SMAX, m_Value(), m_Value())));
163+
EXPECT_TRUE(sd_match(SMax, m_SMax(m_Value(), m_Value())));
164+
EXPECT_TRUE(sd_match(SMin, m_c_BinOp(ISD::SMIN, m_Value(), m_Value())));
165+
EXPECT_TRUE(sd_match(SMin, m_SMin(m_Value(), m_Value())));
166+
EXPECT_TRUE(sd_match(UMax, m_c_BinOp(ISD::UMAX, m_Value(), m_Value())));
167+
EXPECT_TRUE(sd_match(UMax, m_UMax(m_Value(), m_Value())));
168+
EXPECT_TRUE(sd_match(UMin, m_c_BinOp(ISD::UMIN, m_Value(), m_Value())));
169+
EXPECT_TRUE(sd_match(UMin, m_UMin(m_Value(), m_Value())));
170+
158171
SDValue BindVal;
159172
EXPECT_TRUE(sd_match(SFAdd, m_ChainedBinOp(ISD::STRICT_FADD, m_Value(BindVal),
160173
m_Deferred(BindVal))));

0 commit comments

Comments
 (0)