diff options
| author | Geoff Berry <gberry@codeaurora.org> | 2016-08-08 18:27:22 +0000 |
|---|---|---|
| committer | Geoff Berry <gberry@codeaurora.org> | 2016-08-08 18:27:22 +0000 |
| commit | 290a13e7c755e7e8d6be450efc63b8fcea417b86 (patch) | |
| tree | 3e996d9cf1f9951938bce881bb54691b676196ff | |
| parent | d9e66689288ec0d50078ed93178ac7dcbf3ef352 (diff) | |
| download | bcm5719-llvm-290a13e7c755e7e8d6be450efc63b8fcea417b86.tar.gz bcm5719-llvm-290a13e7c755e7e8d6be450efc63b8fcea417b86.zip | |
[MemorySSA] Fix windows build breakage caused by r278028
r278028: [MemorySSA] Ensure address stability of MemorySSA object.
llvm-svn: 278035
| -rw-r--r-- | llvm/include/llvm/Transforms/Utils/MemorySSA.h | 9 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Utils/MemorySSA.cpp | 8 |
2 files changed, 12 insertions, 5 deletions
diff --git a/llvm/include/llvm/Transforms/Utils/MemorySSA.h b/llvm/include/llvm/Transforms/Utils/MemorySSA.h index b356e8ad1c3..481ab1861c7 100644 --- a/llvm/include/llvm/Transforms/Utils/MemorySSA.h +++ b/llvm/include/llvm/Transforms/Utils/MemorySSA.h @@ -675,7 +675,14 @@ class MemorySSAAnalysis : public AnalysisInfoMixin<MemorySSAAnalysis> { static char PassID; public: - typedef std::unique_ptr<MemorySSA> Result; + // Wrap MemorySSA result to ensure address stability of internal MemorySSA + // pointers after construction. Use a wrapper class instead of plain + // unique_ptr<MemorySSA> to avoid build breakage on MSVC. + struct Result { + Result(std::unique_ptr<MemorySSA> &&MSSA) : MSSA(std::move(MSSA)) {} + MemorySSA &getMSSA() { return *MSSA.get(); } + std::unique_ptr<MemorySSA> MSSA; + }; Result run(Function &F, AnalysisManager<Function> &AM); }; diff --git a/llvm/lib/Transforms/Utils/MemorySSA.cpp b/llvm/lib/Transforms/Utils/MemorySSA.cpp index f349958244e..2e1ba59a28c 100644 --- a/llvm/lib/Transforms/Utils/MemorySSA.cpp +++ b/llvm/lib/Transforms/Utils/MemorySSA.cpp @@ -2078,24 +2078,24 @@ bool MemorySSAPrinterLegacyPass::runOnFunction(Function &F) { char MemorySSAAnalysis::PassID; -std::unique_ptr<MemorySSA> +MemorySSAAnalysis::Result MemorySSAAnalysis::run(Function &F, AnalysisManager<Function> &AM) { auto &DT = AM.getResult<DominatorTreeAnalysis>(F); auto &AA = AM.getResult<AAManager>(F); - return make_unique<MemorySSA>(F, &AA, &DT); + return MemorySSAAnalysis::Result(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).getMSSA().print(OS); return PreservedAnalyses::all(); } PreservedAnalyses MemorySSAVerifierPass::run(Function &F, FunctionAnalysisManager &AM) { - AM.getResult<MemorySSAAnalysis>(F)->verifyMemorySSA(); + AM.getResult<MemorySSAAnalysis>(F).getMSSA().verifyMemorySSA(); return PreservedAnalyses::all(); } |

