From 4230f40add2157100e2c0b94f98b04670a02d621 Mon Sep 17 00:00:00 2001 From: Misha Brukman Date: Fri, 12 Mar 2004 06:16:28 +0000 Subject: [PATCH] Keep transitively-required passes alive for queries to work after the initial user pass is destroyed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12332 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/PassManagerT.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/VMCore/PassManagerT.h b/lib/VMCore/PassManagerT.h index 5ffaebdd786..af5544cd98d 100644 --- a/lib/VMCore/PassManagerT.h +++ b/lib/VMCore/PassManagerT.h @@ -208,7 +208,6 @@ public: E = LastUseOf.end(); I != E; ++I) LastUserOf[I->second].push_back(I->first); - // Output debug information... if (Parent == 0) PMDebug::PerformPassStartupStuff(this); @@ -397,6 +396,16 @@ public: if (I != CurrentAnalyses.end()) { LastUseOf[I->second] = User; // Local pass, extend the lifetime + + // Prolong live range of analyses that are needed after an analysis pass + // is destroyed, for querying by subsequent passes + AnalysisUsage AnUsage; + I->second->getAnalysisUsage(AnUsage); + const std::vector &IDs = AnUsage.getRequiredTransitiveSet(); + for (std::vector::const_iterator i = IDs.begin(), + e = IDs.end(); i != e; ++i) + markPassUsed(*i, User); + } else { // Pass not in current available set, must be a higher level pass // available to us, propagate to parent pass manager... We tell the