summaryrefslogtreecommitdiffstats
path: root/polly/unittests
diff options
context:
space:
mode:
authorMichael Kruse <llvm@meinersbur.de>2017-02-04 15:42:10 +0000
committerMichael Kruse <llvm@meinersbur.de>2017-02-04 15:42:10 +0000
commitec67d364931ab3a0804970fafab31b2e687307ee (patch)
treecbe274abb66c62c1e3844fdb3778f7223023eb84 /polly/unittests
parentf4dc133e693c9cec5672e23382e630c971a3944f (diff)
downloadbcm5719-llvm-ec67d364931ab3a0804970fafab31b2e687307ee.tar.gz
bcm5719-llvm-ec67d364931ab3a0804970fafab31b2e687307ee.zip
[Support] Add computeArrayUnused. NFC.
This function has been extracted from the upcoming DeLICM patch (https://reviews.llvm.org/D24716). llvm-svn: 294093
Diffstat (limited to 'polly/unittests')
-rw-r--r--polly/unittests/Isl/IslTest.cpp66
1 files changed, 66 insertions, 0 deletions
diff --git a/polly/unittests/Isl/IslTest.cpp b/polly/unittests/Isl/IslTest.cpp
index 959415e95ec..667045f296b 100644
--- a/polly/unittests/Isl/IslTest.cpp
+++ b/polly/unittests/Isl/IslTest.cpp
@@ -741,4 +741,70 @@ TEST(DeLICM, computeReachingWrite) {
false, true));
}
+TEST(DeLICM, computeArrayUnused) {
+ std::unique_ptr<isl_ctx, decltype(&isl_ctx_free)> Ctx(isl_ctx_alloc(),
+ &isl_ctx_free);
+
+ // The ReadEltInSameInst parameter doesn't matter in simple cases. To also
+ // cover the parameter without duplicating the tests, this loops runs over
+ // other in both settings.
+ for (bool ReadEltInSameInst = false, Done = false; !Done;
+ Done = ReadEltInSameInst, ReadEltInSameInst = true) {
+ // Basic usage: one read, one write
+ EXPECT_EQ(UMAP("{ Elt[] -> [i] : 0 < i < 10 }"),
+ computeArrayUnused(UMAP("{ Read[] -> [0]; Write[] -> [10] }"),
+ UMAP("{ Write[] -> Elt[] }"),
+ UMAP("{ Read[] -> Elt[] }"), ReadEltInSameInst,
+ false, false));
+ EXPECT_EQ(UMAP("{ Elt[] -> [i] : 0 < i <= 10 }"),
+ computeArrayUnused(UMAP("{ Read[] -> [0]; Write[] -> [10] }"),
+ UMAP("{ Write[] -> Elt[] }"),
+ UMAP("{ Read[] -> Elt[] }"), ReadEltInSameInst,
+ false, true));
+ EXPECT_EQ(UMAP("{ Elt[] -> [i] : 0 <= i < 10 }"),
+ computeArrayUnused(UMAP("{ Read[] -> [0]; Write[] -> [10] }"),
+ UMAP("{ Write[] -> Elt[] }"),
+ UMAP("{ Read[] -> Elt[] }"), ReadEltInSameInst,
+ true, false));
+ EXPECT_EQ(UMAP("{ Elt[] -> [i] : 0 <= i <= 10 }"),
+ computeArrayUnused(UMAP("{ Read[] -> [0]; Write[] -> [10] }"),
+ UMAP("{ Write[] -> Elt[] }"),
+ UMAP("{ Read[] -> Elt[] }"), ReadEltInSameInst,
+ true, true));
+
+ // Two reads
+ EXPECT_EQ(UMAP("{ Elt[] -> [i] : 0 < i <= 10 }"),
+ computeArrayUnused(
+ UMAP("{ Read[0] -> [-10]; Read[1] -> [0]; Write[] -> [10] }"),
+ UMAP("{ Write[] -> Elt[] }"), UMAP("{ Read[i] -> Elt[] }"),
+ ReadEltInSameInst, false, true));
+
+ // Corner case: no writes
+ EXPECT_EQ(UMAP("{}"),
+ computeArrayUnused(UMAP("{ Read[] -> [0] }"), UMAP("{}"),
+ UMAP("{ Read[] -> Elt[] }"), ReadEltInSameInst,
+ false, false));
+
+ // Corner case: no reads
+ EXPECT_EQ(UMAP("{ Elt[] -> [i] : i <= 0 }"),
+ computeArrayUnused(UMAP("{ Write[] -> [0] }"),
+ UMAP("{ Write[] -> Elt[] }"), UMAP("{}"),
+ ReadEltInSameInst, false, true));
+ }
+
+ // Read and write in same statement
+ EXPECT_EQ(UMAP("{ Elt[] -> [i] : i < 0 }"),
+ computeArrayUnused(UMAP("{ RW[] -> [0] }"),
+ UMAP("{ RW[] -> Elt[] }"),
+ UMAP("{ RW[] -> Elt[] }"), true, false, false));
+ EXPECT_EQ(UMAP("{ Elt[] -> [i] : i <= 0 }"),
+ computeArrayUnused(UMAP("{ RW[] -> [0] }"),
+ UMAP("{ RW[] -> Elt[] }"),
+ UMAP("{ RW[] -> Elt[] }"), true, false, true));
+ EXPECT_EQ(UMAP("{ Elt[] -> [0] }"),
+ computeArrayUnused(UMAP("{ RW[] -> [0] }"),
+ UMAP("{ RW[] -> Elt[] }"),
+ UMAP("{ RW[] -> Elt[] }"), false, true, true));
+}
+
} // anonymous namespace
OpenPOWER on IntegriCloud