diff options
author | Evgeny Astigeevich <evgeny.astigeevich@arm.com> | 2016-10-14 23:00:36 +0000 |
---|---|---|
committer | Evgeny Astigeevich <evgeny.astigeevich@arm.com> | 2016-10-14 23:00:36 +0000 |
commit | 48fd87e4aade5ce15b4d4296f330a5bc8971b508 (patch) | |
tree | 483863217c3ac94d87ad4fd08c9cdcf8910d83f9 /llvm/lib/Transforms/Scalar/LoopVersioningLICM.cpp | |
parent | d2003575ce98dc5c2c1539bc3ccded0625078201 (diff) | |
download | bcm5719-llvm-48fd87e4aade5ce15b4d4296f330a5bc8971b508.tar.gz bcm5719-llvm-48fd87e4aade5ce15b4d4296f330a5bc8971b508.zip |
[NFC] Loop Versioning for LICM code clean up
- Removed unused class members.
- Made class internal data private.
- Made class scoped data function scoped where it's possible.
- Replace naked new/delete with unique_ptr.
- Made resources guaranteed to be freed.
Differential Revision: https://reviews.llvm.org/D25464
llvm-svn: 284290
Diffstat (limited to 'llvm/lib/Transforms/Scalar/LoopVersioningLICM.cpp')
-rw-r--r-- | llvm/lib/Transforms/Scalar/LoopVersioningLICM.cpp | 73 |
1 files changed, 42 insertions, 31 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopVersioningLICM.cpp b/llvm/lib/Transforms/Scalar/LoopVersioningLICM.cpp index 3942553ffdf..aa09f894310 100644 --- a/llvm/lib/Transforms/Scalar/LoopVersioningLICM.cpp +++ b/llvm/lib/Transforms/Scalar/LoopVersioningLICM.cpp @@ -92,8 +92,7 @@ #include "llvm/Transforms/Utils/ValueMapper.h" #define DEBUG_TYPE "loop-versioning-licm" -static const char* LICMVersioningMetaData = - "llvm.loop.licm_versioning.disable"; +static const char *LICMVersioningMetaData = "llvm.loop.licm_versioning.disable"; using namespace llvm; @@ -158,34 +157,48 @@ struct LoopVersioningLICM : public LoopPass { AU.addRequired<LoopInfoWrapperPass>(); AU.addRequiredID(LoopSimplifyID); AU.addRequired<ScalarEvolutionWrapperPass>(); - AU.addRequired<TargetLibraryInfoWrapperPass>(); AU.addPreserved<AAResultsWrapperPass>(); AU.addPreserved<GlobalsAAWrapperPass>(); } LoopVersioningLICM() - : LoopPass(ID), AA(nullptr), SE(nullptr), LI(nullptr), DT(nullptr), - TLI(nullptr), LAA(nullptr), LAI(nullptr), Changed(false), - Preheader(nullptr), CurLoop(nullptr), CurAST(nullptr), - LoopDepthThreshold(LVLoopDepthThreshold), + : LoopPass(ID), AA(nullptr), SE(nullptr), LAA(nullptr), LAI(nullptr), + CurLoop(nullptr), LoopDepthThreshold(LVLoopDepthThreshold), InvariantThreshold(LVInvarThreshold), LoadAndStoreCounter(0), InvariantCounter(0), IsReadOnlyLoop(true) { initializeLoopVersioningLICMPass(*PassRegistry::getPassRegistry()); } + StringRef getPassName() const override { return "Loop Versioning for LICM"; } - AliasAnalysis *AA; // Current AliasAnalysis information - ScalarEvolution *SE; // Current ScalarEvolution - LoopInfo *LI; // Current LoopInfo - DominatorTree *DT; // Dominator Tree for the current Loop. - TargetLibraryInfo *TLI; // TargetLibraryInfo for constant folding. - LoopAccessLegacyAnalysis *LAA; // Current LoopAccessAnalysis - const LoopAccessInfo *LAI; // Current Loop's LoopAccessInfo + void reset() { + AA = nullptr; + SE = nullptr; + LAA = nullptr; + CurLoop = nullptr; + LoadAndStoreCounter = 0; + InvariantCounter = 0; + IsReadOnlyLoop = true; + CurAST.reset(); + } + + class AutoResetter { + public: + AutoResetter(LoopVersioningLICM &LVLICM) : LVLICM(LVLICM) {} + ~AutoResetter() { LVLICM.reset(); } + + private: + LoopVersioningLICM &LVLICM; + }; + +private: + AliasAnalysis *AA; // Current AliasAnalysis information + ScalarEvolution *SE; // Current ScalarEvolution + LoopAccessLegacyAnalysis *LAA; // Current LoopAccessAnalysis + const LoopAccessInfo *LAI; // Current Loop's LoopAccessInfo - bool Changed; // Set to true when we change anything. - BasicBlock *Preheader; // The preheader block of the current loop. - Loop *CurLoop; // The current loop we are working on. - AliasSetTracker *CurAST; // AliasSet information for the current loop. - ValueToValueMap Strides; + Loop *CurLoop; // The current loop we are working on. + std::unique_ptr<AliasSetTracker> + CurAST; // AliasSet information for the current loop. unsigned LoopDepthThreshold; // Maximum loop nest threshold float InvariantThreshold; // Minimum invariant threshold @@ -200,7 +213,6 @@ struct LoopVersioningLICM : public LoopPass { bool isLoopAlreadyVisited(); void setNoAliasToLoop(Loop *); bool instructionSafeForVersioning(Instruction *); - StringRef getPassName() const override { return "Loop Versioning"; } }; } @@ -505,29 +517,30 @@ void LoopVersioningLICM::setNoAliasToLoop(Loop *VerLoop) { } bool LoopVersioningLICM::runOnLoop(Loop *L, LPPassManager &LPM) { + // This will automatically release all resources hold by the current + // LoopVersioningLICM object. + AutoResetter Resetter(*this); + if (skipLoop(L)) return false; - Changed = false; // Get Analysis information. - LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo(); AA = &getAnalysis<AAResultsWrapperPass>().getAAResults(); SE = &getAnalysis<ScalarEvolutionWrapperPass>().getSE(); - DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree(); - TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI(); LAA = &getAnalysis<LoopAccessLegacyAnalysis>(); LAI = nullptr; // Set Current Loop CurLoop = L; - // Get the preheader block. - Preheader = L->getLoopPreheader(); - // Initial allocation - CurAST = new AliasSetTracker(*AA); + CurAST.reset(new AliasSetTracker(*AA)); // Loop over the body of this loop, construct AST. + LoopInfo *LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo(); for (auto *Block : L->getBlocks()) { if (LI->getLoopFor(Block) == L) // Ignore blocks in subloop. CurAST->add(*Block); // Incorporate the specified basic block } + + bool Changed = false; + // Check feasiblity of LoopVersioningLICM. // If versioning found to be feasible and beneficial then proceed // else simply return, by cleaning up memory. @@ -535,6 +548,7 @@ bool LoopVersioningLICM::runOnLoop(Loop *L, LPPassManager &LPM) { // Do loop versioning. // Create memcheck for memory accessed inside loop. // Clone original loop, and set blocks properly. + DominatorTree *DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree(); LoopVersioning LVer(*LAI, CurLoop, LI, DT, SE, true); LVer.versionLoop(); // Set Loop Versioning metaData for original loop. @@ -548,8 +562,6 @@ bool LoopVersioningLICM::runOnLoop(Loop *L, LPPassManager &LPM) { setNoAliasToLoop(LVer.getVersionedLoop()); Changed = true; } - // Delete allocated memory. - delete CurAST; return Changed; } @@ -564,7 +576,6 @@ INITIALIZE_PASS_DEPENDENCY(LoopAccessLegacyAnalysis) INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass) INITIALIZE_PASS_DEPENDENCY(LoopSimplify) INITIALIZE_PASS_DEPENDENCY(ScalarEvolutionWrapperPass) -INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfoWrapperPass) INITIALIZE_PASS_END(LoopVersioningLICM, "loop-versioning-licm", "Loop Versioning For LICM", false, false) |