diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -14021,6 +14021,22 @@ } } } + + // Verify integrity of the block disposition cache. + for (const auto &It : BlockDispositions) { + const SCEV *S = It.first; + auto &Values = It.second; + for (auto &V : Values) { + auto CachedDisposition = V.getInt(); + const BasicBlock *BB = V.getPointer(); + const auto RecomputedDisposition = SE2.getBlockDisposition(S, BB); + if (CachedDisposition != RecomputedDisposition) { + dbgs() << "Cached disposition of " << *S << " for block %" + << BB->getName() << " is incorrect! \n"; + std::abort(); + } + } + } } bool ScalarEvolution::invalidate(