diff options
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Utils/MemorySSA.cpp | 30 | 
1 files changed, 13 insertions, 17 deletions
| diff --git a/llvm/lib/Transforms/Utils/MemorySSA.cpp b/llvm/lib/Transforms/Utils/MemorySSA.cpp index 234d1af569c..f349958244e 100644 --- a/llvm/lib/Transforms/Utils/MemorySSA.cpp +++ b/llvm/lib/Transforms/Utils/MemorySSA.cpp @@ -1025,6 +1025,8 @@ public:  #endif      return Result;    } + +  void verify(const MemorySSA *MSSA) { assert(MSSA == &this->MSSA); }  };  struct RenamePassData { @@ -1104,6 +1106,11 @@ public:    /// earliest-MemoryAccess-we-can-optimize-to". This is necessary if we're    /// going to have DT updates, if we remove MemoryAccesses, etc.    void resetClobberWalker() { Walker.reset(); } + +  void verify(const MemorySSA *MSSA) override { +    MemorySSAWalker::verify(MSSA); +    Walker.verify(MSSA); +  }  };  /// \brief Rename a single basic block into MemorySSA form. @@ -1231,19 +1238,6 @@ MemorySSA::MemorySSA(Function &Func, AliasAnalysis *AA, DominatorTree *DT)    buildMemorySSA();  } -MemorySSA::MemorySSA(MemorySSA &&MSSA) -    : AA(MSSA.AA), DT(MSSA.DT), F(MSSA.F), -      ValueToMemoryAccess(std::move(MSSA.ValueToMemoryAccess)), -      PerBlockAccesses(std::move(MSSA.PerBlockAccesses)), -      LiveOnEntryDef(std::move(MSSA.LiveOnEntryDef)), -      BlockNumberingValid(std::move(MSSA.BlockNumberingValid)), -      BlockNumbering(std::move(MSSA.BlockNumbering)), -      Walker(std::move(MSSA.Walker)), NextID(MSSA.NextID) { -  // Update the Walker MSSA pointer so it doesn't point to the moved-from MSSA -  // object any more. -  Walker->MSSA = this; -} -  MemorySSA::~MemorySSA() {    // Drop all our references    for (const auto &Pair : PerBlockAccesses) @@ -1818,6 +1812,7 @@ void MemorySSA::verifyMemorySSA() const {    verifyDefUses(F);    verifyDomination(F);    verifyOrdering(F); +  Walker->verify(this);  }  /// \brief Verify that the order and existence of MemoryAccesses matches the @@ -2083,23 +2078,24 @@ bool MemorySSAPrinterLegacyPass::runOnFunction(Function &F) {  char MemorySSAAnalysis::PassID; -MemorySSA MemorySSAAnalysis::run(Function &F, AnalysisManager<Function> &AM) { +std::unique_ptr<MemorySSA> +MemorySSAAnalysis::run(Function &F, AnalysisManager<Function> &AM) {    auto &DT = AM.getResult<DominatorTreeAnalysis>(F);    auto &AA = AM.getResult<AAManager>(F); -  return MemorySSA(F, &AA, &DT); +  return make_unique<MemorySSA>(F, &AA, &DT);  }  PreservedAnalyses MemorySSAPrinterPass::run(Function &F,                                              FunctionAnalysisManager &AM) {    OS << "MemorySSA for function: " << F.getName() << "\n"; -  AM.getResult<MemorySSAAnalysis>(F).print(OS); +  AM.getResult<MemorySSAAnalysis>(F)->print(OS);    return PreservedAnalyses::all();  }  PreservedAnalyses MemorySSAVerifierPass::run(Function &F,                                               FunctionAnalysisManager &AM) { -  AM.getResult<MemorySSAAnalysis>(F).verifyMemorySSA(); +  AM.getResult<MemorySSAAnalysis>(F)->verifyMemorySSA();    return PreservedAnalyses::all();  } | 

