Skip to content

Commit 0dd1128

Browse files
[DAG] Add SDPatternMatch::m_VSelect (#100758)
As per the comment in #100686 (review)
1 parent 2c0ec01 commit 0dd1128

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

llvm/include/llvm/CodeGen/SDPatternMatch.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,12 @@ m_Select(const T0_P &Cond, const T1_P &T, const T2_P &F) {
496496
return TernaryOpc_match<T0_P, T1_P, T2_P>(ISD::SELECT, Cond, T, F);
497497
}
498498

499+
template <typename T0_P, typename T1_P, typename T2_P>
500+
inline TernaryOpc_match<T0_P, T1_P, T2_P>
501+
m_VSelect(const T0_P &Cond, const T1_P &T, const T2_P &F) {
502+
return TernaryOpc_match<T0_P, T1_P, T2_P>(ISD::VSELECT, Cond, T, F);
503+
}
504+
499505
// === Binary operations ===
500506
template <typename LHS_P, typename RHS_P, bool Commutable = false,
501507
bool ExcludeChain = false>

llvm/unittests/CodeGen/SelectionDAGPatternMatchTest.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,11 @@ TEST_F(SelectionDAGPatternMatchTest, matchTernaryOp) {
137137
SDValue F = DAG->getCopyFromReg(DAG->getEntryNode(), DL, 5, Int1VT);
138138
SDValue Select = DAG->getSelect(DL, MVT::i1, Cond, T, F);
139139

140+
auto VInt32VT = EVT::getVectorVT(Context, Int32VT, 4);
141+
SDValue V1 = DAG->getCopyFromReg(DAG->getEntryNode(), DL, 6, VInt32VT);
142+
SDValue V2 = DAG->getCopyFromReg(DAG->getEntryNode(), DL, 7, VInt32VT);
143+
SDValue VSelect = DAG->getNode(ISD::VSELECT, DL, VInt32VT, Cond, V1, V2);
144+
140145
using namespace SDPatternMatch;
141146
ISD::CondCode CC;
142147
EXPECT_TRUE(sd_match(ICMP_UGT, m_SetCC(m_Value(), m_Value(),
@@ -166,6 +171,10 @@ TEST_F(SelectionDAGPatternMatchTest, matchTernaryOp) {
166171
Select, m_Select(m_Specific(Cond), m_Specific(F), m_Specific(T))));
167172
EXPECT_FALSE(sd_match(ICMP_EQ01, m_Select(m_Specific(Op0), m_Specific(Op1),
168173
m_SpecificCondCode(ISD::SETEQ))));
174+
EXPECT_TRUE(sd_match(
175+
VSelect, m_VSelect(m_Specific(Cond), m_Specific(V1), m_Specific(V2))));
176+
EXPECT_FALSE(sd_match(
177+
Select, m_VSelect(m_Specific(Cond), m_Specific(V1), m_Specific(V2))));
169178
}
170179

171180
TEST_F(SelectionDAGPatternMatchTest, matchBinaryOp) {

0 commit comments

Comments
 (0)