@@ -505,6 +505,66 @@ TEST_F(AArch64SelectionDAGTest, ComputeKnownBits_USUBO_CARRY) {
505
505
EXPECT_EQ (Known.One , APInt (8 , 0x31 ));
506
506
}
507
507
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
+
508
568
TEST_F (AArch64SelectionDAGTest, isSplatValue_Fixed_BUILD_VECTOR) {
509
569
TargetLowering TL (*TM);
510
570
0 commit comments