diff options
author | Michael Kruse <llvm@meinersbur.de> | 2019-06-04 21:58:54 +0000 |
---|---|---|
committer | Michael Kruse <llvm@meinersbur.de> | 2019-06-04 21:58:54 +0000 |
commit | 06c801e153347d24ec7ce93f6ffbbc58b64a89ba (patch) | |
tree | 6c4fa525eb39849244ec02156a059fe344fa6db8 /polly/lib/Analysis/ScopInfo.cpp | |
parent | 2d37cb82f0e66e48f8970104e155a644038c45d5 (diff) | |
download | bcm5719-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.cpp | 70 |
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, |