Skip to content

Commit 560d7c5

Browse files
committed
[DAG] Add SDPatternMatch m_And/m_Or/m_Xor matchers for logic ops
1 parent 5a74477 commit 560d7c5

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

llvm/include/llvm/CodeGen/SDPatternMatch.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,21 @@ inline BinaryOpc_match<LHS, RHS, true> m_Mul(const LHS &L, const RHS &R) {
495495
return BinaryOpc_match<LHS, RHS, true>(ISD::MUL, L, R);
496496
}
497497

498+
template <typename LHS, typename RHS>
499+
inline BinaryOpc_match<LHS, RHS, true> m_And(const LHS &L, const RHS &R) {
500+
return BinaryOpc_match<LHS, RHS, true>(ISD::AND, L, R);
501+
}
502+
503+
template <typename LHS, typename RHS>
504+
inline BinaryOpc_match<LHS, RHS, true> m_Or(const LHS &L, const RHS &R) {
505+
return BinaryOpc_match<LHS, RHS, true>(ISD::OR, L, R);
506+
}
507+
508+
template <typename LHS, typename RHS>
509+
inline BinaryOpc_match<LHS, RHS, true> m_Xor(const LHS &L, const RHS &R) {
510+
return BinaryOpc_match<LHS, RHS, true>(ISD::XOR, L, R);
511+
}
512+
498513
template <typename LHS, typename RHS>
499514
inline BinaryOpc_match<LHS, RHS, false> m_UDiv(const LHS &L, const RHS &R) {
500515
return BinaryOpc_match<LHS, RHS, false>(ISD::UDIV, L, R);

llvm/unittests/CodeGen/SelectionDAGPatternMatchTest.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,9 @@ TEST_F(SelectionDAGPatternMatchTest, matchBinaryOp) {
130130
SDValue Add = DAG->getNode(ISD::ADD, DL, Int32VT, Op0, Op1);
131131
SDValue Sub = DAG->getNode(ISD::SUB, DL, Int32VT, Add, Op0);
132132
SDValue Mul = DAG->getNode(ISD::MUL, DL, Int32VT, Add, Sub);
133+
SDValue And = DAG->getNode(ISD::AND, DL, Int32VT, Op0, Op1);
134+
SDValue Xor = DAG->getNode(ISD::XOR, DL, Int32VT, Op1, Op0);
135+
SDValue Or = DAG->getNode(ISD::OR, DL, Int32VT, Op0, Op1);
133136

134137
SDValue SFAdd = DAG->getNode(ISD::STRICT_FADD, DL, {Float32VT, MVT::Other},
135138
{DAG->getEntryNode(), Op2, Op2});
@@ -144,6 +147,14 @@ TEST_F(SelectionDAGPatternMatchTest, matchBinaryOp) {
144147
EXPECT_TRUE(
145148
sd_match(SFAdd, m_ChainedBinOp(ISD::STRICT_FADD, m_SpecificVT(Float32VT),
146149
m_SpecificVT(Float32VT))));
150+
151+
EXPECT_TRUE(sd_match(And, m_c_BinOp(ISD::AND, m_Value(), m_Value())));
152+
EXPECT_TRUE(sd_match(And, m_And(m_Value(), m_Value())));
153+
EXPECT_TRUE(sd_match(Xor, m_c_BinOp(ISD::XOR, m_Value(), m_Value())));
154+
EXPECT_TRUE(sd_match(Xor, m_Xor(m_Value(), m_Value())));
155+
EXPECT_TRUE(sd_match(Or, m_c_BinOp(ISD::OR, m_Value(), m_Value())));
156+
EXPECT_TRUE(sd_match(Or, m_Or(m_Value(), m_Value())));
157+
147158
SDValue BindVal;
148159
EXPECT_TRUE(sd_match(SFAdd, m_ChainedBinOp(ISD::STRICT_FADD, m_Value(BindVal),
149160
m_Deferred(BindVal))));

0 commit comments

Comments
 (0)