@@ -2250,9 +2250,151 @@ TYPED_TEST(MutableConstTest, ICmp) {
2250
2250
ICmpInst::Predicate MatchPred;
2251
2251
2252
2252
EXPECT_TRUE (m_ICmp (MatchPred, m_Value (MatchL), m_Value (MatchR))
2253
- .match ((InstructionType)IRB.CreateICmp (Pred, L, R)));
2253
+ .match ((InstructionType)IRB.CreateICmp (Pred, L, R)));
2254
2254
EXPECT_EQ (L, MatchL);
2255
2255
EXPECT_EQ (R, MatchR);
2256
+
2257
+ EXPECT_TRUE (m_Cmp (MatchPred, m_Value (MatchL), m_Value (MatchR))
2258
+ .match ((InstructionType)IRB.CreateICmp (Pred, L, R)));
2259
+ EXPECT_EQ (L, MatchL);
2260
+ EXPECT_EQ (R, MatchR);
2261
+
2262
+ EXPECT_TRUE (m_ICmp (m_Specific (L), m_Specific (R))
2263
+ .match ((InstructionType)IRB.CreateICmp (Pred, L, R)));
2264
+
2265
+ EXPECT_TRUE (m_Cmp (m_Specific (L), m_Specific (R))
2266
+ .match ((InstructionType)IRB.CreateICmp (Pred, L, R)));
2267
+
2268
+ EXPECT_FALSE (m_ICmp (m_Specific (R), m_Specific (L))
2269
+ .match ((InstructionType)IRB.CreateICmp (Pred, L, R)));
2270
+ EXPECT_FALSE (m_Cmp (m_Specific (R), m_Specific (L))
2271
+ .match ((InstructionType)IRB.CreateICmp (Pred, L, R)));
2272
+
2273
+ EXPECT_TRUE (m_c_ICmp (m_Specific (R), m_Specific (L))
2274
+ .match ((InstructionType)IRB.CreateICmp (Pred, L, R)));
2275
+
2276
+ EXPECT_FALSE (m_c_ICmp (m_Specific (R), m_Specific (R))
2277
+ .match ((InstructionType)IRB.CreateICmp (Pred, L, R)));
2278
+
2279
+ EXPECT_TRUE (m_SpecificICmp (Pred, m_Specific (L), m_Specific (R))
2280
+ .match ((InstructionType)IRB.CreateICmp (Pred, L, R)));
2281
+ EXPECT_TRUE (m_SpecificCmp (Pred, m_Specific (L), m_Specific (R))
2282
+ .match ((InstructionType)IRB.CreateICmp (Pred, L, R)));
2283
+
2284
+ EXPECT_FALSE (m_SpecificICmp (Pred, m_Specific (R), m_Specific (L))
2285
+ .match ((InstructionType)IRB.CreateICmp (Pred, L, R)));
2286
+ EXPECT_FALSE (m_SpecificCmp (Pred, m_Specific (R), m_Specific (L))
2287
+ .match ((InstructionType)IRB.CreateICmp (Pred, L, R)));
2288
+
2289
+ MatchL = nullptr ;
2290
+ MatchR = nullptr ;
2291
+ EXPECT_TRUE (m_SpecificICmp (Pred, m_Value (MatchL), m_Value (MatchR))
2292
+ .match ((InstructionType)IRB.CreateICmp (Pred, L, R)));
2293
+ EXPECT_EQ (L, MatchL);
2294
+ EXPECT_EQ (R, MatchR);
2295
+ MatchL = nullptr ;
2296
+ MatchR = nullptr ;
2297
+ EXPECT_TRUE (m_SpecificCmp (Pred, m_Value (MatchL), m_Value (MatchR))
2298
+ .match ((InstructionType)IRB.CreateICmp (Pred, L, R)));
2299
+ EXPECT_EQ (L, MatchL);
2300
+ EXPECT_EQ (R, MatchR);
2301
+
2302
+ EXPECT_FALSE (m_SpecificICmp (Pred, m_Specific (R), m_Specific (L))
2303
+ .match ((InstructionType)IRB.CreateICmp (Pred, L, R)));
2304
+ EXPECT_FALSE (m_SpecificCmp (Pred, m_Specific (R), m_Specific (L))
2305
+ .match ((InstructionType)IRB.CreateICmp (Pred, L, R)));
2306
+
2307
+ EXPECT_FALSE (m_SpecificICmp (ICmpInst::getInversePredicate (Pred),
2308
+ m_Specific (L), m_Specific (R))
2309
+ .match ((InstructionType)IRB.CreateICmp (Pred, L, R)));
2310
+ EXPECT_FALSE (m_SpecificCmp (ICmpInst::getInversePredicate (Pred), m_Specific (L),
2311
+ m_Specific (R))
2312
+ .match ((InstructionType)IRB.CreateICmp (Pred, L, R)));
2313
+
2314
+ EXPECT_FALSE (m_SpecificICmp (ICmpInst::getInversePredicate (Pred),
2315
+ m_Value (MatchL), m_Value (MatchR))
2316
+ .match ((InstructionType)IRB.CreateICmp (Pred, L, R)));
2317
+ EXPECT_FALSE (m_SpecificCmp (ICmpInst::getInversePredicate (Pred),
2318
+ m_Value (MatchL), m_Value (MatchR))
2319
+ .match ((InstructionType)IRB.CreateICmp (Pred, L, R)));
2320
+ }
2321
+
2322
+ TYPED_TEST (MutableConstTest, FCmp) {
2323
+ auto &IRB = PatternMatchTest::IRB;
2324
+
2325
+ typedef std::tuple_element_t <0 , TypeParam> ValueType;
2326
+ typedef std::tuple_element_t <1 , TypeParam> InstructionType;
2327
+
2328
+ Value *L = Constant::getNullValue (IRB.getFloatTy ());
2329
+ Value *R = ConstantFP::getInfinity (IRB.getFloatTy (), true );
2330
+ FCmpInst::Predicate Pred = FCmpInst::FCMP_OGT;
2331
+
2332
+ ValueType MatchL;
2333
+ ValueType MatchR;
2334
+ FCmpInst::Predicate MatchPred;
2335
+
2336
+ EXPECT_TRUE (m_FCmp (MatchPred, m_Value (MatchL), m_Value (MatchR))
2337
+ .match ((InstructionType)IRB.CreateFCmp (Pred, L, R)));
2338
+ EXPECT_EQ (L, MatchL);
2339
+ EXPECT_EQ (R, MatchR);
2340
+
2341
+ EXPECT_TRUE (m_Cmp (MatchPred, m_Value (MatchL), m_Value (MatchR))
2342
+ .match ((InstructionType)IRB.CreateFCmp (Pred, L, R)));
2343
+ EXPECT_EQ (L, MatchL);
2344
+ EXPECT_EQ (R, MatchR);
2345
+
2346
+ EXPECT_TRUE (m_FCmp (m_Specific (L), m_Specific (R))
2347
+ .match ((InstructionType)IRB.CreateFCmp (Pred, L, R)));
2348
+
2349
+ EXPECT_TRUE (m_Cmp (m_Specific (L), m_Specific (R))
2350
+ .match ((InstructionType)IRB.CreateFCmp (Pred, L, R)));
2351
+
2352
+ EXPECT_FALSE (m_FCmp (m_Specific (R), m_Specific (L))
2353
+ .match ((InstructionType)IRB.CreateFCmp (Pred, L, R)));
2354
+ EXPECT_FALSE (m_Cmp (m_Specific (R), m_Specific (L))
2355
+ .match ((InstructionType)IRB.CreateFCmp (Pred, L, R)));
2356
+
2357
+ EXPECT_TRUE (m_SpecificFCmp (Pred, m_Specific (L), m_Specific (R))
2358
+ .match ((InstructionType)IRB.CreateFCmp (Pred, L, R)));
2359
+ EXPECT_TRUE (m_SpecificCmp (Pred, m_Specific (L), m_Specific (R))
2360
+ .match ((InstructionType)IRB.CreateFCmp (Pred, L, R)));
2361
+
2362
+ EXPECT_FALSE (m_SpecificFCmp (Pred, m_Specific (R), m_Specific (L))
2363
+ .match ((InstructionType)IRB.CreateFCmp (Pred, L, R)));
2364
+ EXPECT_FALSE (m_SpecificCmp (Pred, m_Specific (R), m_Specific (L))
2365
+ .match ((InstructionType)IRB.CreateFCmp (Pred, L, R)));
2366
+
2367
+ MatchL = nullptr ;
2368
+ MatchR = nullptr ;
2369
+ EXPECT_TRUE (m_SpecificFCmp (Pred, m_Value (MatchL), m_Value (MatchR))
2370
+ .match ((InstructionType)IRB.CreateFCmp (Pred, L, R)));
2371
+ EXPECT_EQ (L, MatchL);
2372
+ EXPECT_EQ (R, MatchR);
2373
+ MatchL = nullptr ;
2374
+ MatchR = nullptr ;
2375
+ EXPECT_TRUE (m_SpecificCmp (Pred, m_Value (MatchL), m_Value (MatchR))
2376
+ .match ((InstructionType)IRB.CreateFCmp (Pred, L, R)));
2377
+ EXPECT_EQ (L, MatchL);
2378
+ EXPECT_EQ (R, MatchR);
2379
+
2380
+ EXPECT_FALSE (m_SpecificFCmp (Pred, m_Specific (R), m_Specific (L))
2381
+ .match ((InstructionType)IRB.CreateFCmp (Pred, L, R)));
2382
+ EXPECT_FALSE (m_SpecificCmp (Pred, m_Specific (R), m_Specific (L))
2383
+ .match ((InstructionType)IRB.CreateFCmp (Pred, L, R)));
2384
+
2385
+ EXPECT_FALSE (m_SpecificFCmp (FCmpInst::getInversePredicate (Pred),
2386
+ m_Specific (L), m_Specific (R))
2387
+ .match ((InstructionType)IRB.CreateFCmp (Pred, L, R)));
2388
+ EXPECT_FALSE (m_SpecificCmp (FCmpInst::getInversePredicate (Pred), m_Specific (L),
2389
+ m_Specific (R))
2390
+ .match ((InstructionType)IRB.CreateFCmp (Pred, L, R)));
2391
+
2392
+ EXPECT_FALSE (m_SpecificFCmp (FCmpInst::getInversePredicate (Pred),
2393
+ m_Value (MatchL), m_Value (MatchR))
2394
+ .match ((InstructionType)IRB.CreateFCmp (Pred, L, R)));
2395
+ EXPECT_FALSE (m_SpecificCmp (FCmpInst::getInversePredicate (Pred),
2396
+ m_Value (MatchL), m_Value (MatchR))
2397
+ .match ((InstructionType)IRB.CreateFCmp (Pred, L, R)));
2256
2398
}
2257
2399
2258
2400
TEST_F (PatternMatchTest, ConstExpr) {
0 commit comments