@@ -494,6 +494,45 @@ TEST_F(PatternMatchTest, Unless) {
494494 EXPECT_FALSE (m_Unless (m_c_Add (m_Zero (), m_One ())).match (X));
495495}
496496
497+ TEST_F (PatternMatchTest, BitWise) {
498+ Value *Or = IRB.CreateOr (IRB.getInt32 (1 ), IRB.getInt32 (0 ));
499+ Value *Xor = IRB.CreateXor (IRB.getInt32 (1 ), IRB.getInt32 (0 ));
500+ Value *And = IRB.CreateXor (IRB.getInt32 (1 ), IRB.getInt32 (0 ));
501+ Constant *T = IRB.getInt1 (true );
502+ Constant *F = IRB.getInt1 (false );
503+ Value *Alloca = IRB.CreateAlloca (IRB.getInt1Ty ());
504+ Value *X = IRB.CreateLoad (IRB.getInt1Ty (), Alloca);
505+ Value *Y = IRB.CreateLoad (IRB.getInt1Ty (), Alloca);
506+ Value *LAnd = IRB.CreateSelect (X, Y, F);
507+ Value *LOr = IRB.CreateSelect (X, T, Y);
508+ Value *Add = IRB.CreateAdd (IRB.getInt32 (1 ), IRB.getInt32 (0 ));
509+
510+ EXPECT_TRUE (m_BitwiseLogic (m_One (), m_Zero ()).match (Or));
511+ EXPECT_TRUE (m_BitwiseLogic (m_One (), m_Zero ()).match (Xor));
512+ EXPECT_TRUE (m_BitwiseLogic (m_One (), m_Zero ()).match (And));
513+ EXPECT_FALSE (m_BitwiseLogic (m_Value (), m_Value ()).match (LAnd));
514+ EXPECT_FALSE (m_BitwiseLogic (m_Value (), m_Value ()).match (LOr));
515+ EXPECT_FALSE (m_BitwiseLogic (m_Value (), m_Value ()).match (Add));
516+
517+ EXPECT_FALSE (m_BitwiseLogic (m_Zero (), m_One ()).match (Or));
518+ EXPECT_FALSE (m_BitwiseLogic (m_Zero (), m_One ()).match (Xor));
519+ EXPECT_FALSE (m_BitwiseLogic (m_Zero (), m_One ()).match (And));
520+
521+ EXPECT_TRUE (m_c_BitwiseLogic (m_One (), m_Zero ()).match (Or));
522+ EXPECT_TRUE (m_c_BitwiseLogic (m_One (), m_Zero ()).match (Xor));
523+ EXPECT_TRUE (m_c_BitwiseLogic (m_One (), m_Zero ()).match (And));
524+ EXPECT_FALSE (m_c_BitwiseLogic (m_Value (), m_Value ()).match (LAnd));
525+ EXPECT_FALSE (m_c_BitwiseLogic (m_Value (), m_Value ()).match (LOr));
526+ EXPECT_FALSE (m_c_BitwiseLogic (m_Value (), m_Value ()).match (Add));
527+
528+ EXPECT_TRUE (m_c_BitwiseLogic (m_Zero (), m_One ()).match (Or));
529+ EXPECT_TRUE (m_c_BitwiseLogic (m_Zero (), m_One ()).match (Xor));
530+ EXPECT_TRUE (m_c_BitwiseLogic (m_Zero (), m_One ()).match (And));
531+
532+ EXPECT_FALSE (m_c_BitwiseLogic (m_One (), m_One ()).match (Or));
533+ EXPECT_FALSE (m_c_BitwiseLogic (m_Zero (), m_Zero ()).match (Xor));
534+ }
535+
497536TEST_F (PatternMatchTest, ZExtSExtSelf) {
498537 LLVMContext &Ctx = IRB.getContext ();
499538
0 commit comments