@@ -505,6 +505,66 @@ TEST_F(AArch64SelectionDAGTest, ComputeKnownBits_USUBO_CARRY) {
505505 EXPECT_EQ (Known.One , APInt (8 , 0x31 ));
506506}
507507
508+ // Piggy-backing on the AArch64 tests to verify SelectionDAG::computeKnownBits.
509+ TEST_F (AArch64SelectionDAGTest, ComputeKnownBits_VASHR) {
510+ SDLoc Loc;
511+ KnownBits Known;
512+ auto VecVT = MVT::v8i8;
513+ auto Shift0 = DAG->getConstant (4 , Loc, MVT::i32 );
514+ auto Vec0 = DAG->getConstant (0x80 , Loc, VecVT);
515+ auto Op0 = DAG->getNode (AArch64ISD::VASHR, Loc, VecVT, Vec0, Shift0);
516+ Known = DAG->computeKnownBits (Op0);
517+ EXPECT_EQ (Known.Zero , APInt (8 , 0x07 ));
518+ EXPECT_EQ (Known.One , APInt (8 , 0xF8 ));
519+
520+ auto Shift1 = DAG->getConstant (7 , Loc, MVT::i32 );
521+ auto Vec1 = DAG->getConstant (0xF7 , Loc, VecVT);
522+ auto Op1 = DAG->getNode (AArch64ISD::VASHR, Loc, VecVT, Vec1, Shift1);
523+ Known = DAG->computeKnownBits (Op1);
524+ EXPECT_EQ (Known.Zero , APInt (8 , 0x00 ));
525+ EXPECT_EQ (Known.One , APInt (8 , 0xFF ));
526+ }
527+
528+ // Piggy-backing on the AArch64 tests to verify SelectionDAG::computeKnownBits.
529+ TEST_F (AArch64SelectionDAGTest, ComputeKnownBits_VLSHR) {
530+ SDLoc Loc;
531+ KnownBits Known;
532+ auto VecVT = MVT::v8i8;
533+ auto Shift0 = DAG->getConstant (4 , Loc, MVT::i32 );
534+ auto Vec0 = DAG->getConstant (0x80 , Loc, VecVT);
535+ auto Op0 = DAG->getNode (AArch64ISD::VLSHR, Loc, VecVT, Vec0, Shift0);
536+ Known = DAG->computeKnownBits (Op0);
537+ EXPECT_EQ (Known.Zero , APInt (8 , 0xF7 ));
538+ EXPECT_EQ (Known.One , APInt (8 , 0x08 ));
539+
540+ auto Shift1 = DAG->getConstant (7 , Loc, MVT::i32 );
541+ auto Vec1 = DAG->getConstant (0xF7 , Loc, VecVT);
542+ auto Op1 = DAG->getNode (AArch64ISD::VLSHR, Loc, VecVT, Vec1, Shift1);
543+ Known = DAG->computeKnownBits (Op1);
544+ EXPECT_EQ (Known.Zero , APInt (8 , 0xFE ));
545+ EXPECT_EQ (Known.One , APInt (8 , 0x1 ));
546+ }
547+
548+ // Piggy-backing on the AArch64 tests to verify SelectionDAG::computeKnownBits.
549+ TEST_F (AArch64SelectionDAGTest, ComputeKnownBits_VSHL) {
550+ SDLoc Loc;
551+ KnownBits Known;
552+ auto VecVT = MVT::v8i8;
553+ auto Shift0 = DAG->getConstant (4 , Loc, MVT::i32 );
554+ auto Vec0 = DAG->getConstant (0x02 , Loc, VecVT);
555+ auto Op0 = DAG->getNode (AArch64ISD::VSHL, Loc, VecVT, Vec0, Shift0);
556+ Known = DAG->computeKnownBits (Op0);
557+ EXPECT_EQ (Known.Zero , APInt (8 , 0xDF ));
558+ EXPECT_EQ (Known.One , APInt (8 , 0x20 ));
559+
560+ auto Shift1 = DAG->getConstant (7 , Loc, MVT::i32 );
561+ auto Vec1 = DAG->getConstant (0xF7 , Loc, VecVT);
562+ auto Op1 = DAG->getNode (AArch64ISD::VSHL, Loc, VecVT, Vec1, Shift1);
563+ Known = DAG->computeKnownBits (Op1);
564+ EXPECT_EQ (Known.Zero , APInt (8 , 0x7F ));
565+ EXPECT_EQ (Known.One , APInt (8 , 0x80 ));
566+ }
567+
508568TEST_F (AArch64SelectionDAGTest, isSplatValue_Fixed_BUILD_VECTOR) {
509569 TargetLowering TL (*TM);
510570
0 commit comments