@@ -125,6 +125,7 @@ TEST_F(SelectionDAGPatternMatchTest, matchTernaryOp) {
125
125
126
126
SDValue Op0 = DAG->getCopyFromReg (DAG->getEntryNode (), DL, 1 , Int32VT);
127
127
SDValue Op1 = DAG->getCopyFromReg (DAG->getEntryNode (), DL, 2 , Int32VT);
128
+ SDValue Op3 = DAG->getConstant (1 , DL, Int32VT);
128
129
129
130
SDValue ICMP_UGT = DAG->getSetCC (DL, MVT::i1, Op0, Op1, ISD::SETUGT);
130
131
SDValue ICMP_EQ01 = DAG->getSetCC (DL, MVT::i1, Op0, Op1, ISD::SETEQ);
@@ -141,6 +142,9 @@ TEST_F(SelectionDAGPatternMatchTest, matchTernaryOp) {
141
142
SDValue V2 = DAG->getCopyFromReg (DAG->getEntryNode (), DL, 7 , VInt32VT);
142
143
SDValue VSelect = DAG->getNode (ISD::VSELECT, DL, VInt32VT, Cond, V1, V2);
143
144
145
+ SDValue ExtractELT =
146
+ DAG->getNode (ISD::EXTRACT_VECTOR_ELT, DL, Int32VT, V1, Op3);
147
+
144
148
using namespace SDPatternMatch ;
145
149
ISD::CondCode CC;
146
150
EXPECT_TRUE (sd_match (ICMP_UGT, m_SetCC (m_Value (), m_Value (),
@@ -174,17 +178,25 @@ TEST_F(SelectionDAGPatternMatchTest, matchTernaryOp) {
174
178
VSelect, m_VSelect (m_Specific (Cond), m_Specific (V1), m_Specific (V2))));
175
179
EXPECT_FALSE (sd_match (
176
180
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 ))));
177
185
}
178
186
179
187
TEST_F (SelectionDAGPatternMatchTest, matchBinaryOp) {
180
188
SDLoc DL;
181
189
auto Int32VT = EVT::getIntegerVT (Context, 32 );
182
190
auto Float32VT = EVT::getFloatingPointVT (32 );
191
+ auto VInt32VT = EVT::getVectorVT (Context, Int32VT, 4 );
192
+
193
+ SDValue V1 = DAG->getCopyFromReg (DAG->getEntryNode (), DL, 6 , VInt32VT);
183
194
184
195
SDValue Op0 = DAG->getCopyFromReg (DAG->getEntryNode (), DL, 1 , Int32VT);
185
196
SDValue Op1 = DAG->getCopyFromReg (DAG->getEntryNode (), DL, 2 , Int32VT);
186
197
SDValue Op2 = DAG->getCopyFromReg (DAG->getEntryNode (), DL, 3 , Float32VT);
187
198
SDValue Op3 = DAG->getCopyFromReg (DAG->getEntryNode (), DL, 8 , Int32VT);
199
+ SDValue Op4 = DAG->getConstant (1 , DL, Int32VT);
188
200
189
201
SDValue Add = DAG->getNode (ISD::ADD, DL, Int32VT, Op0, Op1);
190
202
SDValue Sub = DAG->getNode (ISD::SUB, DL, Int32VT, Add, Op0);
@@ -221,6 +233,9 @@ TEST_F(SelectionDAGPatternMatchTest, matchBinaryOp) {
221
233
SDValue SFAdd = DAG->getNode (ISD::STRICT_FADD, DL, {Float32VT, MVT::Other},
222
234
{DAG->getEntryNode (), Op2, Op2});
223
235
236
+ SDValue InsertELT =
237
+ DAG->getNode (ISD::INSERT_VECTOR_ELT, DL, VInt32VT, V1, Op0, Op4);
238
+
224
239
using namespace SDPatternMatch ;
225
240
EXPECT_TRUE (sd_match (Sub, m_BinOp (ISD::SUB, m_Value (), m_Value ())));
226
241
EXPECT_TRUE (sd_match (Sub, m_Sub (m_Value (), m_Value ())));
@@ -277,6 +292,13 @@ TEST_F(SelectionDAGPatternMatchTest, matchBinaryOp) {
277
292
m_Deferred (BindVal))));
278
293
EXPECT_FALSE (sd_match (SFAdd, m_ChainedBinOp (ISD::STRICT_FADD, m_OtherVT (),
279
294
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 ))));
280
302
}
281
303
282
304
TEST_F (SelectionDAGPatternMatchTest, matchUnaryOp) {
0 commit comments