@@ -125,6 +125,7 @@ TEST_F(SelectionDAGPatternMatchTest, matchTernaryOp) {
125125
126126 SDValue Op0 = DAG->getCopyFromReg (DAG->getEntryNode (), DL, 1 , Int32VT);
127127 SDValue Op1 = DAG->getCopyFromReg (DAG->getEntryNode (), DL, 2 , Int32VT);
128+ SDValue Op3 = DAG->getConstant (1 , DL, Int32VT);
128129
129130 SDValue ICMP_UGT = DAG->getSetCC (DL, MVT::i1, Op0, Op1, ISD::SETUGT);
130131 SDValue ICMP_EQ01 = DAG->getSetCC (DL, MVT::i1, Op0, Op1, ISD::SETEQ);
@@ -141,6 +142,9 @@ TEST_F(SelectionDAGPatternMatchTest, matchTernaryOp) {
141142 SDValue V2 = DAG->getCopyFromReg (DAG->getEntryNode (), DL, 7 , VInt32VT);
142143 SDValue VSelect = DAG->getNode (ISD::VSELECT, DL, VInt32VT, Cond, V1, V2);
143144
145+ SDValue ExtractELT =
146+ DAG->getNode (ISD::EXTRACT_VECTOR_ELT, DL, Int32VT, V1, Op3);
147+
144148 using namespace SDPatternMatch ;
145149 ISD::CondCode CC;
146150 EXPECT_TRUE (sd_match (ICMP_UGT, m_SetCC (m_Value (), m_Value (),
@@ -174,17 +178,25 @@ TEST_F(SelectionDAGPatternMatchTest, matchTernaryOp) {
174178 VSelect, m_VSelect (m_Specific (Cond), m_Specific (V1), m_Specific (V2))));
175179 EXPECT_FALSE (sd_match (
176180 Select, m_VSelect (m_Specific (Cond), m_Specific (V1), m_Specific (V2))));
181+
182+ EXPECT_TRUE (sd_match (ExtractELT, m_ExtractElt (m_Value (), m_Value ())));
183+ EXPECT_TRUE (sd_match (ExtractELT, m_ExtractElt (m_Value (), m_ConstInt ())));
184+ EXPECT_TRUE (sd_match (ExtractELT, m_ExtractElt (m_Value (), m_SpecificInt (1 ))));
177185}
178186
179187TEST_F (SelectionDAGPatternMatchTest, matchBinaryOp) {
180188 SDLoc DL;
181189 auto Int32VT = EVT::getIntegerVT (Context, 32 );
182190 auto Float32VT = EVT::getFloatingPointVT (32 );
191+ auto VInt32VT = EVT::getVectorVT (Context, Int32VT, 4 );
192+
193+ SDValue V1 = DAG->getCopyFromReg (DAG->getEntryNode (), DL, 6 , VInt32VT);
183194
184195 SDValue Op0 = DAG->getCopyFromReg (DAG->getEntryNode (), DL, 1 , Int32VT);
185196 SDValue Op1 = DAG->getCopyFromReg (DAG->getEntryNode (), DL, 2 , Int32VT);
186197 SDValue Op2 = DAG->getCopyFromReg (DAG->getEntryNode (), DL, 3 , Float32VT);
187198 SDValue Op3 = DAG->getCopyFromReg (DAG->getEntryNode (), DL, 8 , Int32VT);
199+ SDValue Op4 = DAG->getConstant (1 , DL, Int32VT);
188200
189201 SDValue Add = DAG->getNode (ISD::ADD, DL, Int32VT, Op0, Op1);
190202 SDValue Sub = DAG->getNode (ISD::SUB, DL, Int32VT, Add, Op0);
@@ -221,6 +233,9 @@ TEST_F(SelectionDAGPatternMatchTest, matchBinaryOp) {
221233 SDValue SFAdd = DAG->getNode (ISD::STRICT_FADD, DL, {Float32VT, MVT::Other},
222234 {DAG->getEntryNode (), Op2, Op2});
223235
236+ SDValue InsertELT =
237+ DAG->getNode (ISD::INSERT_VECTOR_ELT, DL, VInt32VT, V1, Op0, Op4);
238+
224239 using namespace SDPatternMatch ;
225240 EXPECT_TRUE (sd_match (Sub, m_BinOp (ISD::SUB, m_Value (), m_Value ())));
226241 EXPECT_TRUE (sd_match (Sub, m_Sub (m_Value (), m_Value ())));
@@ -277,6 +292,13 @@ TEST_F(SelectionDAGPatternMatchTest, matchBinaryOp) {
277292 m_Deferred (BindVal))));
278293 EXPECT_FALSE (sd_match (SFAdd, m_ChainedBinOp (ISD::STRICT_FADD, m_OtherVT (),
279294 m_SpecificVT (Float32VT))));
295+
296+ EXPECT_TRUE (
297+ sd_match (InsertELT, m_InsertElt (m_Value (), m_Value (), m_Value ())));
298+ EXPECT_TRUE (
299+ sd_match (InsertELT, m_InsertElt (m_Value (), m_Value (), m_ConstInt ())));
300+ EXPECT_TRUE (
301+ sd_match (InsertELT, m_InsertElt (m_Value (), m_Value (), m_SpecificInt (1 ))));
280302}
281303
282304TEST_F (SelectionDAGPatternMatchTest, matchUnaryOp) {
0 commit comments