Skip to content

Commit 9f9b480

Browse files
authored
[AArch64] Add computeKnownBits unit test coverage for AArch64ISD::VASHR/VLSHR/VSHL (#156631)
Base tests so we can add additional FREEZE tests on top in #156445
1 parent ee71af4 commit 9f9b480

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
508568
TEST_F(AArch64SelectionDAGTest, isSplatValue_Fixed_BUILD_VECTOR) {
509569
TargetLowering TL(*TM);
510570

0 commit comments

Comments
 (0)