From 72f3922534efeff1a971aaed6c89973b84490f33 Mon Sep 17 00:00:00 2001 From: Michael Kruse Date: Thu, 13 Apr 2017 16:32:39 +0000 Subject: [PATCH] [DeLICM] Export Known and Written to DeLICMTests. NFC. This will allow unittesting of new functionality based on Known and Written. llvm-svn: 300211 --- polly/include/polly/DeLICM.h | 6 ++++-- polly/lib/Transform/DeLICM.cpp | 25 ++++++++++++++++--------- polly/unittests/DeLICM/DeLICMTest.cpp | 27 ++++++++++++++++++--------- 3 files changed, 38 insertions(+), 20 deletions(-) diff --git a/polly/include/polly/DeLICM.h b/polly/include/polly/DeLICM.h index b70e1b8..8aeefb6 100644 --- a/polly/include/polly/DeLICM.h +++ b/polly/include/polly/DeLICM.h @@ -33,9 +33,11 @@ llvm::Pass *createDeLICMPass(); /// /// Used by unittesting. bool isConflicting(isl::union_set ExistingOccupied, - isl::union_set ExistingUnused, isl::union_set ExistingWrites, + isl::union_set ExistingUnused, isl::union_map ExistingKnown, + isl::union_map ExistingWrites, isl::union_set ProposedOccupied, - isl::union_set ProposedUnused, isl::union_set ProposedWrites, + isl::union_set ProposedUnused, isl::union_map ProposedKnown, + isl::union_map ProposedWrites, llvm::raw_ostream *OS = nullptr, unsigned Indent = 0); } // namespace polly diff --git a/polly/lib/Transform/DeLICM.cpp b/polly/lib/Transform/DeLICM.cpp index 09fac852..b3831e6 100644 --- a/polly/lib/Transform/DeLICM.cpp +++ b/polly/lib/Transform/DeLICM.cpp @@ -536,6 +536,14 @@ public: checkConsistency(); } + /// Create a new object with the given members. + Knowledge(isl::union_set Occupied, isl::union_set Unused, + isl::union_map Known, isl::union_map Written) + : Occupied(std::move(Occupied)), Unused(std::move(Unused)), + Known(std::move(Known)), Written(std::move(Written)) { + checkConsistency(); + } + /// Return whether this object was not default-constructed. bool isUsable() const { return (Occupied || Unused) && Known && Written; } @@ -1806,17 +1814,16 @@ INITIALIZE_PASS_DEPENDENCY(ScopInfoWrapperPass) INITIALIZE_PASS_END(DeLICM, "polly-delicm", "Polly - DeLICM/DePRE", false, false) -bool polly::isConflicting(isl::union_set ExistingOccupied, - isl::union_set ExistingUnused, - isl::union_set ExistingWrites, - isl::union_set ProposedOccupied, - isl::union_set ProposedUnused, - isl::union_set ProposedWrites, llvm::raw_ostream *OS, - unsigned Indent) { +bool polly::isConflicting( + isl::union_set ExistingOccupied, isl::union_set ExistingUnused, + isl::union_map ExistingKnown, isl::union_map ExistingWrites, + isl::union_set ProposedOccupied, isl::union_set ProposedUnused, + isl::union_map ProposedKnown, isl::union_map ProposedWrites, + llvm::raw_ostream *OS, unsigned Indent) { Knowledge Existing(std::move(ExistingOccupied), std::move(ExistingUnused), - std::move(ExistingWrites)); + std::move(ExistingKnown), std::move(ExistingWrites)); Knowledge Proposed(std::move(ProposedOccupied), std::move(ProposedUnused), - std::move(ProposedWrites)); + std::move(ProposedKnown), std::move(ProposedWrites)); return Knowledge::isConflicting(Existing, Proposed, OS, Indent); } diff --git a/polly/unittests/DeLICM/DeLICMTest.cpp b/polly/unittests/DeLICM/DeLICMTest.cpp index a8712cc..8803b07 100644 --- a/polly/unittests/DeLICM/DeLICMTest.cpp +++ b/polly/unittests/DeLICM/DeLICMTest.cpp @@ -109,21 +109,30 @@ bool checkIsConflictingNonsymmetric(KnowledgeStr Existing, completeLifetime(Universe, ExistingOccupied, ExistingUnused); completeLifetime(Universe, ProposedOccupied, ProposedUnused); - auto Result = - isConflicting(ExistingOccupied, ExistingUnused, ExistingWritten, - ProposedOccupied, ProposedUnused, ProposedWritten); + auto ParamSpace = isl::manage(isl_union_set_get_space(Universe.keep())); + auto EmptyUnionMap = isl::union_map::empty(ParamSpace); + auto ExistingWrittenMap = + isl::manage(isl_union_map_from_domain(ExistingWritten.copy())); + auto ProposedWrittenMap = + isl::manage(isl_union_map_from_domain(ProposedWritten.copy())); + auto Result = isConflicting( + ExistingOccupied, ExistingUnused, EmptyUnionMap, ExistingWrittenMap, + ProposedOccupied, ProposedUnused, EmptyUnionMap, ProposedWrittenMap); // isConflicting does not require ExistingOccupied nor ProposedUnused and are // implicitly assumed to be the remainder elements. Test the implicitness as // well. EXPECT_EQ(Result, - isConflicting(ExistingOccupied, ExistingUnused, ExistingWritten, - ProposedOccupied, {}, ProposedWritten)); + isConflicting(ExistingOccupied, ExistingUnused, EmptyUnionMap, + ExistingWrittenMap, ProposedOccupied, {}, + EmptyUnionMap, ProposedWrittenMap)); EXPECT_EQ(Result, - isConflicting({}, ExistingUnused, ExistingWritten, ProposedOccupied, - ProposedUnused, ProposedWritten)); - EXPECT_EQ(Result, isConflicting({}, ExistingUnused, ExistingWritten, - ProposedOccupied, {}, ProposedWritten)); + isConflicting({}, ExistingUnused, EmptyUnionMap, ExistingWrittenMap, + ProposedOccupied, ProposedUnused, EmptyUnionMap, + ProposedWrittenMap)); + EXPECT_EQ(Result, isConflicting({}, ExistingUnused, EmptyUnionMap, + ExistingWrittenMap, ProposedOccupied, {}, + EmptyUnionMap, ProposedWrittenMap)); return Result; } -- 2.7.4