diff --git a/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp b/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp --- a/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp +++ b/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp @@ -733,19 +733,22 @@ DominatorTree &DT = getAnalysis().getDomTree(); LoopInfo &LI = getAnalysis().getLoopInfo(); ScalarEvolution &SE = getAnalysis().getSE(); - MemorySSA *MSSA = &getAnalysis().getMSSA(); - MemorySSAUpdater MSSAU(MSSA); - if (VerifyMemorySSA) - MSSA->verifyMemorySSA(); + auto *MSSAA = getAnalysisIfAvailable(); + Optional MSSAU; + if (MSSAA) + MSSAU = MemorySSAUpdater(&MSSAA->getMSSA()); + if (MSSAA && VerifyMemorySSA) + MSSAU->getMemorySSA()->verifyMemorySSA(); bool DeleteCurrentLoop = false; - bool Changed = simplifyLoopCFG(*L, DT, LI, SE, &MSSAU, DeleteCurrentLoop); + bool Changed = simplifyLoopCFG( + *L, DT, LI, SE, MSSAU.hasValue() ? MSSAU.getPointer() : nullptr, + DeleteCurrentLoop); if (DeleteCurrentLoop) LPM.markLoopAsDeleted(*L); return Changed; } void getAnalysisUsage(AnalysisUsage &AU) const override { - AU.addRequired(); AU.addPreserved(); AU.addPreserved(); getLoopAnalysisUsage(AU);