Changes in directory llvm/lib/VMCore:
PassManager.cpp updated: 1.102 -> 1.103 --- Log message: s/ForcedLastUses/TransferLastUses/g Register pass has the its last user, otherwise sometimes no one will claim LastUse. Handle transferred last uses from child pass manager. --- Diffs of the changes: (+26 -12) PassManager.cpp | 38 ++++++++++++++++++++++++++------------ 1 files changed, 26 insertions(+), 12 deletions(-) Index: llvm/lib/VMCore/PassManager.cpp diff -u llvm/lib/VMCore/PassManager.cpp:1.102 llvm/lib/VMCore/PassManager.cpp:1.103 --- llvm/lib/VMCore/PassManager.cpp:1.102 Thu Dec 14 12:22:14 2006 +++ llvm/lib/VMCore/PassManager.cpp Thu Dec 14 18:08:26 2006 @@ -250,7 +250,7 @@ /// Initialize available analysis information. void initializeAnalysisInfo() { - ForcedLastUses.clear(); + TransferLastUses.clear(); AvailableAnalysis.clear(); } @@ -330,12 +330,18 @@ cerr << "\n"; } } + + std::vector<Pass *>& getTransferredLastUses() { + return TransferLastUses; + } + protected: - // Collection of pass whose last user asked this manager to claim - // last use. If a FunctionPass F is the last user of ModulePass info M + // If a FunctionPass F is the last user of ModulePass info M // then the F's manager, not F, records itself as a last user of M. - std::vector<Pass *> ForcedLastUses; + // Current pass manage is requesting parent manager to record parent + // manager as the last user of these TrransferLastUses passes. + std::vector<Pass *> TransferLastUses; // Top level manager. PMTopLevelManager *TPM; @@ -853,7 +859,7 @@ LastUses.push_back(PRequired); else if (PDepth > RDepth) { // Let the parent claim responsibility of last use - ForcedLastUses.push_back(PRequired); + TransferLastUses.push_back(PRequired); } else { // Note : This feature is not yet implemented assert (0 && @@ -861,8 +867,8 @@ } } - if (!LastUses.empty()) - TPM->setLastUser(LastUses, P); + LastUses.push_back(P); + TPM->setLastUser(LastUses, P); // Take a note of analysis required and made available by this pass. // Remove the analysis not preserved by this pass @@ -1161,10 +1167,14 @@ // Add pass into new manager. This time it must succeed. if (!activeBBPassManager->addPass(BP)) assert(0 && "Unable to add Pass"); + + // If activeBBPassManager transfered any Last Uses then handle them here. + std::vector<Pass *> &TLU = activeBBPassManager->getTransferredLastUses(); + if (!TLU.empty()) + TPM->setLastUser(TLU, this); + } - if (!ForcedLastUses.empty()) - TPM->setLastUser(ForcedLastUses, this); return true; } @@ -1326,10 +1336,14 @@ // Add pass into new manager. This time it must succeed. if (!activeFunctionPassManager->addPass(FP)) assert(0 && "Unable to add pass"); - } - if (!ForcedLastUses.empty()) - TPM->setLastUser(ForcedLastUses, this); + // If activeFunctionPassManager transfered any Last Uses then + // handle them here. + std::vector<Pass *> &TLU = + activeFunctionPassManager->getTransferredLastUses(); + if (!TLU.empty()) + TPM->setLastUser(TLU, this); + } return true; } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits