diff options
| author | Adam Nemet <anemet@apple.com> | 2015-06-19 19:32:41 +0000 | 
|---|---|---|
| committer | Adam Nemet <anemet@apple.com> | 2015-06-19 19:32:41 +0000 | 
| commit | 772a150614970e7f5edabe5fd09ed1ca53db739d (patch) | |
| tree | a7e51178c6e45e49928868cdb5878d7e91ebe6b3 /llvm/lib/Transforms | |
| parent | 5b0f04a58955c433c4ce78e596736dbcb9a17272 (diff) | |
| download | bcm5719-llvm-772a150614970e7f5edabe5fd09ed1ca53db739d.tar.gz bcm5719-llvm-772a150614970e7f5edabe5fd09ed1ca53db739d.zip | |
[LoopDist] Move pointer-to-partition computation out of RuntimeCheckEmitter, NFC
This starts preparing the class to become a (more) general
LoopVersioning utility class.
llvm-svn: 240164
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/LoopDistribute.cpp | 30 | 
1 files changed, 12 insertions, 18 deletions
| diff --git a/llvm/lib/Transforms/Scalar/LoopDistribute.cpp b/llvm/lib/Transforms/Scalar/LoopDistribute.cpp index a907d596e35..7e9efa25070 100644 --- a/llvm/lib/Transforms/Scalar/LoopDistribute.cpp +++ b/llvm/lib/Transforms/Scalar/LoopDistribute.cpp @@ -633,23 +633,14 @@ private:  class RuntimeCheckEmitter {  public:    RuntimeCheckEmitter(const LoopAccessInfo &LAI, Loop *L, LoopInfo *LI, -                      DominatorTree *DT) -      : OrigLoop(L), NonDistributedLoop(nullptr), LAI(LAI), LI(LI), DT(DT) {} - -  /// \brief Given the \p Partitions formed by Loop Distribution, it determines -  /// in which partition each pointer is used. -  void partitionPointers(InstPartitionContainer &Partitions) { -    // Set up partition id in PtrRtChecks.  Ptr -> Access -> Intruction -> -    // Partition. -    PtrToPartition = Partitions.computePartitionSetForPointers(LAI); - -    DEBUG(dbgs() << "\nPointers:\n"); -    DEBUG(LAI.getRuntimePointerCheck()->print(dbgs(), 0, &PtrToPartition)); -  } +                      DominatorTree *DT, +                      const SmallVector<int, 8> *PtrToPartition = nullptr) +      : OrigLoop(L), NonDistributedLoop(nullptr), +        PtrToPartition(PtrToPartition), LAI(LAI), LI(LI), DT(DT) {}    /// \brief Returns true if we need memchecks to distribute the loop.    bool needsRuntimeChecks() const { -    return LAI.getRuntimePointerCheck()->needsAnyChecking(&PtrToPartition); +    return LAI.getRuntimePointerCheck()->needsAnyChecking(PtrToPartition);    }    /// \brief Performs the CFG manipulation part of versioning the loop including @@ -660,7 +651,7 @@ public:      // Add the memcheck in the original preheader (this is empty initially).      BasicBlock *MemCheckBB = OrigLoop->getLoopPreheader();      std::tie(FirstCheckInst, MemRuntimeCheck) = -        LAI.addRuntimeCheck(MemCheckBB->getTerminator(), &PtrToPartition); +        LAI.addRuntimeCheck(MemCheckBB->getTerminator(), PtrToPartition);      assert(MemRuntimeCheck && "called even though needsAnyChecking = false");      // Rename the block to make the IR more readable. @@ -733,10 +724,11 @@ private:    Loop *NonDistributedLoop;    /// \brief For each memory pointer it contains the partitionId it is used in. +  /// If nullptr, no partitioning is used.    ///    /// The I-th entry corresponds to I-th entry in LAI.getRuntimePointerCheck().    /// If the pointer is used in multiple partitions the entry is set to -1. -  SmallVector<int, 8> PtrToPartition; +  const SmallVector<int, 8> *PtrToPartition;    /// \brief This maps the instructions from OrigLoop to their counterpart in    /// NonDistributedLoop. @@ -929,9 +921,11 @@ private:      // If we need run-time checks to disambiguate pointers are run-time, version      // the loop now. -    RuntimeCheckEmitter RtCheckEmitter(LAI, L, LI, DT); -    RtCheckEmitter.partitionPointers(Partitions); +    auto PtrToPartition = Partitions.computePartitionSetForPointers(LAI); +    RuntimeCheckEmitter RtCheckEmitter(LAI, L, LI, DT, &PtrToPartition);      if (RtCheckEmitter.needsRuntimeChecks()) { +      DEBUG(dbgs() << "\nPointers:\n"); +      DEBUG(LAI.getRuntimePointerCheck()->print(dbgs(), 0, &PtrToPartition));        RtCheckEmitter.versionLoop(this);        RtCheckEmitter.addPHINodes(DefsUsedOutside);      } | 

