Skip to content

Commit

Permalink
[LDist][LVer] Explicitly pass the set of memchecks to LoopVersioning,…
Browse files Browse the repository at this point in the history
… NFC

Before the patch, the checks were generated internally in
addRuntimeCheck.  Now, we use the new overloaded version of
addRuntimeCheck that takes the ready-made set of checks as a parameter.

The checks are now generated by the client (LoopDistribution) with the
new RuntimePointerChecking::generateChecks API.

Also the new printChecks API is used to print out the checks for
debugging.

This is to continue the transition over to the new model whereby clients
will get the full set of checks from LAA, filter it and then pass it to
LoopVersioning and in turn to addRuntimeCheck.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243382 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
anemet committed Jul 28, 2015
1 parent 80458cb commit bd426c6
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 9 deletions.
6 changes: 5 additions & 1 deletion include/llvm/Transforms/Utils/LoopVersioning.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ class LoopInfo;
/// already has a preheader.
class LoopVersioning {
public:
LoopVersioning(const LoopAccessInfo &LAI, Loop *L, LoopInfo *LI,
LoopVersioning(SmallVector<RuntimePointerChecking::PointerCheck, 4> Checks,
const LoopAccessInfo &LAI, Loop *L, LoopInfo *LI,
DominatorTree *DT,
const SmallVector<int, 8> *PtrToPartition = nullptr);

Expand Down Expand Up @@ -90,6 +91,9 @@ class LoopVersioning {
/// in NonVersionedLoop.
ValueToValueMapTy VMap;

/// \brief The set of checks that we are versioning for.
SmallVector<RuntimePointerChecking::PointerCheck, 4> Checks;

/// \brief Analyses used.
const LoopAccessInfo &LAI;
LoopInfo *LI;
Expand Down
8 changes: 5 additions & 3 deletions lib/Transforms/Scalar/LoopDistribute.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -747,10 +747,12 @@ class LoopDistribute : public FunctionPass {
// If we need run-time checks to disambiguate pointers are run-time, version
// the loop now.
auto PtrToPartition = Partitions.computePartitionSetForPointers(LAI);
LoopVersioning LVer(LAI, L, LI, DT, &PtrToPartition);
if (LVer.needsRuntimeChecks()) {
auto Checks =
LAI.getRuntimePointerChecking()->generateChecks(&PtrToPartition);
if (!Checks.empty()) {
DEBUG(dbgs() << "\nPointers:\n");
DEBUG(LAI.getRuntimePointerChecking()->print(dbgs(), 0, &PtrToPartition));
DEBUG(LAI.getRuntimePointerChecking()->printChecks(dbgs(), Checks));
LoopVersioning LVer(std::move(Checks), LAI, L, LI, DT);
LVer.versionLoop(this);
LVer.addPHINodes(DefsUsedOutside);
}
Expand Down
11 changes: 6 additions & 5 deletions lib/Transforms/Utils/LoopVersioning.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,12 @@

using namespace llvm;

LoopVersioning::LoopVersioning(const LoopAccessInfo &LAI, Loop *L, LoopInfo *LI,
DominatorTree *DT,
const SmallVector<int, 8> *PtrToPartition)
LoopVersioning::LoopVersioning(
SmallVector<RuntimePointerChecking::PointerCheck, 4> Checks,
const LoopAccessInfo &LAI, Loop *L, LoopInfo *LI, DominatorTree *DT,
const SmallVector<int, 8> *PtrToPartition)
: VersionedLoop(L), NonVersionedLoop(nullptr),
PtrToPartition(PtrToPartition), LAI(LAI), LI(LI), DT(DT) {
PtrToPartition(PtrToPartition), Checks(Checks), LAI(LAI), LI(LI), DT(DT) {
assert(L->getExitBlock() && "No single exit block");
assert(L->getLoopPreheader() && "No preheader");
}
Expand All @@ -41,7 +42,7 @@ void LoopVersioning::versionLoop(Pass *P) {
// Add the memcheck in the original preheader (this is empty initially).
BasicBlock *MemCheckBB = VersionedLoop->getLoopPreheader();
std::tie(FirstCheckInst, MemRuntimeCheck) =
LAI.addRuntimeCheck(MemCheckBB->getTerminator(), PtrToPartition);
LAI.addRuntimeCheck(MemCheckBB->getTerminator(), Checks);
assert(MemRuntimeCheck && "called even though needsAnyChecking = false");

// Rename the block to make the IR more readable.
Expand Down

0 comments on commit bd426c6

Please sign in to comment.