Skip to content

Commit 49fa91e

Browse files
committed
[DAG] SDPatternMatch - add missing ROTL/ROTR matchers
1 parent d3d2d72 commit 49fa91e

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

llvm/include/llvm/CodeGen/SDPatternMatch.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -759,6 +759,16 @@ inline BinaryOpc_match<LHS, RHS> m_Srl(const LHS &L, const RHS &R) {
759759
return BinaryOpc_match<LHS, RHS>(ISD::SRL, L, R);
760760
}
761761

762+
template <typename LHS, typename RHS>
763+
inline BinaryOpc_match<LHS, RHS> m_Rotl(const LHS &L, const RHS &R) {
764+
return BinaryOpc_match<LHS, RHS>(ISD::ROTL, L, R);
765+
}
766+
767+
template <typename LHS, typename RHS>
768+
inline BinaryOpc_match<LHS, RHS> m_Rotr(const LHS &L, const RHS &R) {
769+
return BinaryOpc_match<LHS, RHS>(ISD::ROTR, L, R);
770+
}
771+
762772
template <typename LHS, typename RHS>
763773
inline BinaryOpc_match<LHS, RHS, true> m_FAdd(const LHS &L, const RHS &R) {
764774
return BinaryOpc_match<LHS, RHS, true>(ISD::FADD, L, R);

llvm/unittests/CodeGen/SelectionDAGPatternMatchTest.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,8 @@ TEST_F(SelectionDAGPatternMatchTest, matchBinaryOp) {
200200
SDValue SMin = DAG->getNode(ISD::SMIN, DL, Int32VT, Op1, Op0);
201201
SDValue UMax = DAG->getNode(ISD::UMAX, DL, Int32VT, Op0, Op1);
202202
SDValue UMin = DAG->getNode(ISD::UMIN, DL, Int32VT, Op1, Op0);
203+
SDValue Rotl = DAG->getNode(ISD::ROTL, DL, Int32VT, Op0, Op1);
204+
SDValue Rotr = DAG->getNode(ISD::ROTR, DL, Int32VT, Op1, Op0);
203205

204206
SDValue ICMP_GT = DAG->getSetCC(DL, MVT::i1, Op0, Op1, ISD::SETGT);
205207
SDValue ICMP_GE = DAG->getSetCC(DL, MVT::i1, Op0, Op1, ISD::SETGE);
@@ -246,6 +248,11 @@ TEST_F(SelectionDAGPatternMatchTest, matchBinaryOp) {
246248
EXPECT_FALSE(sd_match(DisOr, m_Add(m_Value(), m_Value())));
247249
EXPECT_TRUE(sd_match(DisOr, m_AddLike(m_Value(), m_Value())));
248250

251+
EXPECT_TRUE(sd_match(Rotl, m_Rotl(m_Value(), m_Value())));
252+
EXPECT_TRUE(sd_match(Rotr, m_Rotr(m_Value(), m_Value())));
253+
EXPECT_FALSE(sd_match(Rotl, m_Rotr(m_Value(), m_Value())));
254+
EXPECT_FALSE(sd_match(Rotr, m_Rotl(m_Value(), m_Value())));
255+
249256
EXPECT_TRUE(sd_match(SMax, m_c_BinOp(ISD::SMAX, m_Value(), m_Value())));
250257
EXPECT_TRUE(sd_match(SMax, m_SMax(m_Value(), m_Value())));
251258
EXPECT_TRUE(sd_match(SMax, m_SMaxLike(m_Value(), m_Value())));

0 commit comments

Comments
 (0)