summaryrefslogtreecommitdiffstats
path: root/polly/lib/Analysis/ScopInfo.cpp
diff options
context:
space:
mode:
authorMichael Kruse <llvm@meinersbur.de>2019-06-04 21:58:54 +0000
committerMichael Kruse <llvm@meinersbur.de>2019-06-04 21:58:54 +0000
commit06c801e153347d24ec7ce93f6ffbbc58b64a89ba (patch)
tree6c4fa525eb39849244ec02156a059fe344fa6db8 /polly/lib/Analysis/ScopInfo.cpp
parent2d37cb82f0e66e48f8970104e155a644038c45d5 (diff)
downloadbcm5719-llvm-06c801e153347d24ec7ce93f6ffbbc58b64a89ba.tar.gz
bcm5719-llvm-06c801e153347d24ec7ce93f6ffbbc58b64a89ba.zip
[ScopBuilder] Move canonicalizeDynamicsBasePtrs from ScopInfo. NFC.
Refactor Scop and ScopBuilder class. Move canonicalizeDynamicsBasePtrs and corresponding static functions from ScopInfo.cpp to ScopBuilder.cpp Patch by Dominik Adamski <adamski.dominik@gmail.com> Differential Revision: https://reviews.llvm.org/D62781 llvm-svn: 362554
Diffstat (limited to 'polly/lib/Analysis/ScopInfo.cpp')
-rw-r--r--polly/lib/Analysis/ScopInfo.cpp70
1 files changed, 0 insertions, 70 deletions
diff --git a/polly/lib/Analysis/ScopInfo.cpp b/polly/lib/Analysis/ScopInfo.cpp
index f7712c3efb8..0a8da7426bc 100644
--- a/polly/lib/Analysis/ScopInfo.cpp
+++ b/polly/lib/Analysis/ScopInfo.cpp
@@ -3797,76 +3797,6 @@ void Scop::hoistInvariantLoads() {
}
}
-/// Find the canonical scop array info object for a set of invariant load
-/// hoisted loads. The canonical array is the one that corresponds to the
-/// first load in the list of accesses which is used as base pointer of a
-/// scop array.
-static const ScopArrayInfo *findCanonicalArray(Scop *S,
- MemoryAccessList &Accesses) {
- for (MemoryAccess *Access : Accesses) {
- const ScopArrayInfo *CanonicalArray = S->getScopArrayInfoOrNull(
- Access->getAccessInstruction(), MemoryKind::Array);
- if (CanonicalArray)
- return CanonicalArray;
- }
- return nullptr;
-}
-
-/// Check if @p Array severs as base array in an invariant load.
-static bool isUsedForIndirectHoistedLoad(Scop *S, const ScopArrayInfo *Array) {
- for (InvariantEquivClassTy &EqClass2 : S->getInvariantAccesses())
- for (MemoryAccess *Access2 : EqClass2.InvariantAccesses)
- if (Access2->getScopArrayInfo() == Array)
- return true;
- return false;
-}
-
-/// Replace the base pointer arrays in all memory accesses referencing @p Old,
-/// with a reference to @p New.
-static void replaceBasePtrArrays(Scop *S, const ScopArrayInfo *Old,
- const ScopArrayInfo *New) {
- for (ScopStmt &Stmt : *S)
- for (MemoryAccess *Access : Stmt) {
- if (Access->getLatestScopArrayInfo() != Old)
- continue;
-
- isl::id Id = New->getBasePtrId();
- isl::map Map = Access->getAccessRelation();
- Map = Map.set_tuple_id(isl::dim::out, Id);
- Access->setAccessRelation(Map);
- }
-}
-
-void Scop::canonicalizeDynamicBasePtrs() {
- for (InvariantEquivClassTy &EqClass : InvariantEquivClasses) {
- MemoryAccessList &BasePtrAccesses = EqClass.InvariantAccesses;
-
- const ScopArrayInfo *CanonicalBasePtrSAI =
- findCanonicalArray(this, BasePtrAccesses);
-
- if (!CanonicalBasePtrSAI)
- continue;
-
- for (MemoryAccess *BasePtrAccess : BasePtrAccesses) {
- const ScopArrayInfo *BasePtrSAI = getScopArrayInfoOrNull(
- BasePtrAccess->getAccessInstruction(), MemoryKind::Array);
- if (!BasePtrSAI || BasePtrSAI == CanonicalBasePtrSAI ||
- !BasePtrSAI->isCompatibleWith(CanonicalBasePtrSAI))
- continue;
-
- // we currently do not canonicalize arrays where some accesses are
- // hoisted as invariant loads. If we would, we need to update the access
- // function of the invariant loads as well. However, as this is not a
- // very common situation, we leave this for now to avoid further
- // complexity increases.
- if (isUsedForIndirectHoistedLoad(this, BasePtrSAI))
- continue;
-
- replaceBasePtrArrays(this, BasePtrSAI, CanonicalBasePtrSAI);
- }
- }
-}
-
ScopArrayInfo *Scop::getOrCreateScopArrayInfo(Value *BasePtr, Type *ElementType,
ArrayRef<const SCEV *> Sizes,
MemoryKind Kind,
OpenPOWER on IntegriCloud