diff options
Diffstat (limited to 'llvm/unittests')
6 files changed, 78 insertions, 2 deletions
diff --git a/llvm/unittests/CodeGen/GlobalISel/CMakeLists.txt b/llvm/unittests/CodeGen/GlobalISel/CMakeLists.txt index 2ffec276db6..34a413c96b0 100644 --- a/llvm/unittests/CodeGen/GlobalISel/CMakeLists.txt +++ b/llvm/unittests/CodeGen/GlobalISel/CMakeLists.txt @@ -16,4 +16,5 @@ add_llvm_unittest(GlobalISelTests MachineIRBuilderTest.cpp GISelMITest.cpp PatternMatchTest.cpp + KnownBitsTest.cpp ) diff --git a/llvm/unittests/CodeGen/GlobalISel/CSETest.cpp b/llvm/unittests/CodeGen/GlobalISel/CSETest.cpp index f2f755b23a0..11983f72cb0 100644 --- a/llvm/unittests/CodeGen/GlobalISel/CSETest.cpp +++ b/llvm/unittests/CodeGen/GlobalISel/CSETest.cpp @@ -12,6 +12,7 @@ namespace { TEST_F(GISelMITest, TestCSE) { + setUp(); if (!TM) return; @@ -74,6 +75,7 @@ TEST_F(GISelMITest, TestCSE) { } TEST_F(GISelMITest, TestCSEConstantConfig) { + setUp(); if (!TM) return; diff --git a/llvm/unittests/CodeGen/GlobalISel/GISelMITest.h b/llvm/unittests/CodeGen/GlobalISel/GISelMITest.h index 0e18ac8a708..37188760c1d 100644 --- a/llvm/unittests/CodeGen/GlobalISel/GISelMITest.h +++ b/llvm/unittests/CodeGen/GlobalISel/GISelMITest.h @@ -135,11 +135,12 @@ static void collectCopies(SmallVectorImpl<Register> &Copies, class GISelMITest : public ::testing::Test { protected: - GISelMITest() : ::testing::Test() { + GISelMITest() : ::testing::Test() {} + void setUp(StringRef ExtraAssembly = "") { TM = createTargetMachine(); if (!TM) return; - ModuleMMIPair = createDummyModule(Context, *TM, ""); + ModuleMMIPair = createDummyModule(Context, *TM, ExtraAssembly); MF = getMFFromMMI(ModuleMMIPair.first.get(), ModuleMMIPair.second.get()); collectCopies(Copies, MF); EntryMBB = &*MF->begin(); diff --git a/llvm/unittests/CodeGen/GlobalISel/KnownBitsTest.cpp b/llvm/unittests/CodeGen/GlobalISel/KnownBitsTest.cpp new file mode 100644 index 00000000000..0cd35958f9f --- /dev/null +++ b/llvm/unittests/CodeGen/GlobalISel/KnownBitsTest.cpp @@ -0,0 +1,56 @@ +//===- KnownBitsTest.cpp -------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "GISelMITest.h" +#include "llvm/CodeGen/GlobalISel/GISelKnownBits.h" +#include "llvm/CodeGen/GlobalISel/MachineIRBuilder.h" + +TEST_F(GISelMITest, TestKnownBitsCst) { + StringRef MIRString = " %3:_(s8) = G_CONSTANT i8 1\n" + " %4:_(s8) = COPY %3\n"; + setUp(MIRString); + if (!TM) + return; + unsigned CopyReg = Copies[Copies.size() - 1]; + MachineInstr *FinalCopy = MRI->getVRegDef(CopyReg); + unsigned SrcReg = FinalCopy->getOperand(1).getReg(); + GISelKnownBits Info(*MF); + KnownBits Res = Info.getKnownBits(SrcReg); + EXPECT_EQ((uint64_t)1, Res.One.getZExtValue()); + EXPECT_EQ((uint64_t)0xfe, Res.Zero.getZExtValue()); +} + +TEST_F(GISelMITest, TestKnownBits) { + + StringRef MIR = " %3:_(s32) = G_TRUNC %0\n" + " %4:_(s32) = G_TRUNC %1\n" + " %5:_(s32) = G_CONSTANT i32 5\n" + " %6:_(s32) = G_CONSTANT i32 24\n" + " %7:_(s32) = G_CONSTANT i32 28\n" + " %14:_(p0) = G_INTTOPTR %7\n" + " %16:_(s32) = G_PTRTOINT %14\n" + " %8:_(s32) = G_SHL %3, %5\n" + " %9:_(s32) = G_SHL %4, %5\n" + " %10:_(s32) = G_OR %8, %6\n" + " %11:_(s32) = G_OR %9, %16\n" + " %12:_(s32) = G_MUL %10, %11\n" + " %13:_(s32) = COPY %12\n"; + setUp(MIR); + if (!TM) + return; + unsigned CopyReg = Copies[Copies.size() - 1]; + MachineInstr *FinalCopy = MRI->getVRegDef(CopyReg); + unsigned SrcReg = FinalCopy->getOperand(1).getReg(); + GISelKnownBits Info(*MF); + KnownBits Known = Info.getKnownBits(SrcReg); + EXPECT_FALSE(Known.hasConflict()); + EXPECT_EQ(0u, Known.One.getZExtValue()); + EXPECT_EQ(31u, Known.Zero.getZExtValue()); + APInt Zeroes = Info.getKnownZeroes(SrcReg); + EXPECT_EQ(Known.Zero, Zeroes); +} diff --git a/llvm/unittests/CodeGen/GlobalISel/LegalizerHelperTest.cpp b/llvm/unittests/CodeGen/GlobalISel/LegalizerHelperTest.cpp index f3bee640b13..98d12930b72 100644 --- a/llvm/unittests/CodeGen/GlobalISel/LegalizerHelperTest.cpp +++ b/llvm/unittests/CodeGen/GlobalISel/LegalizerHelperTest.cpp @@ -26,6 +26,7 @@ public: // Test CTTZ expansion when CTTZ_ZERO_UNDEF is legal or custom, // in which case it becomes CTTZ_ZERO_UNDEF with select. TEST_F(GISelMITest, LowerBitCountingCTTZ0) { + setUp(); if (!TM) return; @@ -57,6 +58,7 @@ TEST_F(GISelMITest, LowerBitCountingCTTZ0) { // CTTZ expansion in terms of CTLZ TEST_F(GISelMITest, LowerBitCountingCTTZ1) { + setUp(); if (!TM) return; @@ -90,6 +92,7 @@ TEST_F(GISelMITest, LowerBitCountingCTTZ1) { // CTTZ expansion in terms of CTPOP TEST_F(GISelMITest, LowerBitCountingCTTZ2) { + setUp(); if (!TM) return; @@ -185,6 +188,7 @@ TEST_F(GISelMITest, WidenBitCountingCTPOP2) { // CTTZ_ZERO_UNDEF expansion in terms of CTTZ TEST_F(GISelMITest, LowerBitCountingCTTZ3) { + setUp(); if (!TM) return; @@ -211,6 +215,7 @@ TEST_F(GISelMITest, LowerBitCountingCTTZ3) { // CTLZ expansion in terms of CTLZ_ZERO_UNDEF TEST_F(GISelMITest, LowerBitCountingCTLZ0) { + setUp(); if (!TM) return; @@ -241,6 +246,7 @@ TEST_F(GISelMITest, LowerBitCountingCTLZ0) { // CTLZ expansion in terms of CTLZ_ZERO_UNDEF if the latter is a libcall TEST_F(GISelMITest, LowerBitCountingCTLZLibcall) { + setUp(); if (!TM) return; @@ -271,6 +277,7 @@ TEST_F(GISelMITest, LowerBitCountingCTLZLibcall) { // CTLZ expansion TEST_F(GISelMITest, LowerBitCountingCTLZ1) { + setUp(); if (!TM) return; @@ -311,6 +318,7 @@ TEST_F(GISelMITest, LowerBitCountingCTLZ1) { // CTLZ widening. TEST_F(GISelMITest, WidenBitCountingCTLZ) { + setUp(); if (!TM) return; @@ -345,6 +353,7 @@ TEST_F(GISelMITest, WidenBitCountingCTLZ) { // CTLZ_ZERO_UNDEF widening. TEST_F(GISelMITest, WidenBitCountingCTLZZeroUndef) { + setUp(); if (!TM) return; @@ -380,6 +389,7 @@ TEST_F(GISelMITest, WidenBitCountingCTLZZeroUndef) { // CTPOP widening. TEST_F(GISelMITest, WidenBitCountingCTPOP) { + setUp(); if (!TM) return; @@ -412,6 +422,7 @@ TEST_F(GISelMITest, WidenBitCountingCTPOP) { // CTTZ_ZERO_UNDEF widening. TEST_F(GISelMITest, WidenBitCountingCTTZ_ZERO_UNDEF) { + setUp(); if (!TM) return; @@ -445,6 +456,7 @@ TEST_F(GISelMITest, WidenBitCountingCTTZ_ZERO_UNDEF) { // CTTZ widening. TEST_F(GISelMITest, WidenBitCountingCTTZ) { + setUp(); if (!TM) return; @@ -478,6 +490,7 @@ TEST_F(GISelMITest, WidenBitCountingCTTZ) { } // UADDO widening. TEST_F(GISelMITest, WidenUADDO) { + setUp(); if (!TM) return; @@ -516,6 +529,7 @@ TEST_F(GISelMITest, WidenUADDO) { // USUBO widening. TEST_F(GISelMITest, WidenUSUBO) { + setUp(); if (!TM) return; diff --git a/llvm/unittests/CodeGen/GlobalISel/MachineIRBuilderTest.cpp b/llvm/unittests/CodeGen/GlobalISel/MachineIRBuilderTest.cpp index 92d1c46d355..db973a35529 100644 --- a/llvm/unittests/CodeGen/GlobalISel/MachineIRBuilderTest.cpp +++ b/llvm/unittests/CodeGen/GlobalISel/MachineIRBuilderTest.cpp @@ -10,6 +10,7 @@ #include "llvm/CodeGen/GlobalISel/MachineIRBuilder.h" TEST_F(GISelMITest, TestBuildConstantFConstant) { + setUp(); if (!TM) return; @@ -41,6 +42,7 @@ TEST_F(GISelMITest, TestBuildConstantFConstant) { #ifndef NDEBUG TEST_F(GISelMITest, TestBuildConstantFConstantDeath) { + setUp(); if (!TM) return; |