summaryrefslogtreecommitdiffstats
path: root/llvm/unittests
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests')
-rw-r--r--llvm/unittests/CodeGen/GlobalISel/CMakeLists.txt1
-rw-r--r--llvm/unittests/CodeGen/GlobalISel/CSETest.cpp2
-rw-r--r--llvm/unittests/CodeGen/GlobalISel/GISelMITest.h5
-rw-r--r--llvm/unittests/CodeGen/GlobalISel/KnownBitsTest.cpp56
-rw-r--r--llvm/unittests/CodeGen/GlobalISel/LegalizerHelperTest.cpp14
-rw-r--r--llvm/unittests/CodeGen/GlobalISel/MachineIRBuilderTest.cpp2
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;
OpenPOWER on IntegriCloud