[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-06-18 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.157 - 1.158
---
Log message:

Fix quotes in debug messages.


---
Diffs of the changes:  (+6 -6)

 PassManager.cpp |   12 ++--
 1 files changed, 6 insertions(+), 6 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.157 
llvm/lib/VMCore/PassManager.cpp:1.158
--- llvm/lib/VMCore/PassManager.cpp:1.157   Wed May 23 00:08:52 2007
+++ llvm/lib/VMCore/PassManager.cpp Mon Jun 18 16:32:29 2007
@@ -850,7 +850,7 @@
 cerr  Executing Pass '  P-getPassName();
 break;
   case MODIFICATION_MSG:
-cerr  ' Made Modification '  P-getPassName();
+cerr  Made Modification '  P-getPassName();
 break;
   case FREEING_MSG:
 cerr   Freeing Pass '  P-getPassName();
@@ -860,19 +860,19 @@
   }
   switch (S2) {
   case ON_BASICBLOCK_MSG:
-cerr  ' on BasicBlock '  Msg  ...\n;
+cerr  ' on BasicBlock '  Msg  '...\n;
 break;
   case ON_FUNCTION_MSG:
-cerr  ' on Function '  Msg  ...\n;
+cerr  ' on Function '  Msg  '...\n;
 break;
   case ON_MODULE_MSG:
-cerr  ' on Module '   Msg  ...\n;
+cerr  ' on Module '   Msg  '...\n;
 break;
   case ON_LOOP_MSG:
-cerr  ' on Loop   Msg  ...\n;
+cerr  ' on Loop   Msg  '...\n;
 break;
   case ON_CG_MSG:
-cerr  ' on Call Graph   Msg  ...\n;
+cerr  ' on Call Graph   Msg  '...\n;
 break;
   default:
 break;



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-05-22 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.156 - 1.157
---
Log message:

If user wants to run instcombine twice, do not block it.


---
Diffs of the changes:  (+0 -5)

 PassManager.cpp |5 -
 1 files changed, 5 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.156 
llvm/lib/VMCore/PassManager.cpp:1.157
--- llvm/lib/VMCore/PassManager.cpp:1.156   Wed May  2 20:11:54 2007
+++ llvm/lib/VMCore/PassManager.cpp Wed May 23 00:08:52 2007
@@ -419,11 +419,6 @@
   // TODO : Allocate function manager for this pass, other wise required set
   // may be inserted into previous function manager
 
-  // If this Analysis is already requested by one of the previous pass
-  // and it is still available then do not insert new pass in the queue again.
-  if (findAnalysisPass(P-getPassInfo()))
-  return;
-
   // Give pass a chance to prepare the stage.
   P-preparePassManager(activeStack);
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-04-26 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.152 - 1.153
---
Log message:

Use toplevel function pass manager as OnTheFly manager.


---
Diffs of the changes:  (+17 -10)

 PassManager.cpp |   27 +--
 1 files changed, 17 insertions(+), 10 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.152 
llvm/lib/VMCore/PassManager.cpp:1.153
--- llvm/lib/VMCore/PassManager.cpp:1.152   Mon Apr 16 15:56:24 2007
+++ llvm/lib/VMCore/PassManager.cpp Thu Apr 26 12:50:19 2007
@@ -183,10 +183,10 @@
 
   // Delete on the fly managers.
   virtual ~MPPassManager() {
-for (std::mapPass *, FPPassManager *::iterator 
+for (std::mapPass *, FunctionPassManagerImpl *::iterator 
I = OnTheFlyManagers.begin(), E = OnTheFlyManagers.end();
  I != E; ++I) {
-  FPPassManager *FPP = I-second;
+  FunctionPassManagerImpl *FPP = I-second;
   delete FPP;
 }
   }
@@ -220,7 +220,7 @@
 for (unsigned Index = 0; Index  getNumContainedPasses(); ++Index) {
   ModulePass *MP = getContainedPass(Index);
   MP-dumpPassStructure(Offset + 1);
-  if (FPPassManager *FPP = OnTheFlyManagers[MP])
+  if (FunctionPassManagerImpl *FPP = OnTheFlyManagers[MP])
 FPP-dumpPassStructure(Offset + 2);
   dumpLastUses(MP, Offset+1);
 }
@@ -239,7 +239,7 @@
  private:
   /// Collection of on the fly FPPassManagers. These managers manage
   /// function passes that are required by module passes.
-  std::mapPass *, FPPassManager * OnTheFlyManagers;
+  std::mapPass *, FunctionPassManagerImpl * OnTheFlyManagers;
 };
 
 
//===--===//
@@ -1227,13 +1227,20 @@
RequiredPass-getPotentialPassManagerType())
Unable to handle Pass that requires lower level Analysis pass);
 
-  FPPassManager *FPP = OnTheFlyManagers[P];
+  FunctionPassManagerImpl *FPP = OnTheFlyManagers[P];
   if (!FPP) {
-FPP = new FPPassManager(getDepth() + 1);
+FPP = new FunctionPassManagerImpl(0);
+// FPP is the top level manager.
+FPP-setTopLevelManager(FPP);
+
 OnTheFlyManagers[P] = FPP;
   }
+  FPP-add(RequiredPass);
 
-  FPP-add(RequiredPass, false);
+  // Register P as the last user of RequiredPass.
+  std::vectorPass * LU; 
+  LU.push_back(RequiredPass);
+  FPP-setLastUser(LU,  P);
 }
 
 /// Return function pass corresponding to PassInfo PI, that is 
@@ -1242,11 +1249,11 @@
 Pass* MPPassManager::getOnTheFlyPass(Pass *MP, const PassInfo *PI, 
  Function F) {
AnalysisID AID = PI;
-  FPPassManager *FPP =OnTheFlyManagers[MP];
+  FunctionPassManagerImpl *FPP = OnTheFlyManagers[MP];
   assert (FPP  Unable to find on the fly pass);
   
-  FPP-runOnFunction(F);
-  return FPP-findAnalysisPass(AID, false);
+  FPP-run(F);
+  return (dynamic_castPMTopLevelManager *(FPP))-findAnalysisPass(AID);
 }
 
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-04-16 Thread Anton Korobeynikov


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.146 - 1.147
---
Log message:

Removed tabs everywhere except autogenerated  external files. Add make 
target for tabs checking.


---
Diffs of the changes:  (+3 -3)

 PassManager.cpp |6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.146 
llvm/lib/VMCore/PassManager.cpp:1.147
--- llvm/lib/VMCore/PassManager.cpp:1.146   Thu Mar  8 13:05:01 2007
+++ llvm/lib/VMCore/PassManager.cpp Mon Apr 16 13:10:23 2007
@@ -1293,7 +1293,7 @@
 /// Find appropriate Module Pass Manager in the PM Stack and
 /// add self into that manager. 
 void ModulePass::assignPassManager(PMStack PMS, 
-  PassManagerType PreferredType) {
+   PassManagerType PreferredType) {
 
   // Find Module Pass Manager
   while(!PMS.empty()) {
@@ -1312,7 +1312,7 @@
 /// Find appropriate Function Pass Manager or Call Graph Pass Manager
 /// in the PM Stack and add self into that manager. 
 void FunctionPass::assignPassManager(PMStack PMS,
-PassManagerType PreferredType) {
+ PassManagerType PreferredType) {
 
   // Find Module Pass Manager (TODO : Or Call Graph Pass Manager)
   while(!PMS.empty()) {
@@ -1357,7 +1357,7 @@
 /// Find appropriate Basic Pass Manager or Call Graph Pass Manager
 /// in the PM Stack and add self into that manager. 
 void BasicBlockPass::assignPassManager(PMStack PMS,
-  PassManagerType PreferredType) {
+   PassManagerType PreferredType) {
 
   BBPassManager *BBP = NULL;
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-04-16 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.147 - 1.148
---
Log message:

Give each pass manager chance to manage lower level analysis pass, which is
pass required by one of pass managed by the manager.


---
Diffs of the changes:  (+60 -20)

 PassManager.cpp |   80 ++--
 1 files changed, 60 insertions(+), 20 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.147 
llvm/lib/VMCore/PassManager.cpp:1.148
--- llvm/lib/VMCore/PassManager.cpp:1.147   Mon Apr 16 13:10:23 2007
+++ llvm/lib/VMCore/PassManager.cpp Mon Apr 16 15:12:57 2007
@@ -190,6 +190,11 @@
 Info.setPreservesAll();
   }
 
+  /// Add RequiredPass into list of lower level passes required by pass P.
+  /// RequiredPass is run on the fly by Pass Manager when P requests it
+  /// through getAnalysis interface.
+  virtual void addLowerLevelRequiredPass(Pass *P, Pass *RequiredPass);
+
   virtual const char *getPassName() const {
 return Module Pass Manager;
   }
@@ -400,9 +405,14 @@
 
 Pass *AnalysisPass = findAnalysisPass(*I);
 if (!AnalysisPass) {
-  // Schedule this analysis run first.
   AnalysisPass = (*I)-createPass();
-  schedulePass(AnalysisPass);
+  // Schedule this analysis run first only if it is not a lower level
+  // analysis pass. Lower level analsyis passes are run on the fly.
+  if (P-getPotentialPassManagerType () =
+  AnalysisPass-getPotentialPassManagerType())
+schedulePass(AnalysisPass);
+  else
+delete AnalysisPass;
 }
   }
 
@@ -642,11 +652,14 @@
 
 // At the moment, this pass is the last user of all required passes.
 std::vectorPass * LastUses;
-std::vectorPass * RequiredPasses;
+SmallVectorPass *, 8 RequiredPasses;
+SmallVectorAnalysisID, 8 ReqAnalysisNotAvailable;
+
 unsigned PDepth = this-getDepth();
 
-collectRequiredAnalysisPasses(RequiredPasses, P);
-for (std::vectorPass *::iterator I = RequiredPasses.begin(),
+collectRequiredAnalysis(RequiredPasses, 
+ReqAnalysisNotAvailable, P);
+for (SmallVectorPass *, 8::iterator I = RequiredPasses.begin(),
E = RequiredPasses.end(); I != E; ++I) {
   Pass *PRequired = *I;
   unsigned RDepth = 0;
@@ -661,11 +674,16 @@
 TransferLastUses.push_back(PRequired);
 // Keep track of higher level analysis used by this manager.
 HigherLevelAnalysis.push_back(PRequired);
-  } else {
-// Note : This feature is not yet implemented
-assert (0  
-Unable to handle Pass that requires lower level Analysis 
pass);
-  }
+  } else 
+assert (0  Unable to accomodate Required Pass);
+}
+
+// Now, take care of required analysises that are not available.
+for (SmallVectorAnalysisID, 8::iterator 
+   I = ReqAnalysisNotAvailable.begin(), 
+   E = ReqAnalysisNotAvailable.end() ;I != E; ++I) {
+  Pass *AnalysisPass = (*I)-createPass();
+  this-addLowerLevelRequiredPass(P, AnalysisPass);
 }
 
 // Set P as P's last user until someone starts using P.
@@ -691,27 +709,34 @@
   PassVector.push_back(P);
 }
 
-/// Populate RequiredPasses with the analysis pass that are required by
-/// pass P.
-void PMDataManager::collectRequiredAnalysisPasses(std::vectorPass * RP,
-  Pass *P) {
+
+/// Populate RP with analysis pass that are required by
+/// pass P and are available. Populate RP_NotAvail with analysis
+/// pass that are required by pass P but are not available.
+void PMDataManager::collectRequiredAnalysis(SmallVectorPass *, 8RP,
+   SmallVectorAnalysisID, 8 RP_NotAvail,
+Pass *P) {
   AnalysisUsage AnUsage;
   P-getAnalysisUsage(AnUsage);
   const std::vectorAnalysisID RequiredSet = AnUsage.getRequiredSet();
   for (std::vectorAnalysisID::const_iterator 
  I = RequiredSet.begin(), E = RequiredSet.end();
I != E; ++I) {
-Pass *AnalysisPass = findAnalysisPass(*I, true);
-assert (AnalysisPass  Analysis pass is not available);
-RP.push_back(AnalysisPass);
+AnalysisID AID = *I;
+if (Pass *AnalysisPass = findAnalysisPass(*I, true))
+  RP.push_back(AnalysisPass);   
+else
+  RP_NotAvail.push_back(AID);
   }
 
   const std::vectorAnalysisID IDs = AnUsage.getRequiredTransitiveSet();
   for (std::vectorAnalysisID::const_iterator I = IDs.begin(),
  E = IDs.end(); I != E; ++I) {
-Pass *AnalysisPass = findAnalysisPass(*I, true);
-assert (AnalysisPass  Analysis pass is not available);
-RP.push_back(AnalysisPass);
+AnalysisID AID = *I;
+if (Pass *AnalysisPass = findAnalysisPass(*I, true))
+  RP.push_back(AnalysisPass);   
+else
+  RP_NotAvail.push_back(AID);
   }
 }
 
@@ -1154,6 +1179,21 @@
   return Changed;
 }
 
+/// Add 

[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-04-16 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.148 - 1.149
---
Log message:

Update module pass manager to support module passes that require
function passes.


---
Diffs of the changes:  (+44 -11)

 PassManager.cpp |   55 ---
 1 files changed, 44 insertions(+), 11 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.148 
llvm/lib/VMCore/PassManager.cpp:1.149
--- llvm/lib/VMCore/PassManager.cpp:1.148   Mon Apr 16 15:12:57 2007
+++ llvm/lib/VMCore/PassManager.cpp Mon Apr 16 15:27:05 2007
@@ -195,6 +195,11 @@
   /// through getAnalysis interface.
   virtual void addLowerLevelRequiredPass(Pass *P, Pass *RequiredPass);
 
+  /// Return function pass corresponding to PassInfo PI, that is 
+  /// required by module pass MP. Instantiate analysis pass, by using
+  /// its runOnFunction() for function F.
+  virtual Pass* getOnTheFlyPass(Pass *MP, const PassInfo *PI, Function F);
+
   virtual const char *getPassName() const {
 return Module Pass Manager;
   }
@@ -218,6 +223,11 @@
   virtual PassManagerType getPassManagerType() const { 
 return PMT_ModulePassManager; 
   }
+
+ private:
+  /// Collection of on the fly FPPassManagers. These managers manage
+  /// function passes that are required by module passes.
+  std::mapPass *, FPPassManager * OnTheFlyManagers;
 };
 
 
//===--===//
@@ -614,6 +624,10 @@
  enum PassDebuggingString DBG_STR) {
 
   std::vectorPass * DeadPasses;
+
+  if (!TPM)
+return;
+
   TPM-collectLastUses(DeadPasses, P);
 
   for (std::vectorPass *::iterator I = DeadPasses.begin(),
@@ -678,14 +692,6 @@
 assert (0  Unable to accomodate Required Pass);
 }
 
-// Now, take care of required analysises that are not available.
-for (SmallVectorAnalysisID, 8::iterator 
-   I = ReqAnalysisNotAvailable.begin(), 
-   E = ReqAnalysisNotAvailable.end() ;I != E; ++I) {
-  Pass *AnalysisPass = (*I)-createPass();
-  this-addLowerLevelRequiredPass(P, AnalysisPass);
-}
-
 // Set P as P's last user until someone starts using P.
 // However, if P is a Pass Manager then it does not need
 // to record its last user.
@@ -699,6 +705,14 @@
   TransferLastUses.clear();
 }
 
+// Now, take care of required analysises that are not available.
+for (SmallVectorAnalysisID, 8::iterator 
+   I = ReqAnalysisNotAvailable.begin(), 
+   E = ReqAnalysisNotAvailable.end() ;I != E; ++I) {
+  Pass *AnalysisPass = (*I)-createPass();
+  this-addLowerLevelRequiredPass(P, AnalysisPass);
+}
+
 // Take a note of analysis required and made available by this pass.
 // Remove the analysis not preserved by this pass
 removeNotPreservedAnalysis(P);
@@ -1190,10 +1204,29 @@
RequiredPass-getPotentialPassManagerType())
Unable to handle Pass that requires lower level Analysis pass);
 
-  assert (0  
-  Unable to handle Pass that requires lower level Analysis pass);
+  FPPassManager *FPP = OnTheFlyManagers[P];
+  if (!FPP) {
+FPP = new FPPassManager(getDepth() + 1);
+OnTheFlyManagers[P] = FPP;
+  }
+
+  FPP-add(RequiredPass, false);
 }
- 
+
+/// Return function pass corresponding to PassInfo PI, that is 
+/// required by module pass MP. Instantiate analysis pass, by using
+/// its runOnFunction() for function F.
+Pass* MPPassManager::getOnTheFlyPass(Pass *MP, const PassInfo *PI, 
+ Function F) {
+   AnalysisID AID = PI;
+  FPPassManager *FPP =OnTheFlyManagers[MP];
+  assert (FPP  Unable to find on the fly pass);
+  
+  FPP-runOnFunction(F);
+  return FPP-findAnalysisPass(AID, false);
+}
+
+
 
//===--===//
 // PassManagerImpl implementation
 //



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-04-16 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.149 - 1.150
---
Log message:

Print and delete on the fly pass managers.


---
Diffs of the changes:  (+19 -3)

 PassManager.cpp |   22 +++---
 1 files changed, 19 insertions(+), 3 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.149 
llvm/lib/VMCore/PassManager.cpp:1.150
--- llvm/lib/VMCore/PassManager.cpp:1.149   Mon Apr 16 15:27:05 2007
+++ llvm/lib/VMCore/PassManager.cpp Mon Apr 16 15:39:59 2007
@@ -180,7 +180,17 @@
  
 public:
   MPPassManager(int Depth) : PMDataManager(Depth) { }
-  
+
+  // Delete on the fly managers.
+  virtual ~MPPassManager() {
+for (std::mapPass *, FPPassManager *::iterator 
+   I = OnTheFlyManagers.begin(), E = OnTheFlyManagers.end();
+ I != E; ++I) {
+  FPPassManager *FPP = I-second;
+  delete FPP;
+}
+  }
+
   /// run - Execute all of the passes scheduled for execution.  Keep track of
   /// whether any of the passes modifies the module, and if so, return true.
   bool runOnModule(Module M);
@@ -210,6 +220,8 @@
 for (unsigned Index = 0; Index  getNumContainedPasses(); ++Index) {
   ModulePass *MP = getContainedPass(Index);
   MP-dumpPassStructure(Offset + 1);
+  if (FPPassManager *FPP = OnTheFlyManagers[MP])
+FPP-dumpPassStructure(Offset + 2);
   dumpLastUses(MP, Offset+1);
 }
   }
@@ -625,6 +637,7 @@
 
   std::vectorPass * DeadPasses;
 
+  // If this is a on the fly manager then it does not have TPM.
   if (!TPM)
 return;
 
@@ -795,8 +808,11 @@
 void PMDataManager::dumpLastUses(Pass *P, unsigned Offset) const{
 
   std::vectorPass * LUses;
-  
-  assert (TPM  Top Level Manager is missing);
+
+  // If this is a on the fly manager then it does not have TPM.
+  if (!TPM)
+return;
+
   TPM-collectLastUses(LUses, P);
   
   for (std::vectorPass *::iterator I = LUses.begin(),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-04-16 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.150 - 1.151
---
Log message:

Do not assert during analysis implementation initialization.


---
Diffs of the changes:  (+3 -1)

 PassManager.cpp |4 +++-
 1 files changed, 3 insertions(+), 1 deletion(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.150 
llvm/lib/VMCore/PassManager.cpp:1.151
--- llvm/lib/VMCore/PassManager.cpp:1.150   Mon Apr 16 15:39:59 2007
+++ llvm/lib/VMCore/PassManager.cpp Mon Apr 16 15:44:16 2007
@@ -781,7 +781,9 @@
  E = AnUsage.getRequiredSet().end(); I != E; ++I) {
 Pass *Impl = findAnalysisPass(*I, true);
 if (Impl == 0)
-  assert(0  Analysis used but not available!);
+  // This may be analysis pass that is initialized on the fly.
+  // If that is not the case then it will raise an assert when it is used.
+  continue;
 AnalysisResolver *AR = P-getResolver();
 AR-addAnalysisImplsPair(*I, Impl);
   }



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-04-16 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.151 - 1.152
---
Log message:

Proivde  getAnalysisFPAnalysis(Func) support.


---
Diffs of the changes:  (+5 -0)

 PassManager.cpp |5 +
 1 files changed, 5 insertions(+)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.151 
llvm/lib/VMCore/PassManager.cpp:1.152
--- llvm/lib/VMCore/PassManager.cpp:1.151   Mon Apr 16 15:44:16 2007
+++ llvm/lib/VMCore/PassManager.cpp Mon Apr 16 15:56:24 2007
@@ -906,6 +906,11 @@
   return PM.findAnalysisPass(ID, dir);
 }
 
+Pass *AnalysisResolver::findImplPass(Pass *P, const PassInfo *AnalysisPI, 
+ Function F) {
+  return PM.getOnTheFlyPass(P, AnalysisPI, F);
+}
+
 
//===--===//
 // BBPassManager implementation
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-03-08 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.145 - 1.146
---
Log message:

Speed Up Pass Manager.
- Check Immutableness before searching PreservedSet.
- Avoid unnecessary traversal while setting Last User.


---
Diffs of the changes:  (+16 -15)

 PassManager.cpp |   31 ---
 1 files changed, 16 insertions(+), 15 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.145 
llvm/lib/VMCore/PassManager.cpp:1.146
--- llvm/lib/VMCore/PassManager.cpp:1.145   Tue Mar  6 11:52:53 2007
+++ llvm/lib/VMCore/PassManager.cpp Thu Mar  8 13:05:01 2007
@@ -353,6 +353,10 @@
  E = AnalysisPasses.end(); I != E; ++I) {
 Pass *AP = *I;
 LastUser[AP] = P;
+
+if (P == AP)
+  continue;
+
 // If AP is the last user of other passes then make P last user of
 // such passes.
 for (std::mapPass *, Pass *::iterator LUI = LastUser.begin(),
@@ -546,11 +550,10 @@
   for (std::vectorPass *::iterator I = HigherLevelAnalysis.begin(),
  E = HigherLevelAnalysis.end(); I  != E; ++I) {
 Pass *P1 = *I;
-if (std::find(PreservedSet.begin(), PreservedSet.end(), P1-getPassInfo()) 
== 
-PreservedSet.end()) {
-  if (!dynamic_castImmutablePass*(P1))
-return false;
-}
+if (!dynamic_castImmutablePass*(P1) 
+ std::find(PreservedSet.begin(), PreservedSet.end(), 
P1-getPassInfo()) == 
+   PreservedSet.end())
+  return false;
   }
   
   return true;
@@ -568,12 +571,11 @@
   for (std::mapAnalysisID, Pass*::iterator I = AvailableAnalysis.begin(),
  E = AvailableAnalysis.end(); I != E; ) {
 std::mapAnalysisID, Pass*::iterator Info = I++;
-if (std::find(PreservedSet.begin(), PreservedSet.end(), Info-first) == 
-PreservedSet.end()) {
+if (!dynamic_castImmutablePass*(Info-second)
+ std::find(PreservedSet.begin(), PreservedSet.end(), Info-first) == 
+   PreservedSet.end())
   // Remove this analysis
-  if (!dynamic_castImmutablePass*(Info-second))
-AvailableAnalysis.erase(Info);
-}
+  AvailableAnalysis.erase(Info);
   }
 
   // Check inherited analysis also. If P is not preserving analysis
@@ -587,12 +589,11 @@
I = InheritedAnalysis[Index]-begin(),
E = InheritedAnalysis[Index]-end(); I != E; ) {
   std::mapAnalysisID, Pass *::iterator Info = I++;
-  if (std::find(PreservedSet.begin(), PreservedSet.end(), Info-first) == 
-  PreservedSet.end()) {
+  if (!dynamic_castImmutablePass*(Info-second)
+   std::find(PreservedSet.begin(), PreservedSet.end(), Info-first) 
== 
+ PreservedSet.end())
 // Remove this analysis
-if (!dynamic_castImmutablePass*(Info-second))
-  InheritedAnalysis[Index]-erase(Info);
-  }
+InheritedAnalysis[Index]-erase(Info);
 }
   }
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-03-06 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.144 - 1.145
---
Log message:

Keep track of higher level analysis.


---
Diffs of the changes:  (+26 -0)

 PassManager.cpp |   26 ++
 1 files changed, 26 insertions(+)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.144 
llvm/lib/VMCore/PassManager.cpp:1.145
--- llvm/lib/VMCore/PassManager.cpp:1.144   Mon Mar  5 19:55:46 2007
+++ llvm/lib/VMCore/PassManager.cpp Tue Mar  6 11:52:53 2007
@@ -532,6 +532,30 @@
   }
 }
 
+// Return true if P preserves high level analysis used by other
+// passes managed by this manager
+bool PMDataManager::preserveHigherLevelAnalysis(Pass *P) {
+
+  AnalysisUsage AnUsage;
+  P-getAnalysisUsage(AnUsage);
+  
+  if (AnUsage.getPreservesAll())
+return true;
+  
+  const std::vectorAnalysisID PreservedSet = AnUsage.getPreservedSet();
+  for (std::vectorPass *::iterator I = HigherLevelAnalysis.begin(),
+ E = HigherLevelAnalysis.end(); I  != E; ++I) {
+Pass *P1 = *I;
+if (std::find(PreservedSet.begin(), PreservedSet.end(), P1-getPassInfo()) 
== 
+PreservedSet.end()) {
+  if (!dynamic_castImmutablePass*(P1))
+return false;
+}
+  }
+  
+  return true;
+}
+
 /// Remove Analyss not preserved by Pass P
 void PMDataManager::removeNotPreservedAnalysis(Pass *P) {
   AnalysisUsage AnUsage;
@@ -634,6 +658,8 @@
   else if (PDepth   RDepth) {
 // Let the parent claim responsibility of last use
 TransferLastUses.push_back(PRequired);
+// Keep track of higher level analysis used by this manager.
+HigherLevelAnalysis.push_back(PRequired);
   } else {
 // Note : This feature is not yet implemented
 assert (0  



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-03-05 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.139 - 1.140
---
Log message:

Account for time consumed by releaseMemory() properly.


---
Diffs of the changes:  (+2 -2)

 PassManager.cpp |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.139 
llvm/lib/VMCore/PassManager.cpp:1.140
--- llvm/lib/VMCore/PassManager.cpp:1.139   Sun Mar  4 18:00:42 2007
+++ llvm/lib/VMCore/PassManager.cpp Mon Mar  5 12:20:51 2007
@@ -564,9 +564,9 @@
 std::string Msg1 =   Freeing Pass ';
 dumpPassInfo(*I, Msg1, Msg);
 
-if (TheTimeInfo) TheTimeInfo-passStarted(P);
+if (TheTimeInfo) TheTimeInfo-passStarted(*I);
 (*I)-releaseMemory();
-if (TheTimeInfo) TheTimeInfo-passEnded(P);
+if (TheTimeInfo) TheTimeInfo-passEnded(*I);
 
 std::mapAnalysisID, Pass*::iterator Pos = 
   AvailableAnalysis.find((*I)-getPassInfo());



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-03-05 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.140 - 1.141
---
Log message:

Avoid constructing std::strings unless pass debugging is ON.


---
Diffs of the changes:  (+52 -32)

 PassManager.cpp |   84 ++--
 1 files changed, 52 insertions(+), 32 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.140 
llvm/lib/VMCore/PassManager.cpp:1.141
--- llvm/lib/VMCore/PassManager.cpp:1.140   Mon Mar  5 12:20:51 2007
+++ llvm/lib/VMCore/PassManager.cpp Mon Mar  5 14:01:30 2007
@@ -553,7 +553,8 @@
 }
 
 /// Remove analysis passes that are not used any longer
-void PMDataManager::removeDeadPasses(Pass *P, std::string Msg) {
+void PMDataManager::removeDeadPasses(Pass *P, std::string Msg,
+ enum PassDebuggingString DBG_STR) {
 
   std::vectorPass * DeadPasses;
   TPM-collectLastUses(DeadPasses, P);
@@ -561,8 +562,7 @@
   for (std::vectorPass *::iterator I = DeadPasses.begin(),
  E = DeadPasses.end(); I != E; ++I) {
 
-std::string Msg1 =   Freeing Pass ';
-dumpPassInfo(*I, Msg1, Msg);
+dumpPassInfo(*I, FREEING_MSG, DBG_STR, Msg);
 
 if (TheTimeInfo) TheTimeInfo-passStarted(*I);
 (*I)-releaseMemory();
@@ -720,14 +720,44 @@
   }
 }
 
-void PMDataManager:: dumpPassInfo(Pass *P,  std::string Msg1, 
-  std::string Msg2) const {
+void PMDataManager:: dumpPassInfo(Pass *P, enum PassDebuggingString S1,
+  enum PassDebuggingString S2,
+  std::string Msg) {
   if (PassDebugging  Executions)
 return;
   cerr  (void*)this  std::string(getDepth()*2+1, ' ');
-  cerr  Msg1;
-  cerr  P-getPassName();
-  cerr  Msg2;
+  switch (S1) {
+  case EXECUTION_MSG:
+cerr  Executing Pass '  P-getPassName();
+break;
+  case MODIFICATION_MSG:
+cerr  ' Made Modification '  P-getPassName();
+break;
+  case FREEING_MSG:
+cerr   Freeing Pass '  P-getPassName();
+break;
+  default:
+break;
+  }
+  switch (S2) {
+  case ON_BASICBLOCK_MSG:
+cerr  ' on BasicBlock '  Msg  ...\n;
+break;
+  case ON_FUNCTION_MSG:
+cerr  ' on Function '  Msg  ...\n;
+break;
+  case ON_MODULE_MSG:
+cerr  ' on Module '   Msg  ...\n;
+break;
+  case ON_LOOP_MSG:
+cerr  ' on Loop   Msg  ...\n;
+break;
+  case ON_CG_MSG:
+cerr  ' on Call Graph   Msg  ...\n;
+break;
+  default:
+break;
+  }
 }
 
 void PMDataManager::dumpAnalysisSetInfo(const char *Msg, Pass *P,
@@ -774,17 +804,13 @@
 
   bool Changed = doInitialization(F);
 
-  std::string Msg1 = Executing Pass ';
-  std::string Msg3 = ' Made Modification ';
-
   for (Function::iterator I = F.begin(), E = F.end(); I != E; ++I)
 for (unsigned Index = 0; Index  getNumContainedPasses(); ++Index) {
   BasicBlockPass *BP = getContainedPass(Index);
   AnalysisUsage AnUsage;
   BP-getAnalysisUsage(AnUsage);
 
-  std::string Msg2 = ' on BasicBlock ' + (*I).getName() + '...\n;
-  dumpPassInfo(BP, Msg1, Msg2);
+  dumpPassInfo(BP, EXECUTION_MSG, ON_BASICBLOCK_MSG, (*I).getName());
   dumpAnalysisSetInfo(Required, BP, AnUsage.getRequiredSet());
 
   initializeAnalysisImpl(BP);
@@ -793,13 +819,14 @@
   Changed |= BP-runOnBasicBlock(*I);
   if (TheTimeInfo) TheTimeInfo-passEnded(BP);
 
-  if (Changed)
-dumpPassInfo(BP, Msg3, Msg2);
+  if (Changed) 
+dumpPassInfo(BP, MODIFICATION_MSG, ON_BASICBLOCK_MSG, (*I).getName());
   dumpAnalysisSetInfo(Preserved, BP, AnUsage.getPreservedSet());
 
   removeNotPreservedAnalysis(BP);
   recordAvailableAnalysis(BP);
-  removeDeadPasses(BP, Msg2);
+  removeDeadPasses(BP, (*I).getName(), ON_BASICBLOCK_MSG);
+   
 }
   return Changed |= doFinalization(F);
 }
@@ -973,17 +1000,13 @@
   if (F.isDeclaration())
 return false;
 
-  std::string Msg1 = Executing Pass ';
-  std::string Msg3 = ' Made Modification ';
-
   for (unsigned Index = 0; Index  getNumContainedPasses(); ++Index) {
 FunctionPass *FP = getContainedPass(Index);
 
 AnalysisUsage AnUsage;
 FP-getAnalysisUsage(AnUsage);
 
-std::string Msg2 = ' on Function ' + F.getName() + '...\n;
-dumpPassInfo(FP, Msg1, Msg2);
+dumpPassInfo(FP, EXECUTION_MSG, ON_FUNCTION_MSG, F.getName());
 dumpAnalysisSetInfo(Required, FP, AnUsage.getRequiredSet());
 
 initializeAnalysisImpl(FP);
@@ -992,13 +1015,13 @@
 Changed |= FP-runOnFunction(F);
 if (TheTimeInfo) TheTimeInfo-passEnded(FP);
 
-if (Changed)
-  dumpPassInfo(FP, Msg3, Msg2);
+if (Changed) 
+  dumpPassInfo(FP, MODIFICATION_MSG, ON_FUNCTION_MSG, F.getName());
 dumpAnalysisSetInfo(Preserved, FP, AnUsage.getPreservedSet());
 
 removeNotPreservedAnalysis(FP);
 recordAvailableAnalysis(FP);
-removeDeadPasses(FP, Msg2);
+removeDeadPasses(FP, F.getName(), ON_FUNCTION_MSG);
   }
   return 

[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-03-05 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.141 - 1.142
---
Log message:

Current pass manager, not the parent pass manager,  assumes the role of 
last user when one of the managed pass uses info provided by parent pass 
manager.

This was exposed by LPPassManager work.


---
Diffs of the changes:  (+10 -22)

 PassManager.cpp |   32 ++--
 1 files changed, 10 insertions(+), 22 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.141 
llvm/lib/VMCore/PassManager.cpp:1.142
--- llvm/lib/VMCore/PassManager.cpp:1.141   Mon Mar  5 14:01:30 2007
+++ llvm/lib/VMCore/PassManager.cpp Mon Mar  5 16:57:49 2007
@@ -158,7 +158,6 @@
   recordAvailableAnalysis(IP);
 } else {
   P-assignPassManager(activeStack);
-  activeStack.handleLastUserOverflow();
 }
 
   }
@@ -259,7 +258,6 @@
   recordAvailableAnalysis(IP);
 } else {
   P-assignPassManager(activeStack);
-  activeStack.handleLastUserOverflow();
 }
 
   }
@@ -587,6 +585,10 @@
   AnalysisResolver *AR = new AnalysisResolver(*this);
   P-setResolver(AR);
 
+  // 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::vectorPass * TransferLastUses;
+
   if (ProcessAnalysis) {
 
 // At the moment, this pass is the last user of all required passes.
@@ -622,6 +624,12 @@
   LastUses.push_back(P);
 TPM-setLastUser(LastUses, P);
 
+if (!TransferLastUses.empty()) {
+  Pass *My_PM = dynamic_castPass *(this);
+  TPM-setLastUser(TransferLastUses, My_PM);
+  TransferLastUses.clear();
+}
+
 // Take a note of analysis required and made available by this pass.
 // Remove the analysis not preserved by this pass
 removeNotPreservedAnalysis(P);
@@ -1231,26 +1239,6 @@
 printf (\n);
 }
 
-// Walk Pass Manager stack and set LastUse markers if any
-// manager is transfering this priviledge to its parent manager
-void PMStack::handleLastUserOverflow() {
-
-  for(PMStack::iterator I = this-begin(), E = this-end(); I != E;) {
-
-PMDataManager *Child = *I++;
-if (I != E) {
-  PMDataManager *Parent = *I++;
-  PMTopLevelManager *TPM = Parent-getTopLevelManager();
-  std::vectorPass * TLU = Child-getTransferredLastUses();
-  if (!TLU.empty()) {
-Pass *P = dynamic_castPass *(Parent);
-TPM-setLastUser(TLU, P);
-TLU.clear();
-  }
-}
-  }
-}
-
 /// Find appropriate Module Pass Manager in the PM Stack and
 /// add self into that manager. 
 void ModulePass::assignPassManager(PMStack PMS, 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-03-05 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.142 - 1.143
---
Log message:

Add preparePassManager() hook. This allows each pass to check whether
current active pass manager is appropriate or not. 

A loop pass may consider current LPPassManager in appropraite if loop
pass is not preserving analysis information that is used by other 
passes managed by current LPPassManager. In such situation, loop pass
can pop current LPPassManager from the PMStack using this  hook 
and use new LPPassManager for itself.


---
Diffs of the changes:  (+3 -0)

 PassManager.cpp |3 +++
 1 files changed, 3 insertions(+)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.142 
llvm/lib/VMCore/PassManager.cpp:1.143
--- llvm/lib/VMCore/PassManager.cpp:1.142   Mon Mar  5 16:57:49 2007
+++ llvm/lib/VMCore/PassManager.cpp Mon Mar  5 19:06:16 2007
@@ -385,6 +385,9 @@
   if (findAnalysisPass(P-getPassInfo()))
   return;
 
+  // Give pass a chance to prepare the stage.
+  P-preparePassManager(activeStack);
+
   AnalysisUsage AnUsage;
   P-getAnalysisUsage(AnUsage);
   const std::vectorAnalysisID RequiredSet = AnUsage.getRequiredSet();



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-03-05 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.143 - 1.144
---
Log message:

Keep track of inherited analysis. For example, if a loop pass does not
preserve dominator info then it should update parent FPPassManager's 
available analysis info to reflect this.


---
Diffs of the changes:  (+21 -0)

 PassManager.cpp |   21 +
 1 files changed, 21 insertions(+)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.143 
llvm/lib/VMCore/PassManager.cpp:1.144
--- llvm/lib/VMCore/PassManager.cpp:1.143   Mon Mar  5 19:06:16 2007
+++ llvm/lib/VMCore/PassManager.cpp Mon Mar  5 19:55:46 2007
@@ -551,6 +551,27 @@
 AvailableAnalysis.erase(Info);
 }
   }
+
+  // Check inherited analysis also. If P is not preserving analysis
+  // provided by parent manager then remove it here.
+  for (unsigned Index = 0; Index  PMT_Last; ++Index) {
+
+if (!InheritedAnalysis[Index])
+  continue;
+
+for (std::mapAnalysisID, Pass*::iterator 
+   I = InheritedAnalysis[Index]-begin(),
+   E = InheritedAnalysis[Index]-end(); I != E; ) {
+  std::mapAnalysisID, Pass *::iterator Info = I++;
+  if (std::find(PreservedSet.begin(), PreservedSet.end(), Info-first) == 
+  PreservedSet.end()) {
+// Remove this analysis
+if (!dynamic_castImmutablePass*(Info-second))
+  InheritedAnalysis[Index]-erase(Info);
+  }
+}
+  }
+
 }
 
 /// Remove analysis passes that are not used any longer



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-02-27 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.137 - 1.138
---
Log message:

Make getPassManagerType() const.


---
Diffs of the changes:  (+4 -2)

 PassManager.cpp |6 --
 1 files changed, 4 insertions(+), 2 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.137 
llvm/lib/VMCore/PassManager.cpp:1.138
--- llvm/lib/VMCore/PassManager.cpp:1.137   Sat Feb 17 17:14:24 2007
+++ llvm/lib/VMCore/PassManager.cpp Tue Feb 27 09:00:39 2007
@@ -98,7 +98,7 @@
 return BP;
   }
 
-  virtual PassManagerType getPassManagerType() { 
+  virtual PassManagerType getPassManagerType() const { 
 return PMT_BasicBlockPassManager; 
   }
 };
@@ -210,7 +210,9 @@
 return MP;
   }
 
-  virtual PassManagerType getPassManagerType() { return PMT_ModulePassManager; 
}
+  virtual PassManagerType getPassManagerType() const { 
+return PMT_ModulePassManager; 
+  }
 };
 
 
//===--===//



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-02-17 Thread Chris Lattner


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.136 - 1.137
---
Log message:

temporarily revert Devang's most recent patch, which caused a large 
compile-time regression in LLC.


---
Diffs of the changes:  (+4 -16)

 PassManager.cpp |   20 
 1 files changed, 4 insertions(+), 16 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.136 
llvm/lib/VMCore/PassManager.cpp:1.137
--- llvm/lib/VMCore/PassManager.cpp:1.136   Fri Feb 16 21:53:44 2007
+++ llvm/lib/VMCore/PassManager.cpp Sat Feb 17 17:14:24 2007
@@ -362,19 +362,13 @@
   }
 }
 
-// Walk LastUser map and create inverted map. This should be done
-// after all passes are added and before running first pass.
-void PMTopLevelManager::collectInvertedLU() {
-   for (std::mapPass *, Pass *::iterator LUI = LastUser.begin(),
-  LUE = LastUser.end(); LUI != LUE; ++LUI)
- InvertedLU[LUI-second].push_back(LUI-first);
-}
-
 /// Collect passes whose last user is P
 void PMTopLevelManager::collectLastUses(std::vectorPass * LastUses,
 Pass *P) {
-   std::vectorPass *LU = InvertedLU[P]; 
-   LastUses.insert(LastUses.end(), LU.begin(), LU.end());
+   for (std::mapPass *, Pass *::iterator LUI = LastUser.begin(),
+  LUE = LastUser.end(); LUI != LUE; ++LUI)
+  if (LUI-second == P)
+LastUses.push_back(LUI-first);
 }
 
 /// Schedule pass P for execution. Make sure that passes required by
@@ -944,9 +938,6 @@
   dumpArguments();
   dumpPasses();
 
-  // Collect inverted map of LastUsers. This improves speed of
-  // collectLastUses().
-  TPM-collectInvertedLU();
   initializeAllAnalysisInfo();
   for (unsigned Index = 0; Index  getNumContainedManagers(); ++Index) {  
 FPPassManager *FP = getContainedManager(Index);
@@ -1095,9 +1086,6 @@
   dumpArguments();
   dumpPasses();
 
-  // Collect inverted map of LastUsers. This improves speed of
-  // collectLastUses().
-  TPM-collectInvertedLU();
   initializeAllAnalysisInfo();
   for (unsigned Index = 0; Index  getNumContainedManagers(); ++Index) {  
 MPPassManager *MP = getContainedManager(Index);



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-02-16 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.135 - 1.136
---
Log message:

Use inverted map to speedup collectLastUses().


---
Diffs of the changes:  (+16 -4)

 PassManager.cpp |   20 
 1 files changed, 16 insertions(+), 4 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.135 
llvm/lib/VMCore/PassManager.cpp:1.136
--- llvm/lib/VMCore/PassManager.cpp:1.135   Wed Feb  7 13:37:53 2007
+++ llvm/lib/VMCore/PassManager.cpp Fri Feb 16 21:53:44 2007
@@ -362,13 +362,19 @@
   }
 }
 
+// Walk LastUser map and create inverted map. This should be done
+// after all passes are added and before running first pass.
+void PMTopLevelManager::collectInvertedLU() {
+   for (std::mapPass *, Pass *::iterator LUI = LastUser.begin(),
+  LUE = LastUser.end(); LUI != LUE; ++LUI)
+ InvertedLU[LUI-second].push_back(LUI-first);
+}
+
 /// Collect passes whose last user is P
 void PMTopLevelManager::collectLastUses(std::vectorPass * LastUses,
 Pass *P) {
-   for (std::mapPass *, Pass *::iterator LUI = LastUser.begin(),
-  LUE = LastUser.end(); LUI != LUE; ++LUI)
-  if (LUI-second == P)
-LastUses.push_back(LUI-first);
+   std::vectorPass *LU = InvertedLU[P]; 
+   LastUses.insert(LastUses.end(), LU.begin(), LU.end());
 }
 
 /// Schedule pass P for execution. Make sure that passes required by
@@ -938,6 +944,9 @@
   dumpArguments();
   dumpPasses();
 
+  // Collect inverted map of LastUsers. This improves speed of
+  // collectLastUses().
+  TPM-collectInvertedLU();
   initializeAllAnalysisInfo();
   for (unsigned Index = 0; Index  getNumContainedManagers(); ++Index) {  
 FPPassManager *FP = getContainedManager(Index);
@@ -1086,6 +1095,9 @@
   dumpArguments();
   dumpPasses();
 
+  // Collect inverted map of LastUsers. This improves speed of
+  // collectLastUses().
+  TPM-collectInvertedLU();
   initializeAllAnalysisInfo();
   for (unsigned Index = 0; Index  getNumContainedManagers(); ++Index) {  
 MPPassManager *MP = getContainedManager(Index);



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-02-07 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.134 - 1.135
---
Log message:

Do not drop transferred last uses on the floor.
Use handleLastUserOverflow().


---
Diffs of the changes:  (+3 -0)

 PassManager.cpp |3 +++
 1 files changed, 3 insertions(+)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.134 
llvm/lib/VMCore/PassManager.cpp:1.135
--- llvm/lib/VMCore/PassManager.cpp:1.134   Mon Feb  5 13:34:17 2007
+++ llvm/lib/VMCore/PassManager.cpp Wed Feb  7 13:37:53 2007
@@ -157,6 +157,7 @@
   recordAvailableAnalysis(IP);
 } else {
   P-assignPassManager(activeStack);
+  activeStack.handleLastUserOverflow();
 }
 
   }
@@ -255,6 +256,7 @@
   recordAvailableAnalysis(IP);
 } else {
   P-assignPassManager(activeStack);
+  activeStack.handleLastUserOverflow();
 }
 
   }
@@ -1220,6 +1222,7 @@
   if (!TLU.empty()) {
 Pass *P = dynamic_castPass *(Parent);
 TPM-setLastUser(TLU, P);
+TLU.clear();
   }
 }
   }



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-02-05 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.133 - 1.134
---
Log message:

Fix PR1158: http://llvm.org/PR1158 

Do not insert Analysis pass, if it is already available.


---
Diffs of the changes:  (+5 -0)

 PassManager.cpp |5 +
 1 files changed, 5 insertions(+)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.133 
llvm/lib/VMCore/PassManager.cpp:1.134
--- llvm/lib/VMCore/PassManager.cpp:1.133   Thu Feb  1 16:08:25 2007
+++ llvm/lib/VMCore/PassManager.cpp Mon Feb  5 13:34:17 2007
@@ -377,6 +377,11 @@
   // TODO : Allocate function manager for this pass, other wise required set
   // may be inserted into previous function manager
 
+  // If this Analysis is already requested by one of the previous pass
+  // and it is still available then do not insert new pass in the queue again.
+  if (findAnalysisPass(P-getPassInfo()))
+  return;
+
   AnalysisUsage AnUsage;
   P-getAnalysisUsage(AnUsage);
   const std::vectorAnalysisID RequiredSet = AnUsage.getRequiredSet();



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-02-01 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.132 - 1.133
---
Log message:

cvs commit


---
Diffs of the changes:  (+8 -0)

 PassManager.cpp |8 
 1 files changed, 8 insertions(+)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.132 
llvm/lib/VMCore/PassManager.cpp:1.133
--- llvm/lib/VMCore/PassManager.cpp:1.132   Tue Jan 30 14:08:38 2007
+++ llvm/lib/VMCore/PassManager.cpp Thu Feb  1 16:08:25 2007
@@ -78,6 +78,10 @@
   bool doFinalization(Module M);
   bool doFinalization(Function F);
 
+  virtual const char *getPassName() const {
+return BasicBlock Pass  Manager;
+  }
+
   // Print passes managed by this manager
   void dumpPassStructure(unsigned Offset) {
 llvm::cerr  std::string(Offset*2, ' ')  BasicBlockPass Manager\n;
@@ -185,6 +189,10 @@
 Info.setPreservesAll();
   }
 
+  virtual const char *getPassName() const {
+return Module Pass Manager;
+  }
+
   // Print passes managed by this manager
   void dumpPassStructure(unsigned Offset) {
 llvm::cerr  std::string(Offset*2, ' ')  ModulePass Manager\n;



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-01-29 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.129 - 1.130
---
Log message:

Move TimingInfo into PassManagers.h so that other libs can use it.


---
Diffs of the changes:  (+5 -53)

 PassManager.cpp |   58 
 1 files changed, 5 insertions(+), 53 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.129 
llvm/lib/VMCore/PassManager.cpp:1.130
--- llvm/lib/VMCore/PassManager.cpp:1.129   Wed Jan 17 15:19:23 2007
+++ llvm/lib/VMCore/PassManager.cpp Mon Jan 29 14:06:26 2007
@@ -14,7 +14,6 @@
 
 #include llvm/PassManagers.h
 #include llvm/Support/CommandLine.h
-#include llvm/Support/Timer.h
 #include llvm/Module.h
 #include llvm/ModuleProvider.h
 #include llvm/Support/Streams.h
@@ -259,60 +258,13 @@
 
 };
 
-} // End of llvm namespace
-
-namespace {
-
-//===--===//
-// TimingInfo Class - This class is used to calculate information about the
-// amount of time each pass takes to execute.  This only happens when
-// -time-passes is enabled on the command line.
-//
-
-class VISIBILITY_HIDDEN TimingInfo {
-  std::mapPass*, Timer TimingData;
-  TimerGroup TG;
-
-public:
-  // Use 'create' member to get this.
-  TimingInfo() : TG(... Pass execution timing report ...) {}
-  
-  // TimingDtor - Print out information about timing information
-  ~TimingInfo() {
-// Delete all of the timers...
-TimingData.clear();
-// TimerGroup is deleted next, printing the report.
-  }
-
-  // createTheTimeInfo - This method either initializes the TheTimeInfo pointer
-  // to a non null value (if the -time-passes option is enabled) or it leaves 
it
-  // null.  It may be called multiple times.
-  static void createTheTimeInfo();
-
-  void passStarted(Pass *P) {
-
-if (dynamic_castPMDataManager *(P)) 
-  return;
-
-std::mapPass*, Timer::iterator I = TimingData.find(P);
-if (I == TimingData.end())
-  I=TimingData.insert(std::make_pair(P, Timer(P-getPassName(), 
TG))).first;
-I-second.startTimer();
-  }
-  void passEnded(Pass *P) {
-
-if (dynamic_castPMDataManager *(P)) 
-  return;
-
-std::mapPass*, Timer::iterator I = TimingData.find(P);
-assert (I != TimingData.end()  passStarted/passEnded not nested 
right!);
-I-second.stopTimer();
-  }
-};
-
 static TimingInfo *TheTimeInfo;
 
-} // End of anon namespace
+TimingInfo *getTheTimeInfo() {
+  return TheTimeInfo;
+}
+
+} // End of llvm namespace
 
 
//===--===//
 // PMTopLevelManager implementation



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-01-29 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.130 - 1.131
---
Log message:

- Undo previous check-in (i.e. Do not export TimingInfo class through
PassManagers.h).

- Add StopPassTimer() and StartPassTimer() to expose TimingInfo to
CallGraphPassManager

- Use these two APIs in CalLgraphPassManager to measure timings.


---
Diffs of the changes:  (+65 -5)

 PassManager.cpp |   70 
 1 files changed, 65 insertions(+), 5 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.130 
llvm/lib/VMCore/PassManager.cpp:1.131
--- llvm/lib/VMCore/PassManager.cpp:1.130   Mon Jan 29 14:06:26 2007
+++ llvm/lib/VMCore/PassManager.cpp Mon Jan 29 17:10:37 2007
@@ -14,6 +14,7 @@
 
 #include llvm/PassManagers.h
 #include llvm/Support/CommandLine.h
+#include llvm/Support/Timer.h
 #include llvm/Module.h
 #include llvm/ModuleProvider.h
 #include llvm/Support/Streams.h
@@ -258,13 +259,60 @@
 
 };
 
-static TimingInfo *TheTimeInfo;
+} // End of llvm namespace
 
-TimingInfo *getTheTimeInfo() {
-  return TheTimeInfo;
-}
+namespace {
 
-} // End of llvm namespace
+//===--===//
+// TimingInfo Class - This class is used to calculate information about the
+// amount of time each pass takes to execute.  This only happens when
+// -time-passes is enabled on the command line.
+//
+
+class VISIBILITY_HIDDEN TimingInfo {
+  std::mapPass*, Timer TimingData;
+  TimerGroup TG;
+
+public:
+  // Use 'create' member to get this.
+  TimingInfo() : TG(... Pass execution timing report ...) {}
+  
+  // TimingDtor - Print out information about timing information
+  ~TimingInfo() {
+// Delete all of the timers...
+TimingData.clear();
+// TimerGroup is deleted next, printing the report.
+  }
+
+  // createTheTimeInfo - This method either initializes the TheTimeInfo pointer
+  // to a non null value (if the -time-passes option is enabled) or it leaves 
it
+  // null.  It may be called multiple times.
+  static void createTheTimeInfo();
+
+  void passStarted(Pass *P) {
+
+if (dynamic_castPMDataManager *(P)) 
+  return;
+
+std::mapPass*, Timer::iterator I = TimingData.find(P);
+if (I == TimingData.end())
+  I=TimingData.insert(std::make_pair(P, Timer(P-getPassName(), 
TG))).first;
+I-second.startTimer();
+  }
+  void passEnded(Pass *P) {
+
+if (dynamic_castPMDataManager *(P)) 
+  return;
+
+std::mapPass*, Timer::iterator I = TimingData.find(P);
+assert (I != TimingData.end()  passStarted/passEnded not nested 
right!);
+I-second.stopTimer();
+  }
+};
+
+static TimingInfo *TheTimeInfo;
+
+} // End of anon namespace
 
 
//===--===//
 // PMTopLevelManager implementation
@@ -1084,6 +1132,18 @@
   TheTimeInfo = *TTI;
 }
 
+/// If TimingInfo is enabled then start pass timer.
+void StartPassTimer(Pass *P) {
+  if (TheTimeInfo) 
+TheTimeInfo-passStarted(P);
+}
+
+/// If TimingInfo is enabled then stop pass timer.
+void StopPassTimer(Pass *P) {
+  if (TheTimeInfo) 
+TheTimeInfo-passEnded(P);
+}
+
 
//===--===//
 // PMStack implementation
 //



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-01-17 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.126 - 1.127
---
Log message:

Update assignPassManager() signature to allow selection of preferred 
pass manager type. This allows new FPPassManager to select Call Graph
Pass Manager (if available) as its parent.


---
Diffs of the changes:  (+13 -4)

 PassManager.cpp |   17 +
 1 files changed, 13 insertions(+), 4 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.126 
llvm/lib/VMCore/PassManager.cpp:1.127
--- llvm/lib/VMCore/PassManager.cpp:1.126   Tue Jan 16 16:38:10 2007
+++ llvm/lib/VMCore/PassManager.cpp Wed Jan 17 14:30:17 2007
@@ -1202,7 +1202,8 @@
 
 /// Find appropriate Module Pass Manager in the PM Stack and
 /// add self into that manager. 
-void ModulePass::assignPassManager(PMStack PMS) {
+void ModulePass::assignPassManager(PMStack PMS, 
+  PassManagerType PreferredType) {
 
   // Find Module Pass Manager
   while(!PMS.empty()) {
@@ -1219,7 +1220,8 @@
 
 /// Find appropriate Function Pass Manager or Call Graph Pass Manager
 /// in the PM Stack and add self into that manager. 
-void FunctionPass::assignPassManager(PMStack PMS) {
+void FunctionPass::assignPassManager(PMStack PMS,
+PassManagerType PreferredType) {
 
   // Find Module Pass Manager (TODO : Or Call Graph Pass Manager)
   while(!PMS.empty()) {
@@ -1245,7 +1247,13 @@
 // [3] Assign manager to manage this new manager. This may create
 // and push new managers into PMS
 Pass *P = dynamic_castPass *(FPP);
-P-assignPassManager(PMS);
+
+// If Call Graph Pass Manager is active then use it to manage
+// this new Function Pass manager.
+if (PMD-getPassManagerType() == PMT_CallGraphPassManager)
+  P-assignPassManager(PMS, PMT_CallGraphPassManager);
+else
+  P-assignPassManager(PMS);
 
 // [4] Push new manager into PMS
 PMS.push(FPP);
@@ -1257,7 +1265,8 @@
 
 /// Find appropriate Basic Pass Manager or Call Graph Pass Manager
 /// in the PM Stack and add self into that manager. 
-void BasicBlockPass::assignPassManager(PMStack PMS) {
+void BasicBlockPass::assignPassManager(PMStack PMS,
+  PassManagerType PreferredType) {
 
   BBPassManager *BBP = NULL;
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-01-17 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.127 - 1.128
---
Log message:

s/PassDebugging_New/PassDebugging/g


---
Diffs of the changes:  (+5 -5)

 PassManager.cpp |   10 +-
 1 files changed, 5 insertions(+), 5 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.127 
llvm/lib/VMCore/PassManager.cpp:1.128
--- llvm/lib/VMCore/PassManager.cpp:1.127   Wed Jan 17 14:30:17 2007
+++ llvm/lib/VMCore/PassManager.cpp Wed Jan 17 14:33:36 2007
@@ -39,7 +39,7 @@
 };
 
 static cl::optenum PassDebugLevel
-PassDebugging_New(debug-pass, cl::Hidden,
+PassDebugging(debug-pass, cl::Hidden,
   cl::desc(Print PassManager debugging information),
   cl::values(
   clEnumVal(None  , disable debug output),
@@ -426,7 +426,7 @@
 // Print passes managed by this top level manager.
 void PMTopLevelManager::dumpPasses() const {
 
-  if (PassDebugging_New  Structure)
+  if (PassDebugging  Structure)
 return;
 
   // Print out the immutable passes
@@ -441,7 +441,7 @@
 
 void PMTopLevelManager::dumpArguments() const {
 
-  if (PassDebugging_New  Arguments)
+  if (PassDebugging  Arguments)
 return;
 
   cerr  Pass Arguments: ;
@@ -704,7 +704,7 @@
 
 void PMDataManager:: dumpPassInfo(Pass *P,  std::string Msg1, 
   std::string Msg2) const {
-  if (PassDebugging_New  Executions)
+  if (PassDebugging  Executions)
 return;
   cerr  (void*)this  std::string(getDepth()*2+1, ' ');
   cerr  Msg1;
@@ -715,7 +715,7 @@
 void PMDataManager::dumpAnalysisSetInfo(const char *Msg, Pass *P,
 const std::vectorAnalysisID Set) 
   const {
-  if (PassDebugging_New = Details  !Set.empty()) {
+  if (PassDebugging = Details  !Set.empty()) {
 cerr  (void*)P  std::string(getDepth()*2+3, ' ')  Msg   
Analyses:;
   for (unsigned i = 0; i != Set.size(); ++i) {
 if (i) cerr  ,;



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-01-17 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.128 - 1.129
---
Log message:

Update ModulePass::assignPassManager() to take into account Preferred 
Pass Manager Type.


---
Diffs of the changes:  (+5 -4)

 PassManager.cpp |9 +
 1 files changed, 5 insertions(+), 4 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.128 
llvm/lib/VMCore/PassManager.cpp:1.129
--- llvm/lib/VMCore/PassManager.cpp:1.128   Wed Jan 17 14:33:36 2007
+++ llvm/lib/VMCore/PassManager.cpp Wed Jan 17 15:19:23 2007
@@ -1207,15 +1207,16 @@
 
   // Find Module Pass Manager
   while(!PMS.empty()) {
-if (PMS.top()-getPassManagerType()  PMT_ModulePassManager)
+PassManagerType TopPMType = PMS.top()-getPassManagerType();
+if (TopPMType == PreferredType)
+  break; // We found desired pass manager
+else if (TopPMType  PMT_ModulePassManager)
   PMS.pop();// Pop children pass managers
 else
   break;
   }
-  MPPassManager *MPP = dynamic_castMPPassManager *(PMS.top());
 
-  assert(MPP  Unable to find Module Pass Manager);
-  MPP-add(this);
+  PMS.top()-add(this);
 }
 
 /// Find appropriate Function Pass Manager or Call Graph Pass Manager



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-01-16 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.124 - 1.125
---
Log message:

Undo last check-in.
Remove setupPassManager() and its use.


---
Diffs of the changes:  (+50 -62)

 PassManager.cpp |  112 +---
 1 files changed, 50 insertions(+), 62 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.124 
llvm/lib/VMCore/PassManager.cpp:1.125
--- llvm/lib/VMCore/PassManager.cpp:1.124   Tue Jan 16 13:46:09 2007
+++ llvm/lib/VMCore/PassManager.cpp Tue Jan 16 15:43:18 2007
@@ -366,7 +366,8 @@
 /// the manager. Remove dead passes. This is a recursive function.
 void PMTopLevelManager::schedulePass(Pass *P) {
 
-  P-setupPassManager(activeStack);
+  // TODO : Allocate function manager for this pass, other wise required set
+  // may be inserted into previous function manager
 
   AnalysisUsage AnUsage;
   P-getAnalysisUsage(AnUsage);
@@ -1217,55 +1218,47 @@
   MPP-add(this);
 }
 
-/// Setup Pass Manager in advance before checking availability of
-/// required analysis passes.
-void FunctionPass::setupPassManager(PMStack PMS) {
+/// Find appropriate Function Pass Manager or Call Graph Pass Manager
+/// in the PM Stack and add self into that manager. 
+void FunctionPass::assignPassManager(PMStack PMS) {
 
   // Find Module Pass Manager (TODO : Or Call Graph Pass Manager)
   while(!PMS.empty()) {
 if (PMS.top()-getPassManagerType()  PMT_FunctionPassManager)
   PMS.pop();
 else
-  break;
+  break; 
   }
+  FPPassManager *FPP = dynamic_castFPPassManager *(PMS.top());
 
-  assert(!PMS.empty()  Unable to create Function Pass Manager);
+  // Create new Function Pass Manager
+  if (!FPP) {
+assert(!PMS.empty()  Unable to create Function Pass Manager);
+PMDataManager *PMD = PMS.top();
 
-  if (PMS.top()-getPassManagerType() == PMT_FunctionPassManager
-  || PMS.top()-getPassManagerType() == PMT_CallGraphPassManager)
-return;
-  
-  PMDataManager *PMD = PMS.top();
-  
-  // [1] Create new Function Pass Manager
-  FPPassManager *FPP = new FPPassManager(PMD-getDepth() + 1);
-  
-  // [2] Set up new manager's top level manager
-  PMTopLevelManager *TPM = PMD-getTopLevelManager();
-  TPM-addIndirectPassManager(FPP);
-  
-  // [3] Assign manager to manage this new manager. This may create
-  // and push new managers into PMS
-  Pass *P = dynamic_castPass *(FPP);
-  P-assignPassManager(PMS);
-  
-  // [4] Push new manager into PMS
-  PMS.push(FPP);
-}
+// [1] Create new Function Pass Manager
+FPP = new FPPassManager(PMD-getDepth() + 1);
 
-/// Find appropriate Function Pass Manager or Call Graph Pass Manager
-/// in the PM Stack and add self into that manager. 
-void FunctionPass::assignPassManager(PMStack PMS) {
+// [2] Set up new manager's top level manager
+PMTopLevelManager *TPM = PMD-getTopLevelManager();
+TPM-addIndirectPassManager(FPP);
+
+// [3] Assign manager to manage this new manager. This may create
+// and push new managers into PMS
+Pass *P = dynamic_castPass *(FPP);
+P-assignPassManager(PMS);
 
-  PMDataManager *PMD = dynamic_castPMDataManager *(PMS.top());
-  assert(PMD  Unable to assign Pass Manager);
+// [4] Push new manager into PMS
+PMS.push(FPP);
+  }
 
-  PMD-add(this);
+  // Assign FPP as the manager of this pass.
+  FPP-add(this);
 }
 
-/// Setup Pass Manager in advance before checking availability of
-/// required analysis passes.
-void BasicBlockPass::setupPassManager(PMStack PMS) {
+/// Find appropriate Basic Pass Manager or Call Graph Pass Manager
+/// in the PM Stack and add self into that manager. 
+void BasicBlockPass::assignPassManager(PMStack PMS) {
 
   BBPassManager *BBP = NULL;
 
@@ -1275,37 +1268,32 @@
 BBP = dynamic_castBBPassManager *(PMS.top());
   }
 
-  if (BBP)
-return;
+  // If leaf manager is not Basic Block Pass manager then create new
+  // basic Block Pass manager.
+
+  if (!BBP) {
+assert(!PMS.empty()  Unable to create BasicBlock Pass Manager);
+PMDataManager *PMD = PMS.top();
+
+// [1] Create new Basic Block Manager
+BBP = new BBPassManager(PMD-getDepth() + 1);
+
+// [2] Set up new manager's top level manager
+// Basic Block Pass Manager does not live by itself
+PMTopLevelManager *TPM = PMD-getTopLevelManager();
+TPM-addIndirectPassManager(BBP);
 
-  assert(!PMS.empty()  Unable to create BasicBlock Pass Manager);
-  PMDataManager *PMD = PMS.top();
-  
-  // [1] Create new Basic Block Manager
-  BBP = new BBPassManager(PMD-getDepth() + 1);
-  
-  // [2] Set up new manager's top level manager
-  // Basic Block Pass Manager does not live by itself
-  PMTopLevelManager *TPM = PMD-getTopLevelManager();
-  TPM-addIndirectPassManager(BBP);
-  
 // [3] Assign manager to manage this new manager. This may create
 // and push new managers into PMS
-  Pass *P = dynamic_castPass *(BBP);
-  P-assignPassManager(PMS);
-  
-  // [4] Push new manager 

[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-01-16 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.125 - 1.126
---
Log message:

Pass manager may require certain analysis. In such cases, initially 
pass manager is last user.


---
Diffs of the changes:  (+2 -3)

 PassManager.cpp |5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.125 
llvm/lib/VMCore/PassManager.cpp:1.126
--- llvm/lib/VMCore/PassManager.cpp:1.125   Tue Jan 16 15:43:18 2007
+++ llvm/lib/VMCore/PassManager.cpp Tue Jan 16 16:38:10 2007
@@ -600,10 +600,9 @@
 // Set P as P's last user until someone starts using P.
 // However, if P is a Pass Manager then it does not need
 // to record its last user.
-if (!dynamic_castPMDataManager *(P)) {
+if (!dynamic_castPMDataManager *(P))
   LastUses.push_back(P);
-  TPM-setLastUser(LastUses, 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



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-01-15 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.120 - 1.121
---
Log message:

Do not record last users of Pass Manager.


---
Diffs of the changes:  (+7 -2)

 PassManager.cpp |9 +++--
 1 files changed, 7 insertions(+), 2 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.120 
llvm/lib/VMCore/PassManager.cpp:1.121
--- llvm/lib/VMCore/PassManager.cpp:1.120   Fri Jan 12 14:07:16 2007
+++ llvm/lib/VMCore/PassManager.cpp Mon Jan 15 14:31:54 2007
@@ -594,8 +594,13 @@
   }
 }
 
-LastUses.push_back(P);
-TPM-setLastUser(LastUses, P);
+// Set P as P's last user until someone starts using P.
+// However, if P is a Pass Manager then it does not need
+// to record its last user.
+if (!dynamic_castPMDataManager *(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



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-01-15 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.121 - 1.122
---
Log message:

Remove extra white spaces. Fix comments.


---
Diffs of the changes:  (+1 -1)

 PassManager.cpp |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.121 
llvm/lib/VMCore/PassManager.cpp:1.122
--- llvm/lib/VMCore/PassManager.cpp:1.121   Mon Jan 15 14:31:54 2007
+++ llvm/lib/VMCore/PassManager.cpp Mon Jan 15 17:06:56 2007
@@ -559,7 +559,7 @@
 /// Add pass P into the PassVector. Update 
 /// AvailableAnalysis appropriately if ProcessAnalysis is true.
 void PMDataManager::add(Pass *P, 
- bool ProcessAnalysis) {
+bool ProcessAnalysis) {
 
   // This manager is going to manage pass P. Set up analysis resolver
   // to connect them.



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-01-15 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.122 - 1.123
---
Log message:

Code refactoring.


---
Diffs of the changes:  (+21 -18)

 PassManager.cpp |   39 +--
 1 files changed, 21 insertions(+), 18 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.122 
llvm/lib/VMCore/PassManager.cpp:1.123
--- llvm/lib/VMCore/PassManager.cpp:1.122   Mon Jan 15 17:06:56 2007
+++ llvm/lib/VMCore/PassManager.cpp Mon Jan 15 20:00:38 2007
@@ -112,7 +112,8 @@
 public PMTopLevelManager {
 public:
 
-  FunctionPassManagerImpl(int Depth) : PMDataManager(Depth) { }
+  FunctionPassManagerImpl(int Depth) : PMDataManager(Depth),
+   PMTopLevelManager(TLM_Function) { }
 
   /// add - Add a pass to the queue of passes to run.  This passes ownership of
   /// the Pass to the PassManager.  When the PassManager is destroyed, the pass
@@ -151,13 +152,6 @@
   addImmutablePass(IP);
   recordAvailableAnalysis(IP);
 } else {
-  // Assign manager
-  if (activeStack.empty()) {
-FPPassManager *FPP = new FPPassManager(getDepth() + 1);
-FPP-setTopLevelManager(this-getTopLevelManager());
-addPassManager(FPP);
-activeStack.push(FPP);
-  }
   P-assignPassManager(activeStack);
 }
 
@@ -220,7 +214,8 @@
 
 public:
 
-  PassManagerImpl(int Depth) : PMDataManager(Depth) { }
+  PassManagerImpl(int Depth) : PMDataManager(Depth),
+   PMTopLevelManager(TLM_Pass) { }
 
   /// add - Add a pass to the queue of passes to run.  This passes ownership of
   /// the Pass to the PassManager.  When the PassManager is destroyed, the pass
@@ -251,15 +246,6 @@
   addImmutablePass(IP);
   recordAvailableAnalysis(IP);
 } else {
-
-  // Assign manager
-  if (activeStack.empty()) {
-MPPassManager *MPP = new MPPassManager(getDepth() + 1);
-MPP-setTopLevelManager(this-getTopLevelManager());
-addPassManager(MPP);
-activeStack.push(MPP);
-  }
-  
   P-assignPassManager(activeStack);
 }
 
@@ -331,6 +317,23 @@
 
//===--===//
 // PMTopLevelManager implementation
 
+/// Initialize top level manager. Create first pass manager.
+PMTopLevelManager::PMTopLevelManager (enum TopLevelManagerType t) {
+
+  if (t == TLM_Pass) {
+MPPassManager *MPP = new MPPassManager(1);
+MPP-setTopLevelManager(this);
+addPassManager(MPP);
+activeStack.push(MPP);
+  } 
+  else if (t == TLM_Function) {
+FPPassManager *FPP = new FPPassManager(1);
+FPP-setTopLevelManager(this);
+addPassManager(FPP);
+activeStack.push(FPP);
+  } 
+}
+
 /// Set pass P as the last user of the given analysis passes.
 void PMTopLevelManager::setLastUser(std::vectorPass * AnalysisPasses, 
 Pass *P) {



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-01-12 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.117 - 1.118
---
Log message:

Remove dead code.


---
Diffs of the changes:  (+26 -225)

 PassManager.cpp |  251 +---
 1 files changed, 26 insertions(+), 225 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.117 
llvm/lib/VMCore/PassManager.cpp:1.118
--- llvm/lib/VMCore/PassManager.cpp:1.117   Thu Jan 11 16:15:30 2007
+++ llvm/lib/VMCore/PassManager.cpp Fri Jan 12 11:23:48 2007
@@ -335,9 +335,6 @@
 public:
   BBPassManager(int Depth) : PMDataManager(Depth) { }
 
-  /// Add a pass into a passmanager queue. 
-  bool addPass(Pass *p);
-  
   /// Execute all of the passes scheduled for execution.  Keep track of
   /// whether any of the passes modifies the function, and if so, return true.
   bool runOnFunction(Function F);
@@ -384,12 +381,7 @@
 class FPPassManager : public ModulePass, public PMDataManager {
  
 public:
-  FPPassManager(int Depth) : PMDataManager(Depth) { 
-activeBBPassManager = NULL; 
-  }
-  
-  /// Add a pass into a passmanager queue. 
-  bool addPass(Pass *p);
+  FPPassManager(int Depth) : PMDataManager(Depth) { }
   
   /// run - Execute all of the passes scheduled for execution.  Keep track of
   /// whether any of the passes modifies the module, and if so, return true.
@@ -428,9 +420,6 @@
   virtual PassManagerType getPassManagerType() { 
 return PMT_FunctionPassManager; 
   }
-private:
-  // Active Pass Manager
-  BBPassManager *activeBBPassManager;
 };
 
 
//===--===//
@@ -442,9 +431,7 @@
 public PMTopLevelManager {
 public:
 
-  FunctionPassManagerImpl(int Depth) : PMDataManager(Depth) {
-activeManager = NULL;
-  }
+  FunctionPassManagerImpl(int Depth) : PMDataManager(Depth) { }
 
   /// add - Add a pass to the queue of passes to run.  This passes ownership of
   /// the Pass to the PassManager.  When the PassManager is destroyed, the pass
@@ -482,9 +469,17 @@
   initializeAnalysisImpl(P);
   addImmutablePass(IP);
   recordAvailableAnalysis(IP);
+} else {
+  // Assign manager
+  if (activeStack.empty()) {
+FPPassManager *FPP = new FPPassManager(getDepth() + 1);
+FPP-setTopLevelManager(this-getTopLevelManager());
+addPassManager(FPP);
+activeStack.push(FPP);
+  }
+  P-assignPassManager(activeStack);
 }
-else 
-  addPass(P);
+
   }
 
   FPPassManager *getContainedManager(unsigned N) {
@@ -493,13 +488,6 @@
 return FP;
   }
 
-  /// Add a pass into a passmanager queue.
-  bool addPass(Pass *p);
-
-private:
-
-  // Active Pass Manager
-  FPPassManager *activeManager;
 };
 
 
//===--===//
@@ -511,12 +499,7 @@
 class MPPassManager : public Pass, public PMDataManager {
  
 public:
-  MPPassManager(int Depth) : PMDataManager(Depth) { 
-activeFunctionPassManager = NULL; 
-  }
-  
-  /// Add a pass into a passmanager queue. 
-  bool addPass(Pass *p);
+  MPPassManager(int Depth) : PMDataManager(Depth) { }
   
   /// run - Execute all of the passes scheduled for execution.  Keep track of
   /// whether any of the passes modifies the module, and if so, return true.
@@ -544,9 +527,6 @@
   }
 
   virtual PassManagerType getPassManagerType() { return PMT_ModulePassManager; 
}
-private:
-  // Active Pass Manager
-  FPPassManager *activeFunctionPassManager;
 };
 
 
//===--===//
@@ -559,9 +539,7 @@
 
 public:
 
-  PassManagerImpl(int Depth) : PMDataManager(Depth) {
-activeManager = NULL;
-  }
+  PassManagerImpl(int Depth) : PMDataManager(Depth) { }
 
   /// add - Add a pass to the queue of passes to run.  This passes ownership of
   /// the Pass to the PassManager.  When the PassManager is destroyed, the pass
@@ -591,9 +569,19 @@
   initializeAnalysisImpl(P);
   addImmutablePass(IP);
   recordAvailableAnalysis(IP);
+} else {
+
+  // Assign manager
+  if (activeStack.empty()) {
+MPPassManager *MPP = new MPPassManager(getDepth() + 1);
+MPP-setTopLevelManager(this-getTopLevelManager());
+addPassManager(MPP);
+activeStack.push(MPP);
+  }
+  
+  P-assignPassManager(activeStack);
 }
-else 
-  addPass(P);
+
   }
 
   MPPassManager *getContainedManager(unsigned N) {
@@ -602,13 +590,6 @@
 return MP;
   }
 
-private:
-
-  /// Add a pass into a passmanager queue.
-  bool addPass(Pass *p);
-
-  // Active Pass Manager
-  MPPassManager *activeManager;
 };
 
 } // End of llvm namespace
@@ -1053,25 +1034,6 @@
 
//===--===//
 // BBPassManager implementation
 
-/// Add pass P into PassVector and return true. If this pass is not
-/// manageable by this manager then return 

[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-01-12 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.118 - 1.119
---
Log message:

Move PMTopLevelManager, PMDataManager and FPPassManger classes into
new PassManagers.h header.

This opens door for implementing CGPassManager in IPA library.


---
Diffs of the changes:  (+38 -323)

 PassManager.cpp |  361 +---
 1 files changed, 38 insertions(+), 323 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.118 
llvm/lib/VMCore/PassManager.cpp:1.119
--- llvm/lib/VMCore/PassManager.cpp:1.118   Fri Jan 12 11:23:48 2007
+++ llvm/lib/VMCore/PassManager.cpp Fri Jan 12 12:52:44 2007
@@ -12,7 +12,7 @@
 
//===--===//
 
 
-#include llvm/PassManager.h
+#include llvm/PassManagers.h
 #include llvm/Support/CommandLine.h
 #include llvm/Support/Timer.h
 #include llvm/Module.h
@@ -22,76 +22,7 @@
 #include vector
 #include map
 
-using namespace llvm;
-class llvm::PMDataManager;
-class llvm::PMStack;
-
-//===--===//
-// Overview:
-// The Pass Manager Infrastructure manages passes. It's responsibilities are:
-// 
-//   o Manage optimization pass execution order
-//   o Make required Analysis information available before pass P is run
-//   o Release memory occupied by dead passes
-//   o If Analysis information is dirtied by a pass then regenerate Analysis 
-// information before it is consumed by another pass.
-//
-// Pass Manager Infrastructure uses multiple pass managers.  They are
-// PassManager, FunctionPassManager, MPPassManager, FPPassManager, 
BBPassManager.
-// This class hierarcy uses multiple inheritance but pass managers do not 
derive
-// from another pass manager.
-//
-// PassManager and FunctionPassManager are two top-level pass manager that
-// represents the external interface of this entire pass manager infrastucture.
-//
-// Important classes :
-//
-// [o] class PMTopLevelManager;
-//
-// Two top level managers, PassManager and FunctionPassManager, derive from 
-// PMTopLevelManager. PMTopLevelManager manages information used by top level 
-// managers such as last user info.
-//
-// [o] class PMDataManager;
-//
-// PMDataManager manages information, e.g. list of available analysis info, 
-// used by a pass manager to manage execution order of passes. It also provides
-// a place to implement common pass manager APIs. All pass managers derive from
-// PMDataManager.
-//
-// [o] class BBPassManager : public FunctionPass, public PMDataManager;
-//
-// BBPassManager manages BasicBlockPasses.
-//
-// [o] class FunctionPassManager;
-//
-// This is a external interface used by JIT to manage FunctionPasses. This
-// interface relies on FunctionPassManagerImpl to do all the tasks.
-//
-// [o] class FunctionPassManagerImpl : public ModulePass, PMDataManager,
-// public PMTopLevelManager;
-//
-// FunctionPassManagerImpl is a top level manager. It manages FPPassManagers
-//
-// [o] class FPPassManager : public ModulePass, public PMDataManager;
-//
-// FPPassManager manages FunctionPasses and BBPassManagers
-//
-// [o] class MPPassManager : public Pass, public PMDataManager;
-//
-// MPPassManager manages ModulePasses and FPPassManagers
-//
-// [o] class PassManager;
-//
-// This is a external interface used by various tools to manages passes. It
-// relies on PassManagerImpl to do all the tasks.
-//
-// [o] class PassManagerImpl : public Pass, public PMDataManager,
-// public PMDTopLevelManager
-//
-// PassManagerImpl is a top level pass manager responsible for managing
-// MPPassManagers.
-//===--===//
+// See PassManagers.h for Pass Manager infrastructure overview.
 
 namespace llvm {
 
@@ -122,208 +53,6 @@
 namespace {
 
 
//===--===//
-// PMTopLevelManager
-//
-/// PMTopLevelManager manages LastUser info and collects common APIs used by
-/// top level pass managers.
-class VISIBILITY_HIDDEN PMTopLevelManager {
-public:
-
-  virtual unsigned getNumContainedManagers() {
-return PassManagers.size();
-  }
-
-  /// Schedule pass P for execution. Make sure that passes required by
-  /// P are run before P is run. Update analysis info maintained by
-  /// the manager. Remove dead passes. This is a recursive function.
-  void schedulePass(Pass *P);
-
-  /// This is implemented by top level pass manager and used by 
-  /// schedulePass() to add analysis info passes that are not available.
-  virtual void addTopLevelPass(Pass  *P) = 0;
-
-  /// Set pass P as the last user of the given analysis passes.
-  void setLastUser(std::vectorPass * AnalysisPasses, Pass *P);
-
-  /// Collect passes whose last user is P
-  void collectLastUses(std::vectorPass * LastUses, Pass *P);
-
-  

[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-01-12 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.119 - 1.120
---
Log message:

s/addPassToManager/add/g


---
Diffs of the changes:  (+4 -4)

 PassManager.cpp |8 
 1 files changed, 4 insertions(+), 4 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.119 
llvm/lib/VMCore/PassManager.cpp:1.120
--- llvm/lib/VMCore/PassManager.cpp:1.119   Fri Jan 12 12:52:44 2007
+++ llvm/lib/VMCore/PassManager.cpp Fri Jan 12 14:07:16 2007
@@ -558,7 +558,7 @@
 
 /// Add pass P into the PassVector. Update 
 /// AvailableAnalysis appropriately if ProcessAnalysis is true.
-void PMDataManager::addPassToManager(Pass *P, 
+void PMDataManager::add(Pass *P, 
  bool ProcessAnalysis) {
 
   // This manager is going to manage pass P. Set up analysis resolver
@@ -1207,7 +1207,7 @@
   MPPassManager *MPP = dynamic_castMPPassManager *(PMS.top());
 
   assert(MPP  Unable to find Module Pass Manager);
-  MPP-addPassToManager(this);
+  MPP-add(this);
 }
 
 /// Find appropriate Function Pass Manager or Call Graph Pass Manager
@@ -1245,7 +1245,7 @@
   }
 
   // Assign FPP as the manager of this pass.
-  FPP-addPassToManager(this);
+  FPP-add(this);
 }
 
 /// Find appropriate Basic Pass Manager or Call Graph Pass Manager
@@ -1285,7 +1285,7 @@
   }
 
   // Assign BBP as the manager of this pass.
-  BBP-addPassToManager(this);
+  BBP-add(this);
 }
 
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-01-11 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.115 - 1.116
---
Log message:

Use getPassManagerType() instead of dynamic_cast.


---
Diffs of the changes:  (+8 -18)

 PassManager.cpp |   26 --
 1 files changed, 8 insertions(+), 18 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.115 
llvm/lib/VMCore/PassManager.cpp:1.116
--- llvm/lib/VMCore/PassManager.cpp:1.115   Wed Jan 10 19:10:25 2007
+++ llvm/lib/VMCore/PassManager.cpp Thu Jan 11 13:59:06 2007
@@ -1686,17 +1686,14 @@
 /// add self into that manager. 
 void ModulePass::assignPassManager(PMStack PMS) {
 
-  MPPassManager *MPP = NULL;
-
   // Find Module Pass Manager
   while(!PMS.empty()) {
-
-MPP = dynamic_castMPPassManager *(PMS.top());
-if (MPP)
-  break;// Found it
-else
+if (PMS.top()-getPassManagerType()  PMT_ModulePassManager)
   PMS.pop();// Pop children pass managers
+else
+  break;
   }
+  MPPassManager *MPP = dynamic_castMPPassManager *(PMS.top());
 
   assert(MPP  Unable to find Module Pass Manager);
   MPP-addPassToManager(this);
@@ -1706,21 +1703,14 @@
 /// in the PM Stack and add self into that manager. 
 void FunctionPass::assignPassManager(PMStack PMS) {
 
-  FPPassManager *FPP = NULL;
-
   // Find Module Pass Manager (TODO : Or Call Graph Pass Manager)
   while(!PMS.empty()) {
-
-FPP = dynamic_castFPPassManager *(PMS.top());
-if (FPP)
-  break;// Found Function Pass Manager
-else if (dynamic_castBBPassManager *(PMS.top()))
-  PMS.pop();// Pop Basic Block Pass Manager
-// TODO : else if Pop Loop Pass Manager
+if (PMS.top()-getPassManagerType()  PMT_FunctionPassManager)
+  PMS.pop();
 else
-  break;// PMS.top() is either Module Pass Manager or Call Graph 
-// Pass Manager
+  break; 
   }
+  FPPassManager *FPP = dynamic_castFPPassManager *(PMS.top());
 
   // Create new Function Pass Manager
   if (!FPP) {



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-01-11 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.116 - 1.117
---
Log message:

Start using PMStack. Now each pass is responsibe for assinging 
a pass manager for itself. 

There is some opportunity to remove some dead code from PassManager.cpp.


---
Diffs of the changes:  (+24 -29)

 PassManager.cpp |   53 -
 1 files changed, 24 insertions(+), 29 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.116 
llvm/lib/VMCore/PassManager.cpp:1.117
--- llvm/lib/VMCore/PassManager.cpp:1.116   Thu Jan 11 13:59:06 2007
+++ llvm/lib/VMCore/PassManager.cpp Thu Jan 11 16:15:30 2007
@@ -24,6 +24,7 @@
 
 using namespace llvm;
 class llvm::PMDataManager;
+class llvm::PMStack;
 
 
//===--===//
 // Overview:
@@ -190,6 +191,9 @@
 
   void initializeAllAnalysisInfo();
 
+  // Active Pass Managers
+  PMStack activeStack;
+
 protected:
   
   /// Collection of pass managers
@@ -434,9 +438,8 @@
 //
 /// FunctionPassManagerImpl manages FPPassManagers
 class FunctionPassManagerImpl : public Pass,
-public PMDataManager,
-public PMTopLevelManager {
-
+public PMDataManager,
+public PMTopLevelManager {
 public:
 
   FunctionPassManagerImpl(int Depth) : PMDataManager(Depth) {
@@ -551,8 +554,8 @@
 //
 /// PassManagerImpl manages MPPassManagers
 class PassManagerImpl : public Pass,
-public PMDataManager,
-public PMTopLevelManager {
+public PMDataManager,
+public PMTopLevelManager {
 
 public:
 
@@ -1218,19 +1221,15 @@
 /// manage it.
 bool FunctionPassManagerImpl::addPass(Pass *P) {
 
-  if (!activeManager || !activeManager-addPass(P)) {
-activeManager = new FPPassManager(getDepth() + 1);
-// Inherit top level manager
-activeManager-setTopLevelManager(this-getTopLevelManager());
-
-// This top level manager is going to manage activeManager. 
-// Set up analysis resolver to connect them.
-AnalysisResolver *AR = new AnalysisResolver(*this);
-activeManager-setResolver(AR);
-
-addPassManager(activeManager);
-return activeManager-addPass(P);
+  if (activeStack.empty()) {
+FPPassManager *FPP = new FPPassManager(getDepth() + 1);
+FPP-setTopLevelManager(this-getTopLevelManager());
+addPassManager(FPP);
+activeStack.push(FPP);
   }
+
+  P-assignPassManager(activeStack);
+
   return true;
 }
 
@@ -1525,21 +1524,16 @@
 /// manage it.
 bool PassManagerImpl::addPass(Pass *P) {
 
-  if (!activeManager || !activeManager-addPass(P)) {
 
-activeManager = new MPPassManager(getDepth() + 1);
-
-// Inherit top level manager
-activeManager-setTopLevelManager(this-getTopLevelManager());
+  if (activeStack.empty()) {
+MPPassManager *MPP = new MPPassManager(getDepth() + 1);
+MPP-setTopLevelManager(this-getTopLevelManager());
+addPassManager(MPP);
+activeStack.push(MPP);
+  }
 
-// This top level manager is going to manage activeManager. 
-// Set up analysis resolver to connect them.
-AnalysisResolver *AR = new AnalysisResolver(*this);
-activeManager-setResolver(AR);
+  P-assignPassManager(activeStack);
 
-addPassManager(activeManager);
-return activeManager-addPass(P);
-  }
   return true;
 }
 
@@ -1618,6 +1612,7 @@
 
//===--===//
 // PMStack implementation
 //
+
 // Pop Pass Manager from the stack and clear its analysis info.
 void PMStack::pop() {
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-01-10 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.113 - 1.114
---
Log message:

Robustify assingPassManager() for Module, Function and Basic Block
Passes.

Robustify PMStack.push()

Add dump() routine to print PMStack.



---
Diffs of the changes:  (+73 -37)

 PassManager.cpp |  110 +---
 1 files changed, 73 insertions(+), 37 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.113 
llvm/lib/VMCore/PassManager.cpp:1.114
--- llvm/lib/VMCore/PassManager.cpp:1.113   Mon Jan  8 13:29:38 2007
+++ llvm/lib/VMCore/PassManager.cpp Wed Jan 10 18:19:00 2007
@@ -1616,14 +1616,39 @@
 }
 
 // Push PM on the stack and set its top level manager.
-void PMStack::push(PMDataManager *PM) {
+void PMStack::push(Pass *P) {
 
-  PMDataManager *Top = this-top();
+  PMDataManager *Top = NULL;
+  PMDataManager *PM = dynamic_castPMDataManager *(P);
+  assert (PM  Unable to push. Pass Manager expected);
 
-  // Inherit top level manager
-  PMTopLevelManager *TPM = Top-getTopLevelManager();
-  PM-setTopLevelManager(TPM);
-  TPM-addIndirectPassManager(PM);
+  if (this-empty()) {
+Top = PM;
+  } 
+  else {
+Top = this-top();
+PMTopLevelManager *TPM = Top-getTopLevelManager();
+
+assert (TPM  Unable to find top level manager);
+TPM-addIndirectPassManager(PM);
+PM-setTopLevelManager(TPM);
+  }
+
+  AnalysisResolver *AR = new AnalysisResolver(*Top);
+  P-setResolver(AR);
+
+  S.push_back(PM);
+}
+
+// Dump content of the pass manager stack.
+void PMStack::dump() {
+  for(std::dequePMDataManager *::iterator I = S.begin(),
+E = S.end(); I != E; ++I) {
+Pass *P = dynamic_castPass *(*I);
+printf (%s , P-getPassName());
+  }
+  if (!S.empty())
+printf (\n);
 }
 
 // Walk Pass Manager stack and set LastUse markers if any
@@ -1662,7 +1687,6 @@
   }
 
   assert(MPP  Unable to find Module Pass Manager);
-
   MPP-addPassToManager(this);
 }
 
@@ -1672,34 +1696,42 @@
 
   FPPassManager *FPP = NULL;
 
-  // Find Module Pass Manager
+  // Find Module Pass Manager (TODO : Or Call Graph Pass Manager)
   while(!PMS.empty()) {
 
 FPP = dynamic_castFPPassManager *(PMS.top());
-if (FPP || dynamic_castMPPassManager *(PMS.top()))
-  break;// Found it or it is not here
+if (FPP)
+  break;// Found Function Pass Manager
+else if (dynamic_castBBPassManager *(PMS.top()))
+  PMS.pop();// Pop Basic Block Pass Manager
+// TODO : else if Pop Loop Pass Manager
 else
-  PMS.pop();// Pop children pass managers
+  break;// PMS.top() is either Module Pass Manager or Call Graph 
+// Pass Manager
   }
 
+  // Create new Function Pass Manager
   if (!FPP) {
-/// Create new Function Pass Manager
-
-/// Function Pass Manager does not live by itself
 assert(!PMS.empty()  Unable to create Function Pass Manager);
-
 PMDataManager *PMD = PMS.top();
-
-/// PMD should be either Module Pass Manager or Call Graph Pass Manager
-assert(dynamic_castMPPassManager *(PMD)  
-   Unable to create Function Pass Manager);
 
+// [1] Create new Function Pass Manager
 FPP = new FPPassManager(PMD-getDepth() + 1);
-PMD-addPassToManager(FPP, false);
+
+// [2] Set up new manager's top level manager
+PMTopLevelManager *TPM = PMD-getTopLevelManager();
+TPM-addIndirectPassManager(FPP);
+
+// [3] Assign manager to manage this new manager. This may create
+// and push new managers into PMS
+Pass *P = dynamic_castPass *(FPP);
+P-assignPassManager(PMS);
+
+// [4] Push new manager into PMS
 PMS.push(FPP);
   }
 
-
+  // Assign FPP as the manager of this pass.
   FPP-addPassToManager(this);
 }
 
@@ -1709,33 +1741,37 @@
 
   BBPassManager *BBP = NULL;
 
-  // Find Module Pass Manager
-  while(!PMS.empty()) {
-
+  // Basic Pass Manager is a leaf pass manager. It does not handle
+  // any other pass manager.
+  if (!PMS.empty()) {
 BBP = dynamic_castBBPassManager *(PMS.top());
-if (BBP || dynamic_castFPPassManager *(PMS.top()))
-  break;// Found it or it is not here
-else
-  PMS.pop();// Pop children pass managers
   }
 
-  if (!BBP) {
-/// Create new BasicBlock Pass Manager
+  // If leaf manager is not Basic Block Pass manager then create new
+  // basic Block Pass manager.
 
-/// BasicBlock Pass Manager does not live by itself
+  if (!BBP) {
 assert(!PMS.empty()  Unable to create BasicBlock Pass Manager);
-
 PMDataManager *PMD = PMS.top();
-
-/// PMD should be Function Pass Manager
-assert(dynamic_castFPPassManager *(PMD)  
-   Unable to create BasicBlock Pass Manager);
 
+// [1] Create new Basic Block Manager
 BBP = new BBPassManager(PMD-getDepth() + 1);
-PMD-addPassToManager(BBP, false);
+
+// [2] Set up new manager's top level manager
+// Basic Block Pass Manager does not live by 

[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-01-10 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.114 - 1.115
---
Log message:

Add PassManagerType enum.


---
Diffs of the changes:  (+12 -0)

 PassManager.cpp |   12 
 1 files changed, 12 insertions(+)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.114 
llvm/lib/VMCore/PassManager.cpp:1.115
--- llvm/lib/VMCore/PassManager.cpp:1.114   Wed Jan 10 18:19:00 2007
+++ llvm/lib/VMCore/PassManager.cpp Wed Jan 10 19:10:25 2007
@@ -291,6 +291,10 @@
 return PassVector.size();
   }
 
+  virtual PassManagerType getPassManagerType() { 
+assert ( 0  Invalid use of getPassManagerType);
+return PMT_Unknown; 
+  }
 protected:
 
   // If a FunctionPass F is the last user of ModulePass info M
@@ -359,6 +363,10 @@
 BasicBlockPass *BP = static_castBasicBlockPass *(PassVector[N]);
 return BP;
   }
+
+  virtual PassManagerType getPassManagerType() { 
+return PMT_BasicBlockPassManager; 
+  }
 };
 
 
//===--===//
@@ -413,6 +421,9 @@
 return FP;
   }
 
+  virtual PassManagerType getPassManagerType() { 
+return PMT_FunctionPassManager; 
+  }
 private:
   // Active Pass Manager
   BBPassManager *activeBBPassManager;
@@ -529,6 +540,7 @@
 return MP;
   }
 
+  virtual PassManagerType getPassManagerType() { return PMT_ModulePassManager; 
}
 private:
   // Active Pass Manager
   FPPassManager *activeFunctionPassManager;



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2007-01-08 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.112 - 1.113
---
Log message:

Add PMStack, a Pass Manager stack. 
Eventually, Top level pass managers  will use this to keep track of
active pass managers. Eass pass will also learn how to find appropriate
manager from these managers stack. 


---
Diffs of the changes:  (+138 -0)

 PassManager.cpp |  138 
 1 files changed, 138 insertions(+)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.112 
llvm/lib/VMCore/PassManager.cpp:1.113
--- llvm/lib/VMCore/PassManager.cpp:1.112   Fri Jan  5 16:47:07 2007
+++ llvm/lib/VMCore/PassManager.cpp Mon Jan  8 13:29:38 2007
@@ -1514,7 +1514,9 @@
 bool PassManagerImpl::addPass(Pass *P) {
 
   if (!activeManager || !activeManager-addPass(P)) {
+
 activeManager = new MPPassManager(getDepth() + 1);
+
 // Inherit top level manager
 activeManager-setTopLevelManager(this-getTopLevelManager());
 
@@ -1601,4 +1603,140 @@
   TheTimeInfo = *TTI;
 }
 
+//===--===//
+// PMStack implementation
+//
+// Pop Pass Manager from the stack and clear its analysis info.
+void PMStack::pop() {
+
+  PMDataManager *Top = this-top();
+  Top-initializeAnalysisInfo();
+
+  S.pop_back();
+}
+
+// Push PM on the stack and set its top level manager.
+void PMStack::push(PMDataManager *PM) {
+
+  PMDataManager *Top = this-top();
+
+  // Inherit top level manager
+  PMTopLevelManager *TPM = Top-getTopLevelManager();
+  PM-setTopLevelManager(TPM);
+  TPM-addIndirectPassManager(PM);
+}
+
+// Walk Pass Manager stack and set LastUse markers if any
+// manager is transfering this priviledge to its parent manager
+void PMStack::handleLastUserOverflow() {
+
+  for(PMStack::iterator I = this-begin(), E = this-end(); I != E;) {
+
+PMDataManager *Child = *I++;
+if (I != E) {
+  PMDataManager *Parent = *I++;
+  PMTopLevelManager *TPM = Parent-getTopLevelManager();
+  std::vectorPass * TLU = Child-getTransferredLastUses();
+  if (!TLU.empty()) {
+Pass *P = dynamic_castPass *(Parent);
+TPM-setLastUser(TLU, P);
+  }
+}
+  }
+}
+
+/// Find appropriate Module Pass Manager in the PM Stack and
+/// add self into that manager. 
+void ModulePass::assignPassManager(PMStack PMS) {
+
+  MPPassManager *MPP = NULL;
+
+  // Find Module Pass Manager
+  while(!PMS.empty()) {
+
+MPP = dynamic_castMPPassManager *(PMS.top());
+if (MPP)
+  break;// Found it
+else
+  PMS.pop();// Pop children pass managers
+  }
+
+  assert(MPP  Unable to find Module Pass Manager);
+
+  MPP-addPassToManager(this);
+}
+
+/// Find appropriate Function Pass Manager or Call Graph Pass Manager
+/// in the PM Stack and add self into that manager. 
+void FunctionPass::assignPassManager(PMStack PMS) {
+
+  FPPassManager *FPP = NULL;
+
+  // Find Module Pass Manager
+  while(!PMS.empty()) {
+
+FPP = dynamic_castFPPassManager *(PMS.top());
+if (FPP || dynamic_castMPPassManager *(PMS.top()))
+  break;// Found it or it is not here
+else
+  PMS.pop();// Pop children pass managers
+  }
+
+  if (!FPP) {
+/// Create new Function Pass Manager
+
+/// Function Pass Manager does not live by itself
+assert(!PMS.empty()  Unable to create Function Pass Manager);
+
+PMDataManager *PMD = PMS.top();
+
+/// PMD should be either Module Pass Manager or Call Graph Pass Manager
+assert(dynamic_castMPPassManager *(PMD)  
+   Unable to create Function Pass Manager);
+
+FPP = new FPPassManager(PMD-getDepth() + 1);
+PMD-addPassToManager(FPP, false);
+PMS.push(FPP);
+  }
+
+
+  FPP-addPassToManager(this);
+}
+
+/// Find appropriate Basic Pass Manager or Call Graph Pass Manager
+/// in the PM Stack and add self into that manager. 
+void BasicBlockPass::assignPassManager(PMStack PMS) {
+
+  BBPassManager *BBP = NULL;
+
+  // Find Module Pass Manager
+  while(!PMS.empty()) {
+
+BBP = dynamic_castBBPassManager *(PMS.top());
+if (BBP || dynamic_castFPPassManager *(PMS.top()))
+  break;// Found it or it is not here
+else
+  PMS.pop();// Pop children pass managers
+  }
+
+  if (!BBP) {
+/// Create new BasicBlock Pass Manager
+
+/// BasicBlock Pass Manager does not live by itself
+assert(!PMS.empty()  Unable to create BasicBlock Pass Manager);
+
+PMDataManager *PMD = PMS.top();
+
+/// PMD should be Function Pass Manager
+assert(dynamic_castFPPassManager *(PMD)  
+   Unable to create BasicBlock Pass Manager);
+
+BBP = new BBPassManager(PMD-getDepth() + 1);
+PMD-addPassToManager(BBP, false);
+PMS.push(BBP);
+  }
+
+  BBP-addPassToManager(this);
+}
+
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-20 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.109 - 1.110
---
Log message:

At the beginning of run, initialize analyis info availability for _ALL_
pass managers. Otherwise, stale available analysis info, from the managers not
yet run, may cause pass manager to take wrong turn.

This fixes CBE test failures reported by nightly tester.


---
Diffs of the changes:  (+19 -5)

 PassManager.cpp |   24 +++-
 1 files changed, 19 insertions(+), 5 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.109 
llvm/lib/VMCore/PassManager.cpp:1.110
--- llvm/lib/VMCore/PassManager.cpp:1.109   Tue Dec 19 14:12:38 2006
+++ llvm/lib/VMCore/PassManager.cpp Wed Dec 20 18:16:50 2006
@@ -189,6 +189,8 @@
   void dumpPasses() const;
   void dumpArguments() const;
 
+  void initializeAllAnalysisInfo();
+
 protected:
   
   /// Collection of pass managers
@@ -773,6 +775,21 @@
   cerr  \n;
 }
 
+void PMTopLevelManager::initializeAllAnalysisInfo() {
+  
+  for (std::vectorPass *::iterator I = PassManagers.begin(),
+ E = PassManagers.end(); I != E; ++I) {
+PMDataManager *PMD = dynamic_castPMDataManager *(*I);
+assert(PMD  This is not a PassManager);
+PMD-initializeAnalysisInfo();
+  }
+  
+  // Initailize other pass managers
+  for (std::vectorPMDataManager *::iterator I = IndirectPassManagers.begin(),
+ E = IndirectPassManagers.end(); I != E; ++I)
+(*I)-initializeAnalysisInfo();
+}
+
 
//===--===//
 // PMDataManager implementation
 
@@ -1051,7 +1068,6 @@
 return false;
 
   bool Changed = doInitialization(F);
-  initializeAnalysisInfo();
 
   std::string Msg1 = Executing Pass ';
   std::string Msg3 = ' Made Modification ';
@@ -1240,6 +1256,7 @@
   dumpArguments();
   dumpPasses();
 
+  initializeAllAnalysisInfo();
   for (unsigned Index = 0; Index  getNumContainedManagers(); ++Index) {  
 FPPassManager *FP = getContainedManager(Index);
 Changed |= FP-runOnFunction(F);
@@ -1322,8 +1339,6 @@
   if (F.isExternal())
 return false;
 
-  initializeAnalysisInfo();
-
   std::string Msg1 = Executing Pass ';
   std::string Msg3 = ' Made Modification ';
 
@@ -1357,7 +1372,6 @@
 bool FPPassManager::runOnModule(Module M) {
 
   bool Changed = doInitialization(M);
-  initializeAnalysisInfo();
 
   for(Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
 this-runOnFunction(*I);
@@ -1462,7 +1476,6 @@
 bool
 MPPassManager::runOnModule(Module M) {
   bool Changed = false;
-  initializeAnalysisInfo();
 
   std::string Msg1 = Executing Pass ';
   std::string Msg3 = ' Made Modification ';
@@ -1528,6 +1541,7 @@
   dumpArguments();
   dumpPasses();
 
+  initializeAllAnalysisInfo();
   for (unsigned Index = 0; Index  getNumContainedManagers(); ++Index) {  
 MPPassManager *MP = getContainedManager(Index);
 Changed |= MP-runOnModule(M);



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-19 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.107 - 1.108
---
Log message:

s/BasicBlockPassManager/BBPassManager/g
s/ModulePassManager/MPPassManager/g
s/FunctionPassManagerImpl_New/FunctionPassManagerImpl/g
s/PassManagerImpl_New/PassManagerImpl/g

Introduce FPPassManager to manage function passes and
BBPassManagers.

Now FunctionPassManagerImpl is an implementation class
used by externally visible FunctionPassManager to manage
FPPassManagers.

Module pass manager (MPPassManager) now manages FPPassManagers
and ModulePasses.



---
Diffs of the changes:  (+230 -138)

 PassManager.cpp |  368 +++-
 1 files changed, 230 insertions(+), 138 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.107 
llvm/lib/VMCore/PassManager.cpp:1.108
--- llvm/lib/VMCore/PassManager.cpp:1.107   Fri Dec 15 18:56:26 2006
+++ llvm/lib/VMCore/PassManager.cpp Tue Dec 19 13:46:59 2006
@@ -36,7 +36,7 @@
 // information before it is consumed by another pass.
 //
 // Pass Manager Infrastructure uses multiple pass managers.  They are
-// PassManager, FunctionPassManager, ModulePassManager, BasicBlockPassManager.
+// PassManager, FunctionPassManager, MPPassManager, FPPassManager, 
BBPassManager.
 // This class hierarcy uses multiple inheritance but pass managers do not 
derive
 // from another pass manager.
 //
@@ -58,9 +58,9 @@
 // a place to implement common pass manager APIs. All pass managers derive from
 // PMDataManager.
 //
-// [o] class BasicBlockPassManager : public FunctionPass, public PMDataManager;
+// [o] class BBPassManager : public FunctionPass, public PMDataManager;
 //
-// BasicBlockPassManager manages BasicBlockPasses.
+// BBPassManager manages BasicBlockPasses.
 //
 // [o] class FunctionPassManager;
 //
@@ -70,12 +70,15 @@
 // [o] class FunctionPassManagerImpl : public ModulePass, PMDataManager,
 // public PMTopLevelManager;
 //
-// FunctionPassManagerImpl is a top level manager. It manages FunctionPasses
-// and BasicBlockPassManagers.
+// FunctionPassManagerImpl is a top level manager. It manages FPPassManagers
 //
-// [o] class ModulePassManager : public Pass, public PMDataManager;
+// [o] class FPPassManager : public ModulePass, public PMDataManager;
 //
-// ModulePassManager manages ModulePasses and FunctionPassManagerImpls.
+// FPPassManager manages FunctionPasses and BBPassManagers
+//
+// [o] class MPPassManager : public Pass, public PMDataManager;
+//
+// MPPassManager manages ModulePasses and FPPassManagers
 //
 // [o] class PassManager;
 //
@@ -86,7 +89,7 @@
 // public PMDTopLevelManager
 //
 // PassManagerImpl is a top level pass manager responsible for managing
-// ModulePassManagers.
+// MPPassManagers.
 
//===--===//
 
 namespace llvm {
@@ -126,12 +129,8 @@
 class VISIBILITY_HIDDEN PMTopLevelManager {
 public:
 
-  inline std::vectorPass *::iterator passManagersBegin() { 
-return PassManagers.begin(); 
-  }
-
-  inline std::vectorPass *::iterator passManagersEnd() { 
-return PassManagers.end();
+  virtual unsigned getNumContainedManagers() {
+return PassManagers.size();
   }
 
   /// Schedule pass P for execution. Make sure that passes required by
@@ -194,11 +193,13 @@
   void dumpPasses() const;
   void dumpArguments() const;
 
-private:
+protected:
   
   /// Collection of pass managers
   std::vectorPass * PassManagers;
 
+private:
+
   /// Collection of pass managers that are not directly maintained
   /// by this pass manager
   std::vectorPMDataManager * IndirectPassManagers;
@@ -318,16 +319,16 @@
 };
 
 
//===--===//
-// BasicBlockPassManager
+// BBPassManager
 //
-/// BasicBlockPassManager manages BasicBlockPass. It batches all the
+/// BBPassManager manages BasicBlockPass. It batches all the
 /// pass together and sequence them to process one basic block before
 /// processing next basic block.
-class VISIBILITY_HIDDEN BasicBlockPassManager : public PMDataManager, 
-  public FunctionPass {
+class VISIBILITY_HIDDEN BBPassManager : public PMDataManager, 
+public FunctionPass {
 
 public:
-  BasicBlockPassManager(int Depth) : PMDataManager(Depth) { }
+  BBPassManager(int Depth) : PMDataManager(Depth) { }
 
   /// Add a pass into a passmanager queue. 
   bool addPass(Pass *p);
@@ -364,55 +365,27 @@
 };
 
 
//===--===//
-// FunctionPassManagerImpl_New
+// FPPassManager
 //
-/// FunctionPassManagerImpl_New manages FunctionPasses and
-/// BasicBlockPassManagers.  It batches all function passes and basic block 
pass
-/// managers together and sequence them to process one function at a time 
before
-/// processing next function.
-class 

[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-19 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.108 - 1.109
---
Log message:

Now, there is additional layer, referred in the comment,
in place to handle this correctly.


---
Diffs of the changes:  (+0 -11)

 PassManager.cpp |   11 ---
 1 files changed, 11 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.108 
llvm/lib/VMCore/PassManager.cpp:1.109
--- llvm/lib/VMCore/PassManager.cpp:1.108   Tue Dec 19 13:46:59 2006
+++ llvm/lib/VMCore/PassManager.cpp Tue Dec 19 14:12:38 2006
@@ -153,10 +153,6 @@
   /// then return NULL.
   Pass *findAnalysisPass(AnalysisID AID);
 
-  inline void clearManagers() { 
-PassManagers.clear();
-  }
-
   virtual ~PMTopLevelManager() {
 for (std::vectorPass *::iterator I = PassManagers.begin(),
E = PassManagers.end(); I != E; ++I)
@@ -1150,13 +1146,6 @@
 }
 
 FunctionPassManager::~FunctionPassManager() {
-  // Note : FPM maintains one entry in PassManagers vector.
-  // This one entry is FPM itself. This is not ideal. One
-  // alternative is have one additional layer between
-  // FunctionPassManager and FunctionPassManagerImpl.
-  // Meanwhile, to avoid going into infinte loop, first
-  // remove FPM from its PassMangers vector.
-  FPM-clearManagers();
   delete FPM;
 }
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-15 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.103 - 1.104
---
Log message:

Move PMTopLevelManager and TImingInfo into anon namespace.


---
Diffs of the changes:  (+15 -8)

 PassManager.cpp |   23 +++
 1 files changed, 15 insertions(+), 8 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.103 
llvm/lib/VMCore/PassManager.cpp:1.104
--- llvm/lib/VMCore/PassManager.cpp:1.103   Thu Dec 14 18:08:26 2006
+++ llvm/lib/VMCore/PassManager.cpp Fri Dec 15 13:39:30 2006
@@ -21,7 +21,9 @@
 #include llvm/Support/ManagedStatic.h
 #include vector
 #include map
+
 using namespace llvm;
+class llvm::PMDataManager;
 
 
//===--===//
 // Overview:
@@ -114,16 +116,14 @@
 } // End of llvm namespace
 
 #ifndef USE_OLD_PASSMANAGER
-namespace llvm {
-
-class PMDataManager;
+namespace {
 
 
//===--===//
 // PMTopLevelManager
 //
 /// PMTopLevelManager manages LastUser info and collects common APIs used by
 /// top level pass managers.
-class PMTopLevelManager {
+class VISIBILITY_HIDDEN PMTopLevelManager {
 public:
 
   inline std::vectorPass *::iterator passManagersBegin() { 
@@ -210,10 +210,13 @@
   /// Immutable passes are managed by top level manager.
   std::vectorImmutablePass * ImmutablePasses;
 };
+
+} // End of anon namespace
   
 
//===--===//
 // PMDataManager
 
+namespace llvm {
 /// PMDataManager provides the common place to manage the analysis data
 /// used by pass managers.
 class PMDataManager {
@@ -365,7 +368,7 @@
 /// BasicBlockPassManager manages BasicBlockPass. It batches all the
 /// pass together and sequence them to process one basic block before
 /// processing next basic block.
-class BasicBlockPassManager : public PMDataManager, 
+class VISIBILITY_HIDDEN BasicBlockPassManager : public PMDataManager, 
   public FunctionPass {
 
 public:
@@ -390,7 +393,7 @@
 
   // Print passes managed by this manager
   void dumpPassStructure(unsigned Offset) {
-llvm::cerr  std::string(Offset*2, ' ')  BasicBLockPass Manager\n;
+llvm::cerr  std::string(Offset*2, ' ')  BasicBlockPass Manager\n;
 for (std::vectorPass *::iterator I = passVectorBegin(),
E = passVectorEnd(); I != E; ++I)  {
   (*I)-dumpPassStructure(Offset + 1);
@@ -574,13 +577,17 @@
   ModulePassManager *activeManager;
 };
 
+} // End of llvm namespace
+
+namespace {
+
 
//===--===//
 // TimingInfo Class - This class is used to calculate information about the
 // amount of time each pass takes to execute.  This only happens when
 // -time-passes is enabled on the command line.
 //
 
-class TimingInfo {
+class VISIBILITY_HIDDEN TimingInfo {
   std::mapPass*, Timer TimingData;
   TimerGroup TG;
 
@@ -623,7 +630,7 @@
 
 static TimingInfo *TheTimeInfo;
 
-} // End of llvm namespace
+} // End of anon namespace
 
 
//===--===//
 // PMTopLevelManager implementation



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-15 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.104 - 1.105
---
Log message:

Mark dump* routines const routines.


---
Diffs of the changes:  (+61 -54)

 PassManager.cpp |  115 +---
 1 files changed, 61 insertions(+), 54 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.104 
llvm/lib/VMCore/PassManager.cpp:1.105
--- llvm/lib/VMCore/PassManager.cpp:1.104   Fri Dec 15 13:39:30 2006
+++ llvm/lib/VMCore/PassManager.cpp Fri Dec 15 14:13:01 2006
@@ -191,8 +191,8 @@
   }
 
   // Print passes managed by this top level manager.
-  void dumpPasses();
-  void dumpArguments();
+  void dumpPasses() const;
+  void dumpArguments() const;
 
 private:
   
@@ -284,55 +284,14 @@
   PMTopLevelManager *getTopLevelManager() { return TPM; }
   void setTopLevelManager(PMTopLevelManager *T) { TPM = T; }
 
-  unsigned getDepth() { return Depth; }
-
-  // Print list of passes that are last used by P.
-  void dumpLastUses(Pass *P, unsigned Offset) {
-
-std::vectorPass * LUses;
-
-assert (TPM  Top Level Manager is missing);
-TPM-collectLastUses(LUses, P);
-
-for (std::vectorPass *::iterator I = LUses.begin(),
-   E = LUses.end(); I != E; ++I) {
-  llvm::cerr  --  std::string(Offset*2, ' ');
-  (*I)-dumpPassStructure(0);
-}
-  }
-
-  void dumpPassArguments() {
-for(std::vectorPass *::iterator I = PassVector.begin(),
-  E = PassVector.end(); I != E; ++I) {
-  if (PMDataManager *PMD = dynamic_castPMDataManager *(*I))
-PMD-dumpPassArguments();
-  else
-if (const PassInfo *PI = (*I)-getPassInfo())
-  if (!PI-isAnalysisGroup())
-cerr   -  PI-getPassArgument();
-}
-  }
-
-  void dumpPassInfo(Pass *P,  std::string Msg1, std::string Msg2) {
-if (PassDebugging_New  Executions)
-  return;
-cerr  (void*)this  std::string(getDepth()*2+1, ' ');
-cerr  Msg1;
-cerr  P-getPassName();
-cerr  Msg2;
-  }
+  unsigned getDepth() const { return Depth; }
 
+  // Print routines used by debug-pass
+  void dumpLastUses(Pass *P, unsigned Offset) const;
+  void dumpPassArguments() const;
+  void dumpPassInfo(Pass *P,  std::string Msg1, std::string Msg2) const;
   void dumpAnalysisSetInfo(const char *Msg, Pass *P,
-   const std::vectorAnalysisID Set) {
-if (PassDebugging_New = Details  !Set.empty()) {
-  cerr  (void*)P  std::string(getDepth()*2+3, ' ')  Msg   
Analyses:;
-  for (unsigned i = 0; i != Set.size(); ++i) {
-if (i) cerr  ,;
-cerr Set[i]-getPassName();
-  }
-  cerr  \n;
-}
-  }
+   const std::vectorAnalysisID Set) const;
 
   std::vectorPass * getTransferredLastUses() {
 return TransferLastUses;
@@ -728,26 +687,25 @@
 }
 
 // Print passes managed by this top level manager.
-void PMTopLevelManager::dumpPasses() {
+void PMTopLevelManager::dumpPasses() const {
 
   // Print out the immutable passes
   for (unsigned i = 0, e = ImmutablePasses.size(); i != e; ++i) {
 ImmutablePasses[i]-dumpPassStructure(0);
   }
   
-  for (std::vectorPass *::iterator I = PassManagers.begin(),
+  for (std::vectorPass *::const_iterator I = PassManagers.begin(),
  E = PassManagers.end(); I != E; ++I)
 (*I)-dumpPassStructure(1);
-
 }
 
-void PMTopLevelManager::dumpArguments() {
+void PMTopLevelManager::dumpArguments() const {
 
   if (PassDebugging_New  Arguments)
 return;
 
   cerr  Pass Arguments: ;
-  for (std::vectorPass *::iterator I = PassManagers.begin(),
+  for (std::vectorPass *::const_iterator I = PassManagers.begin(),
  E = PassManagers.end(); I != E; ++I) {
 PMDataManager *PMD = dynamic_castPMDataManager *(*I);
 assert(PMD  This is not a PassManager);
@@ -948,6 +906,55 @@
   return NULL;
 }
 
+// Print list of passes that are last used by P.
+void PMDataManager::dumpLastUses(Pass *P, unsigned Offset) const{
+
+  std::vectorPass * LUses;
+  
+  assert (TPM  Top Level Manager is missing);
+  TPM-collectLastUses(LUses, P);
+  
+  for (std::vectorPass *::iterator I = LUses.begin(),
+ E = LUses.end(); I != E; ++I) {
+llvm::cerr  --  std::string(Offset*2, ' ');
+(*I)-dumpPassStructure(0);
+  }
+}
+
+void PMDataManager::dumpPassArguments() const {
+  for(std::vectorPass *::const_iterator I = PassVector.begin(),
+E = PassVector.end(); I != E; ++I) {
+if (PMDataManager *PMD = dynamic_castPMDataManager *(*I))
+  PMD-dumpPassArguments();
+else
+  if (const PassInfo *PI = (*I)-getPassInfo())
+if (!PI-isAnalysisGroup())
+  cerr   -  PI-getPassArgument();
+  }
+}
+
+void PMDataManager:: dumpPassInfo(Pass *P,  std::string Msg1, 
+  std::string Msg2) const {
+  if (PassDebugging_New  Executions)
+return;
+  cerr  (void*)this  std::string(getDepth()*2+1, ' ');
+  cerr  Msg1;
+  cerr  P-getPassName();
+  cerr  

[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-15 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.105 - 1.106
---
Log message:

Cosmetic changes, based on Chris's review.


---
Diffs of the changes:  (+21 -27)

 PassManager.cpp |   48 +---
 1 files changed, 21 insertions(+), 27 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.105 
llvm/lib/VMCore/PassManager.cpp:1.106
--- llvm/lib/VMCore/PassManager.cpp:1.105   Fri Dec 15 14:13:01 2006
+++ llvm/lib/VMCore/PassManager.cpp Fri Dec 15 16:57:49 2006
@@ -221,7 +221,7 @@
 /// used by pass managers.
 class PMDataManager {
 public:
-  PMDataManager(int D) : TPM(NULL), Depth(D) {
+  PMDataManager(int Depth) : TPM(NULL), Depth(Depth) {
 initializeAnalysisInfo();
   }
 
@@ -331,7 +331,7 @@
   public FunctionPass {
 
 public:
-  BasicBlockPassManager(int D) : PMDataManager(D) { }
+  BasicBlockPassManager(int Depth) : PMDataManager(Depth) { }
 
   /// Add a pass into a passmanager queue. 
   bool addPass(Pass *p);
@@ -372,7 +372,7 @@
 public PMDataManager,
 public PMTopLevelManager {
 public:
-  FunctionPassManagerImpl_New(int D) : PMDataManager(D) { 
+  FunctionPassManagerImpl_New(int Depth) : PMDataManager(Depth) { 
 activeBBPassManager = NULL;
   }
   ~FunctionPassManagerImpl_New() { /* TODO */ };
@@ -449,7 +449,7 @@
 class ModulePassManager : public Pass, public PMDataManager {
  
 public:
-  ModulePassManager(int D) : PMDataManager(D) { 
+  ModulePassManager(int Depth) : PMDataManager(Depth) { 
 activeFunctionPassManager = NULL; 
   }
   
@@ -490,7 +490,7 @@
 
 public:
 
-  PassManagerImpl_New(int D) : PMDataManager(D) {
+  PassManagerImpl_New(int Depth) : PMDataManager(Depth) {
 activeManager = NULL;
   }
 
@@ -674,12 +674,9 @@
 
 // If Pass not found then check the interfaces implemented by Immutable 
Pass
 if (!P) {
-  const std::vectorconst PassInfo* ImmPI = 
-PI-getInterfacesImplemented();
-  for (unsigned Index = 0, End = ImmPI.size(); 
-   P == NULL  Index != End; ++Index)
-if (ImmPI[Index] == AID)
-  P = *I;
+  const std::vectorconst PassInfo* ImmPI = 
PI-getInterfacesImplemented();
+  if (std::find(ImmPI.begin(), ImmPI.end(), AID) != ImmPI.end())
+P = *I;
 }
   }
 
@@ -756,16 +753,13 @@
   const std::vectorAnalysisID PreservedSet = AnUsage.getPreservedSet();
   for (std::mapAnalysisID, Pass*::iterator I = AvailableAnalysis.begin(),
  E = AvailableAnalysis.end(); I != E; ) {
-if (std::find(PreservedSet.begin(), PreservedSet.end(), I-first) == 
+std::mapAnalysisID, Pass*::iterator Info = I++;
+if (std::find(PreservedSet.begin(), PreservedSet.end(), Info-first) == 
 PreservedSet.end()) {
   // Remove this analysis
-  if (!dynamic_castImmutablePass*(I-second)) {
-std::mapAnalysisID, Pass*::iterator J = I++;
-AvailableAnalysis.erase(J);
-  } else
-++I;
-} else
-  ++I;
+  if (!dynamic_castImmutablePass*(Info-second))
+AvailableAnalysis.erase(Info);
+}
   }
 }
 
@@ -975,8 +969,8 @@
   if (!BP)
 return false;
 
-  // If this pass does not preserve anlysis that is used by other passes
-  // managed by this manager than it is not a suiable pass for this manager.
+  // If this pass does not preserve analysis that is used by other passes
+  // managed by this manager than it is not a suitable pass for this manager.
   if (!manageablePass(P))
 return false;
 
@@ -1026,7 +1020,7 @@
   recordAvailableAnalysis(P);
   removeDeadPasses(P, Msg2);
 }
-  return Changed | doFinalization(F);
+  return Changed |= doFinalization(F);
 }
 
 // Implement doInitialization and doFinalization
@@ -1197,8 +1191,8 @@
   if (!FP)
 return false;
 
-  // If this pass does not preserve anlysis that is used by other passes
-  // managed by this manager than it is not a suiable pass for this manager.
+  // If this pass does not preserve analysis that is used by other passes
+  // managed by this manager than it is not a suitable pass for this manager.
   if (!manageablePass(P))
 return false;
 
@@ -1224,7 +1218,7 @@
   for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
 this-runOnFunction(*I);
 
-  return Changed | doFinalization(M);
+  return Changed |= doFinalization(M);
 }
 
 /// Execute all of the passes scheduled for execution by invoking 
@@ -1366,8 +1360,8 @@
   if (!MP)
 return false;
 
-  // If this pass does not preserve anlysis that is used by other passes
-  // managed by this manager than it is not a suiable pass for this manager.
+  // If this pass does not preserve analysis that is used by other passes
+  // managed by this manager than it is not a suitable pass for this manager.
   if (!manageablePass(P))
 return false;
 



___
llvm-commits mailing 

[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-15 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.106 - 1.107
---
Log message:

Add getNumContainedPasses() and getContainedPass() inteface and use
it instead of passVectorBegin/End().


---
Diffs of the changes:  (+91 -95)

 PassManager.cpp |  186 +++-
 1 files changed, 91 insertions(+), 95 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.106 
llvm/lib/VMCore/PassManager.cpp:1.107
--- llvm/lib/VMCore/PassManager.cpp:1.106   Fri Dec 15 16:57:49 2006
+++ llvm/lib/VMCore/PassManager.cpp Fri Dec 15 18:56:26 2006
@@ -272,14 +272,6 @@
   /// then return NULL.
   Pass *findAnalysisPass(AnalysisID AID, bool Direction);
 
-  inline std::vectorPass *::iterator passVectorBegin() { 
-return PassVector.begin(); 
-  }
-
-  inline std::vectorPass *::iterator passVectorEnd() { 
-return PassVector.end();
-  }
-
   // Access toplevel manager
   PMTopLevelManager *getTopLevelManager() { return TPM; }
   void setTopLevelManager(PMTopLevelManager *T) { TPM = T; }
@@ -297,6 +289,10 @@
 return TransferLastUses;
   }
 
+  virtual unsigned getNumContainedPasses() { 
+return PassVector.size();
+  }
+
 protected:
 
   // If a FunctionPass F is the last user of ModulePass info M
@@ -308,6 +304,9 @@
   // Top level manager.
   PMTopLevelManager *TPM;
 
+  // Collection of pass that are managed by this manager
+  std::vectorPass * PassVector;
+
 private:
   // Set of available Analysis. This information is used while scheduling 
   // pass. If a pass requires an analysis which is not not available then 
@@ -315,9 +314,6 @@
   // scheduled to run.
   std::mapAnalysisID, Pass* AvailableAnalysis;
 
-  // Collection of pass that are managed by this manager
-  std::vectorPass * PassVector;
-
   unsigned Depth;
 };
 
@@ -353,12 +349,18 @@
   // Print passes managed by this manager
   void dumpPassStructure(unsigned Offset) {
 llvm::cerr  std::string(Offset*2, ' ')  BasicBlockPass Manager\n;
-for (std::vectorPass *::iterator I = passVectorBegin(),
-   E = passVectorEnd(); I != E; ++I)  {
-  (*I)-dumpPassStructure(Offset + 1);
-  dumpLastUses(*I, Offset+1);
+for (unsigned Index = 0; Index  getNumContainedPasses(); ++Index) {
+  BasicBlockPass *BP = getContainedPass(Index);
+  BP-dumpPassStructure(Offset + 1);
+  dumpLastUses(BP, Offset+1);
 }
   }
+
+  BasicBlockPass *getContainedPass(unsigned N) {
+assert ( N  PassVector.size()  Pass number out of range!);
+BasicBlockPass *BP = static_castBasicBlockPass *(PassVector[N]);
+return BP;
+  }
 };
 
 
//===--===//
@@ -427,14 +429,20 @@
 
   // Print passes managed by this manager
   void dumpPassStructure(unsigned Offset) {
-llvm::cerr  std::string(Offset*2, ' ')  FunctionPass Manager\n;
-for (std::vectorPass *::iterator I = passVectorBegin(),
-   E = passVectorEnd(); I != E; ++I)  {
-  (*I)-dumpPassStructure(Offset + 1);
-  dumpLastUses(*I, Offset+1);
+llvm::cerr  std::string(Offset*2, ' ')  FunctionPass Manager 42\n;
+for (unsigned Index = 0; Index  getNumContainedPasses(); ++Index) {
+  FunctionPass *FP = getContainedPass(Index);
+  FP-dumpPassStructure(Offset + 1);
+  dumpLastUses(FP, Offset+1);
 }
   }
 
+  FunctionPass *getContainedPass(unsigned N) {
+assert ( N  PassVector.size()  Pass number out of range!);
+FunctionPass *FP = static_castFunctionPass *(PassVector[N]);
+return FP;
+  }
+
 private:
   // Active Pass Managers
   BasicBlockPassManager *activeBBPassManager;
@@ -468,13 +476,19 @@
   // Print passes managed by this manager
   void dumpPassStructure(unsigned Offset) {
 llvm::cerr  std::string(Offset*2, ' ')  ModulePass Manager\n;
-for (std::vectorPass *::iterator I = passVectorBegin(),
-   E = passVectorEnd(); I != E; ++I)  {
-  (*I)-dumpPassStructure(Offset + 1);
-  dumpLastUses(*I, Offset+1);
+for (unsigned Index = 0; Index  getNumContainedPasses(); ++Index) {
+  ModulePass *MP = getContainedPass(Index);
+  MP-dumpPassStructure(Offset + 1);
+  dumpLastUses(MP, Offset+1);
 }
   }
 
+  ModulePass *getContainedPass(unsigned N) {
+assert ( N  PassVector.size()  Pass number out of range!);
+ModulePass *MP = static_castModulePass *(PassVector[N]);
+return MP;
+  }
+
 private:
   // Active Pass Manager
   FunctionPassManagerImpl_New *activeFunctionPassManager;
@@ -995,30 +1009,28 @@
   std::string Msg3 = ' Made Modification ';
 
   for (Function::iterator I = F.begin(), E = F.end(); I != E; ++I)
-for (std::vectorPass *::iterator itr = passVectorBegin(),
-   e = passVectorEnd(); itr != e; ++itr) {
-  Pass *P = *itr;
+for (unsigned Index = 0; Index  getNumContainedPasses(); ++Index) {
+  BasicBlockPass *BP = getContainedPass(Index);
   AnalysisUsage AnUsage;
-  

[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-14 Thread Chris Lattner


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.101 - 1.102
---
Log message:

random minor typographical changes


---
Diffs of the changes:  (+9 -14)

 PassManager.cpp |   23 +--
 1 files changed, 9 insertions(+), 14 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.101 
llvm/lib/VMCore/PassManager.cpp:1.102
--- llvm/lib/VMCore/PassManager.cpp:1.101   Wed Dec 13 18:59:42 2006
+++ llvm/lib/VMCore/PassManager.cpp Thu Dec 14 12:22:14 2006
@@ -33,12 +33,12 @@
 //   o If Analysis information is dirtied by a pass then regenerate Analysis 
 // information before it is consumed by another pass.
 //
-// Pass Manager Infrastructure uses multipe pass managers. They are 
PassManager,
-// FunctionPassManager, ModulePassManager, BasicBlockPassManager. This class 
-// hierarcy uses multiple inheritance but pass managers do not derive from
-// another pass manager.
+// Pass Manager Infrastructure uses multiple pass managers.  They are
+// PassManager, FunctionPassManager, ModulePassManager, BasicBlockPassManager.
+// This class hierarcy uses multiple inheritance but pass managers do not 
derive
+// from another pass manager.
 //
-// PassManager and FunctionPassManager are two top level pass manager that
+// PassManager and FunctionPassManager are two top-level pass manager that
 // represents the external interface of this entire pass manager infrastucture.
 //
 // Important classes :
@@ -124,7 +124,6 @@
 /// PMTopLevelManager manages LastUser info and collects common APIs used by
 /// top level pass managers.
 class PMTopLevelManager {
-
 public:
 
   inline std::vectorPass *::iterator passManagersBegin() { 
@@ -160,7 +159,6 @@
   }
 
   virtual ~PMTopLevelManager() {
-
 for (std::vectorPass *::iterator I = PassManagers.begin(),
E = PassManagers.end(); I != E; ++I)
   delete *I;
@@ -219,9 +217,7 @@
 /// PMDataManager provides the common place to manage the analysis data
 /// used by pass managers.
 class PMDataManager {
-
 public:
-
   PMDataManager(int D) : TPM(NULL), Depth(D) {
 initializeAnalysisInfo();
   }
@@ -250,7 +246,7 @@
 
   /// Add pass P into the PassVector. Update 
   /// AvailableAnalysis appropriately if ProcessAnalysis is true.
-  void addPassToManager (Pass *P, bool ProcessAnalysis = true);
+  void addPassToManager(Pass *P, bool ProcessAnalysis = true);
 
   /// Initialize available analysis information.
   void initializeAnalysisInfo() { 
@@ -364,7 +360,7 @@
 /// pass together and sequence them to process one basic block before
 /// processing next basic block.
 class BasicBlockPassManager : public PMDataManager, 
-  public FunctionPass {
+  public FunctionPass {
 
 public:
   BasicBlockPassManager(int D) : PMDataManager(D) { }
@@ -482,8 +478,7 @@
 /// ModulePassManager manages ModulePasses and function pass managers.
 /// It batches all Module passes  passes and function pass managers together 
and
 /// sequence them to process one module.
-class ModulePassManager : public Pass,
-  public PMDataManager {
+class ModulePassManager : public Pass, public PMDataManager {
  
 public:
   ModulePassManager(int D) : PMDataManager(D) { 
@@ -965,7 +960,7 @@
   if (!manageablePass(P))
 return false;
 
-  addPassToManager (BP);
+  addPassToManager(BP);
 
   return true;
 }



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-14 Thread Devang Patel


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::vectorPass * 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::vectorPass * ForcedLastUses;
+  // Current pass manage is requesting parent manager to record parent
+  // manager as the last user of these TrransferLastUses passes.
+  std::vectorPass * 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::vectorPass * 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::vectorPass * 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


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-13 Thread Chris Lattner


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.95 - 1.96
---
Log message:

fit in 80 cols


---
Diffs of the changes:  (+7 -6)

 PassManager.cpp |   13 +++--
 1 files changed, 7 insertions(+), 6 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.95 
llvm/lib/VMCore/PassManager.cpp:1.96
--- llvm/lib/VMCore/PassManager.cpp:1.95Wed Dec 13 15:13:31 2006
+++ llvm/lib/VMCore/PassManager.cpp Wed Dec 13 15:56:10 2006
@@ -366,10 +366,10 @@
 
//===--===//
 // FunctionPassManagerImpl_New
 //
-/// FunctionPassManagerImpl_New manages FunctionPasses and 
BasicBlockPassManagers.
-/// It batches all function passes and basic block pass managers together and
-/// sequence them to process one function at a time before processing next
-/// function.
+/// FunctionPassManagerImpl_New manages FunctionPasses and
+/// BasicBlockPassManagers.  It batches all function passes and basic block 
pass
+/// managers together and sequence them to process one function at a time 
before
+/// processing next function.
 class FunctionPassManagerImpl_New : public ModulePass, 
 public PMDataManager,
 public PMTopLevelManager {
@@ -1184,8 +1184,9 @@
   
activeFunctionPassManager-setTopLevelManager(this-getTopLevelManager());
 
   // Add new manager into top level manager's indirect passes list
-  PMDataManager *PMD = dynamic_castPMDataManager 
*(activeFunctionPassManager);
-  assert (PMD  Manager is not Pass Manager);
+  PMDataManager *PMD =
+dynamic_castPMDataManager *(activeFunctionPassManager);
+  assert(PMD  Manager is not Pass Manager);
   TPM-addIndirectPassManager(PMD);
   
   // Add pass into new manager. This time it must succeed.



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-13 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.96 - 1.97
---
Log message:

Add -pass-debug=Arguments support in new manager.



---
Diffs of the changes:  (+29 -1)

 PassManager.cpp |   30 +-
 1 files changed, 29 insertions(+), 1 deletion(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.96 
llvm/lib/VMCore/PassManager.cpp:1.97
--- llvm/lib/VMCore/PassManager.cpp:1.96Wed Dec 13 15:56:10 2006
+++ llvm/lib/VMCore/PassManager.cpp Wed Dec 13 16:10:00 2006
@@ -192,6 +192,7 @@
 
   // Print passes managed by this top level manager.
   void dumpPasses();
+  void dumpArguments();
 
 private:
   
@@ -299,6 +300,18 @@
 }
   }
 
+  void dumpPassArguments() {
+for(std::vectorPass *::iterator I = PassVector.begin(),
+  E = PassVector.end(); I != E; ++I) {
+  if (PMDataManager *PMD = dynamic_castPMDataManager *(*I))
+PMD-dumpPassArguments();
+  else
+if (const PassInfo *PI = (*I)-getPassInfo())
+  if (!PI-isAnalysisGroup())
+cerr   -  PI-getPassArgument();
+}
+  }
+
 protected:
 
   // Collection of pass whose last user asked this manager to claim
@@ -360,7 +373,6 @@
   dumpLastUses(*I, Offset+1);
 }
   }
-
 };
 
 
//===--===//
@@ -651,6 +663,21 @@
 
 }
 
+void PMTopLevelManager::dumpArguments() {
+
+  if (PassDebugging_New  Arguments)
+return;
+
+  cerr  Pass Arguments: ;
+  for (std::vectorPass *::iterator I = PassManagers.begin(),
+ E = PassManagers.end(); I != E; ++I) {
+PMDataManager *PMD = dynamic_castPMDataManager *(*I);
+assert(PMD  This is not a PassManager);
+PMD-dumpPassArguments();
+  }
+  cerr  \n;
+}
+
 
//===--===//
 // PMDataManager implementation
 
@@ -1270,6 +1297,7 @@
 
   bool Changed = false;
 
+  dumpArguments();
   if (PassDebugging_New = Structure)
 dumpPasses();
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-13 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.97 - 1.98
---
Log message:

Add debug-pass=Executions support in new pass manager.


---
Diffs of the changes:  (+27 -6)

 PassManager.cpp |   33 +++--
 1 files changed, 27 insertions(+), 6 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.97 
llvm/lib/VMCore/PassManager.cpp:1.98
--- llvm/lib/VMCore/PassManager.cpp:1.97Wed Dec 13 16:10:00 2006
+++ llvm/lib/VMCore/PassManager.cpp Wed Dec 13 17:50:44 2006
@@ -244,7 +244,7 @@
   void removeNotPreservedAnalysis(Pass *P);
   
   /// Remove dead passes
-  void removeDeadPasses(Pass *P);
+  void removeDeadPasses(Pass *P, std::string Msg);
 
   /// Add pass P into the PassVector. Update 
   /// AvailableAnalysis appropriately if ProcessAnalysis is true.
@@ -312,6 +312,15 @@
 }
   }
 
+  void dumpPassInfo(Pass *P,  std::string Msg1, std::string Msg2) {
+if (PassDebugging_New  Executions)
+  return;
+cerr  (void*)this  std::string(getDepth()*2+1, ' ');
+cerr  Msg1;
+cerr  P-getPassName();
+cerr  Msg2;
+  }
+
 protected:
 
   // Collection of pass whose last user asked this manager to claim
@@ -572,7 +581,6 @@
 LastUser[LUI-first] = P;
 }
   }
-
 }
 
 /// Collect passes whose last user is P
@@ -734,13 +742,17 @@
 }
 
 /// Remove analysis passes that are not used any longer
-void PMDataManager::removeDeadPasses(Pass *P) {
+void PMDataManager::removeDeadPasses(Pass *P, std::string Msg) {
 
   std::vectorPass * DeadPasses;
   TPM-collectLastUses(DeadPasses, P);
 
   for (std::vectorPass *::iterator I = DeadPasses.begin(),
  E = DeadPasses.end(); I != E; ++I) {
+
+std::string Msg1 =   Freeing Pass ';
+dumpPassInfo(*I, Msg1, Msg);
+
 (*I)-releaseMemory();
 
 std::mapAnalysisID, Pass*::iterator Pos = 
@@ -910,12 +922,15 @@
 for (std::vectorPass *::iterator itr = passVectorBegin(),
e = passVectorEnd(); itr != e; ++itr) {
   Pass *P = *itr;
+  std::string Msg1 = Executing Pass ';
+  std::string Msg2 = ' on BasicBlock ' + (*I).getName() + '...\n;
+  dumpPassInfo(P, Msg1, Msg2);
   initializeAnalysisImpl(P);
   BasicBlockPass *BP = dynamic_castBasicBlockPass*(P);
   Changed |= BP-runOnBasicBlock(*I);
   removeNotPreservedAnalysis(P);
   recordAvailableAnalysis(P);
-  removeDeadPasses(P);
+  removeDeadPasses(P, Msg2);
 }
   return Changed | doFinalization(F);
 }
@@ -1129,12 +1144,15 @@
   for (std::vectorPass *::iterator itr = passVectorBegin(),
  e = passVectorEnd(); itr != e; ++itr) {
 Pass *P = *itr;
+std::string Msg1 = Executing Pass ';
+std::string Msg2 = ' on Function ' + F.getName() + '...\n;
+dumpPassInfo(P, Msg1, Msg2);
 initializeAnalysisImpl(P);
 FunctionPass *FP = dynamic_castFunctionPass*(P);
 Changed |= FP-runOnFunction(F);
 removeNotPreservedAnalysis(P);
 recordAvailableAnalysis(P);
-removeDeadPasses(P);
+removeDeadPasses(P, Msg2);
   }
   return Changed;
 }
@@ -1258,12 +1276,15 @@
   for (std::vectorPass *::iterator itr = passVectorBegin(),
  e = passVectorEnd(); itr != e; ++itr) {
 Pass *P = *itr;
+std::string Msg1 = Executing Pass ';
+std::string Msg2 = ' on Module ' + M.getModuleIdentifier() + '...\n;
+dumpPassInfo(P, Msg1, Msg2);
 initializeAnalysisImpl(P);
 ModulePass *MP = dynamic_castModulePass*(P);
 Changed |= MP-runOnModule(M);
 removeNotPreservedAnalysis(P);
 recordAvailableAnalysis(P);
-removeDeadPasses(P);
+removeDeadPasses(P, Msg2);
   }
   return Changed;
 }



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-13 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.98 - 1.99
---
Log message:

Add  Made Modification  messages in debug-pass=Executions output.


---
Diffs of the changes:  (+26 -3)

 PassManager.cpp |   29 ++---
 1 files changed, 26 insertions(+), 3 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.98 
llvm/lib/VMCore/PassManager.cpp:1.99
--- llvm/lib/VMCore/PassManager.cpp:1.98Wed Dec 13 17:50:44 2006
+++ llvm/lib/VMCore/PassManager.cpp Wed Dec 13 18:08:04 2006
@@ -918,16 +918,23 @@
   bool Changed = doInitialization(F);
   initializeAnalysisInfo();
 
+  std::string Msg1 = Executing Pass ';
+  std::string Msg3 = ' Made Modification ';
+
   for (Function::iterator I = F.begin(), E = F.end(); I != E; ++I)
 for (std::vectorPass *::iterator itr = passVectorBegin(),
e = passVectorEnd(); itr != e; ++itr) {
   Pass *P = *itr;
-  std::string Msg1 = Executing Pass ';
   std::string Msg2 = ' on BasicBlock ' + (*I).getName() + '...\n;
   dumpPassInfo(P, Msg1, Msg2);
   initializeAnalysisImpl(P);
+
   BasicBlockPass *BP = dynamic_castBasicBlockPass*(P);
   Changed |= BP-runOnBasicBlock(*I);
+
+  if (Changed)
+dumpPassInfo(P, Msg3, Msg2);
+
   removeNotPreservedAnalysis(P);
   recordAvailableAnalysis(P);
   removeDeadPasses(P, Msg2);
@@ -1141,15 +1148,23 @@
 
   initializeAnalysisInfo();
 
+  std::string Msg1 = Executing Pass ';
+  std::string Msg3 = ' Made Modification ';
+
   for (std::vectorPass *::iterator itr = passVectorBegin(),
  e = passVectorEnd(); itr != e; ++itr) {
 Pass *P = *itr;
-std::string Msg1 = Executing Pass ';
+
 std::string Msg2 = ' on Function ' + F.getName() + '...\n;
 dumpPassInfo(P, Msg1, Msg2);
+
 initializeAnalysisImpl(P);
 FunctionPass *FP = dynamic_castFunctionPass*(P);
 Changed |= FP-runOnFunction(F);
+
+if (Changed)
+  dumpPassInfo(P, Msg3, Msg2);
+
 removeNotPreservedAnalysis(P);
 recordAvailableAnalysis(P);
 removeDeadPasses(P, Msg2);
@@ -1273,15 +1288,23 @@
   bool Changed = false;
   initializeAnalysisInfo();
 
+  std::string Msg1 = Executing Pass ';
+  std::string Msg3 = ' Made Modification ';
+
   for (std::vectorPass *::iterator itr = passVectorBegin(),
  e = passVectorEnd(); itr != e; ++itr) {
 Pass *P = *itr;
-std::string Msg1 = Executing Pass ';
+
 std::string Msg2 = ' on Module ' + M.getModuleIdentifier() + '...\n;
 dumpPassInfo(P, Msg1, Msg2);
+
 initializeAnalysisImpl(P);
 ModulePass *MP = dynamic_castModulePass*(P);
 Changed |= MP-runOnModule(M);
+
+if (Changed)
+  dumpPassInfo(P, Msg3, Msg2);
+
 removeNotPreservedAnalysis(P);
 recordAvailableAnalysis(P);
 removeDeadPasses(P, Msg2);



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-13 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.99 - 1.100
---
Log message:

Add debug-pass=Details support to print Required and Preserved Set info.


---
Diffs of the changes:  (+26 -1)

 PassManager.cpp |   27 ++-
 1 files changed, 26 insertions(+), 1 deletion(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.99 
llvm/lib/VMCore/PassManager.cpp:1.100
--- llvm/lib/VMCore/PassManager.cpp:1.99Wed Dec 13 18:08:04 2006
+++ llvm/lib/VMCore/PassManager.cpp Wed Dec 13 18:25:06 2006
@@ -321,6 +321,17 @@
 cerr  Msg2;
   }
 
+  void dumpAnalysisSetInfo(const char *Msg, Pass *P,
+   const std::vectorAnalysisID Set) {
+if (PassDebugging_New = Details  !Set.empty()) {
+  cerr  (void*)P  std::string(getDepth()*2+3, ' ')  Msg   
Analyses:;
+  for (unsigned i = 0; i != Set.size(); ++i) {
+if (i) cerr  ,;
+cerr Set[i]-getPassName();
+  }
+  cerr  \n;
+}
+  }
 protected:
 
   // Collection of pass whose last user asked this manager to claim
@@ -925,8 +936,13 @@
 for (std::vectorPass *::iterator itr = passVectorBegin(),
e = passVectorEnd(); itr != e; ++itr) {
   Pass *P = *itr;
+  AnalysisUsage AnUsage;
+  P-getAnalysisUsage(AnUsage);
+
   std::string Msg2 = ' on BasicBlock ' + (*I).getName() + '...\n;
   dumpPassInfo(P, Msg1, Msg2);
+  dumpAnalysisSetInfo(Required, P, AnUsage.getRequiredSet());
+
   initializeAnalysisImpl(P);
 
   BasicBlockPass *BP = dynamic_castBasicBlockPass*(P);
@@ -934,6 +950,7 @@
 
   if (Changed)
 dumpPassInfo(P, Msg3, Msg2);
+  dumpAnalysisSetInfo(Preserved, P, AnUsage.getPreservedSet());
 
   removeNotPreservedAnalysis(P);
   recordAvailableAnalysis(P);
@@ -1154,9 +1171,12 @@
   for (std::vectorPass *::iterator itr = passVectorBegin(),
  e = passVectorEnd(); itr != e; ++itr) {
 Pass *P = *itr;
+AnalysisUsage AnUsage;
+P-getAnalysisUsage(AnUsage);
 
 std::string Msg2 = ' on Function ' + F.getName() + '...\n;
 dumpPassInfo(P, Msg1, Msg2);
+dumpAnalysisSetInfo(Required, P, AnUsage.getRequiredSet());
 
 initializeAnalysisImpl(P);
 FunctionPass *FP = dynamic_castFunctionPass*(P);
@@ -1164,6 +1184,7 @@
 
 if (Changed)
   dumpPassInfo(P, Msg3, Msg2);
+dumpAnalysisSetInfo(Preserved, P, AnUsage.getPreservedSet());
 
 removeNotPreservedAnalysis(P);
 recordAvailableAnalysis(P);
@@ -1294,9 +1315,12 @@
   for (std::vectorPass *::iterator itr = passVectorBegin(),
  e = passVectorEnd(); itr != e; ++itr) {
 Pass *P = *itr;
+AnalysisUsage AnUsage;
+P-getAnalysisUsage(AnUsage);
 
 std::string Msg2 = ' on Module ' + M.getModuleIdentifier() + '...\n;
 dumpPassInfo(P, Msg1, Msg2);
+dumpAnalysisSetInfo(Required, P, AnUsage.getRequiredSet());
 
 initializeAnalysisImpl(P);
 ModulePass *MP = dynamic_castModulePass*(P);
@@ -1304,7 +1328,8 @@
 
 if (Changed)
   dumpPassInfo(P, Msg3, Msg2);
-
+dumpAnalysisSetInfo(Preserved, P, AnUsage.getPreservedSet());
+  
 removeNotPreservedAnalysis(P);
 recordAvailableAnalysis(P);
 removeDeadPasses(P, Msg2);



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-13 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.100 - 1.101
---
Log message:

Add -time-passes support.


---
Diffs of the changes:  (+87 -1)

 PassManager.cpp |   88 +++-
 1 files changed, 87 insertions(+), 1 deletion(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.100 
llvm/lib/VMCore/PassManager.cpp:1.101
--- llvm/lib/VMCore/PassManager.cpp:1.100   Wed Dec 13 18:25:06 2006
+++ llvm/lib/VMCore/PassManager.cpp Wed Dec 13 18:59:42 2006
@@ -14,9 +14,11 @@
 
 #include llvm/PassManager.h
 #include llvm/Support/CommandLine.h
+#include llvm/Support/Timer.h
 #include llvm/Module.h
 #include llvm/ModuleProvider.h
 #include llvm/Support/Streams.h
+#include llvm/Support/ManagedStatic.h
 #include vector
 #include map
 using namespace llvm;
@@ -571,6 +573,55 @@
   ModulePassManager *activeManager;
 };
 
+//===--===//
+// TimingInfo Class - This class is used to calculate information about the
+// amount of time each pass takes to execute.  This only happens when
+// -time-passes is enabled on the command line.
+//
+
+class TimingInfo {
+  std::mapPass*, Timer TimingData;
+  TimerGroup TG;
+
+public:
+  // Use 'create' member to get this.
+  TimingInfo() : TG(... Pass execution timing report ...) {}
+  
+  // TimingDtor - Print out information about timing information
+  ~TimingInfo() {
+// Delete all of the timers...
+TimingData.clear();
+// TimerGroup is deleted next, printing the report.
+  }
+
+  // createTheTimeInfo - This method either initializes the TheTimeInfo pointer
+  // to a non null value (if the -time-passes option is enabled) or it leaves 
it
+  // null.  It may be called multiple times.
+  static void createTheTimeInfo();
+
+  void passStarted(Pass *P) {
+
+if (dynamic_castPMDataManager *(P)) 
+  return;
+
+std::mapPass*, Timer::iterator I = TimingData.find(P);
+if (I == TimingData.end())
+  I=TimingData.insert(std::make_pair(P, Timer(P-getPassName(), 
TG))).first;
+I-second.startTimer();
+  }
+  void passEnded(Pass *P) {
+
+if (dynamic_castPMDataManager *(P)) 
+  return;
+
+std::mapPass*, Timer::iterator I = TimingData.find(P);
+assert (I != TimingData.end()  passStarted/passEnded not nested 
right!);
+I-second.stopTimer();
+  }
+};
+
+static TimingInfo *TheTimeInfo;
+
 } // End of llvm namespace
 
 
//===--===//
@@ -764,8 +815,10 @@
 std::string Msg1 =   Freeing Pass ';
 dumpPassInfo(*I, Msg1, Msg);
 
+if (TheTimeInfo) TheTimeInfo-passStarted(P);
 (*I)-releaseMemory();
-
+if (TheTimeInfo) TheTimeInfo-passEnded(P);
+
 std::mapAnalysisID, Pass*::iterator Pos = 
   AvailableAnalysis.find((*I)-getPassInfo());
 
@@ -946,7 +999,9 @@
   initializeAnalysisImpl(P);
 
   BasicBlockPass *BP = dynamic_castBasicBlockPass*(P);
+  if (TheTimeInfo) TheTimeInfo-passStarted(P);
   Changed |= BP-runOnBasicBlock(*I);
+  if (TheTimeInfo) TheTimeInfo-passEnded(P);
 
   if (Changed)
 dumpPassInfo(P, Msg3, Msg2);
@@ -1180,7 +1235,10 @@
 
 initializeAnalysisImpl(P);
 FunctionPass *FP = dynamic_castFunctionPass*(P);
+
+if (TheTimeInfo) TheTimeInfo-passStarted(P);
 Changed |= FP-runOnFunction(F);
+if (TheTimeInfo) TheTimeInfo-passEnded(P);
 
 if (Changed)
   dumpPassInfo(P, Msg3, Msg2);
@@ -1324,7 +1382,10 @@
 
 initializeAnalysisImpl(P);
 ModulePass *MP = dynamic_castModulePass*(P);
+
+if (TheTimeInfo) TheTimeInfo-passStarted(P);
 Changed |= MP-runOnModule(M);
+if (TheTimeInfo) TheTimeInfo-passEnded(P);
 
 if (Changed)
   dumpPassInfo(P, Msg3, Msg2);
@@ -1366,6 +1427,8 @@
 
   bool Changed = false;
 
+  TimingInfo::createTheTimeInfo();
+
   dumpArguments();
   if (PassDebugging_New = Structure)
 dumpPasses();
@@ -1408,4 +1471,27 @@
   return PM-run(M);
 }
 
+//===--===//
+// TimingInfo Class - This class is used to calculate information about the
+// amount of time each pass takes to execute.  This only happens with
+// -time-passes is enabled on the command line.
+//
+bool llvm::TimePassesIsEnabled = false;
+static cl::optbool,true
+EnableTiming(time-passes, cl::location(TimePassesIsEnabled),
+cl::desc(Time each pass, printing elapsed time for each on 
exit));
+
+// createTheTimeInfo - This method either initializes the TheTimeInfo pointer 
to
+// a non null value (if the -time-passes option is enabled) or it leaves it
+// null.  It may be called multiple times.
+void TimingInfo::createTheTimeInfo() {
+  if (!TimePassesIsEnabled || TheTimeInfo) return;
+
+  // Constructed the first time this is called, iff -time-passes is enabled.
+  // This guarantees that the object will be constructed before static globals,

[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-12 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.75 - 1.76
---
Log message:

Set top level manager.


---
Diffs of the changes:  (+10 -1)

 PassManager.cpp |   11 ++-
 1 files changed, 10 insertions(+), 1 deletion(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.75 
llvm/lib/VMCore/PassManager.cpp:1.76
--- llvm/lib/VMCore/PassManager.cpp:1.75Fri Dec  8 19:11:34 2006
+++ llvm/lib/VMCore/PassManager.cpp Tue Dec 12 16:02:16 2006
@@ -333,7 +333,6 @@
   std::vectorPass * ForcedLastUses;
 
   // Top level manager.
-  // TODO : Make it a reference.
   PMTopLevelManager *TPM;
 
 private:
@@ -814,6 +813,8 @@
 
 FunctionPassManager_New::FunctionPassManager_New(ModuleProvider *P) {
   FPM = new FunctionPassManagerImpl_New(0);
+  // FPM is the top level manager.
+  FPM-setTopLevelManager(FPM);
   MP = P;
 }
 
@@ -880,6 +881,8 @@
   // Create and add new manager
   activeBBPassManager = 
 new BasicBlockPassManager_New(getDepth() + 1);
+  // Inherit top level manager
+  activeBBPassManager-setTopLevelManager(this-getTopLevelManager());
   addPassToManager(activeBBPassManager, false);
   TPM-addOtherPassManager(activeBBPassManager);
 
@@ -1013,6 +1016,8 @@
   activeFunctionPassManager = 
 new FunctionPassManagerImpl_New(getDepth() + 1);
   addPassToManager(activeFunctionPassManager, false);
+  // Inherit top level manager
+  
activeFunctionPassManager-setTopLevelManager(this-getTopLevelManager());
   TPM-addOtherPassManager(activeFunctionPassManager);
   
   // Add pass into new manager. This time it must succeed.
@@ -1077,6 +1082,8 @@
 
   if (!activeManager || !activeManager-addPass(P)) {
 activeManager = new ModulePassManager_New(getDepth() + 1);
+// Inherit top level manager
+activeManager-setTopLevelManager(this-getTopLevelManager());
 
 // This top level manager is going to manage activeManager. 
 // Set up analysis resolver to connect them.
@@ -1108,6 +1115,8 @@
 /// Create new pass manager
 PassManager_New::PassManager_New() {
   PM = new PassManagerImpl_New(0);
+  // PM is the top level manager
+  PM-setTopLevelManager(PM);
 }
 
 /// add - Add a pass to the queue of passes to run.  This passes ownership of



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-12 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.76 - 1.77
---
Log message:

Initialize AnalysisImpls for ImmutablePass.


---
Diffs of the changes:  (+4 -1)

 PassManager.cpp |5 -
 1 files changed, 4 insertions(+), 1 deletion(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.76 
llvm/lib/VMCore/PassManager.cpp:1.77
--- llvm/lib/VMCore/PassManager.cpp:1.76Tue Dec 12 16:02:16 2006
+++ llvm/lib/VMCore/PassManager.cpp Tue Dec 12 16:21:37 2006
@@ -399,7 +399,9 @@
   // top level manager. Set up analysis resolver to connect them.
   AnalysisResolver_New *AR = new AnalysisResolver_New(*this);
   P-setResolver(AR);
+  initializeAnalysisImpl(P);
   addImmutablePass(IP);
+  recordAvailableAnalysis(IP);
 } 
 else 
   addPass(P);
@@ -504,7 +506,9 @@
   // top level manager. Set up analysis resolver to connect them.
   AnalysisResolver_New *AR = new AnalysisResolver_New(*this);
   P-setResolver(AR);
+  initializeAnalysisImpl(P);
   addImmutablePass(IP);
+  recordAvailableAnalysis(IP);
 }
 else 
   addPass(P);
@@ -634,7 +638,6 @@
 
 // Take a note of analysis required and made available by this pass.
 // Remove the analysis not preserved by this pass
-initializeAnalysisImpl(P);
 removeNotPreservedAnalysis(P);
 recordAvailableAnalysis(P);
   }



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-12 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.77 - 1.78
---
Log message:

o s/OtherPassManagers/IndirectPassManagers
o Make IndirectPassManagers vector of PMDataManager *
o Move PMTopLevelManager implementation below all class declarations.



---
Diffs of the changes:  (+113 -95)

 PassManager.cpp |  208 ++--
 1 files changed, 113 insertions(+), 95 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.77 
llvm/lib/VMCore/PassManager.cpp:1.78
--- llvm/lib/VMCore/PassManager.cpp:1.77Tue Dec 12 16:21:37 2006
+++ llvm/lib/VMCore/PassManager.cpp Tue Dec 12 16:35:25 2006
@@ -86,6 +86,8 @@
 
 namespace llvm {
 
+class PMDataManager;
+
 
//===--===//
 // PMTopLevelManager
 //
@@ -143,8 +145,8 @@
 
   // Add Manager into the list of managers that are not directly
   // maintained by this top level pass manager
-  void addOtherPassManager(Pass *Manager) {
-OtherPassManagers.push_back(Manager);
+  inline void addIndirectPassManager(PMDataManager *Manager) {
+IndirectPassManagers.push_back(Manager);
   }
 
 private:
@@ -154,7 +156,7 @@
 
   /// Collection of pass managers that are not directly maintained
   /// by this pass manager
-  std::vectorPass * OtherPassManagers;
+  std::vectorPMDataManager * IndirectPassManagers;
 
   // Map to keep track of last user of the analysis pass.
   // LastUser-second is the last user of Lastuser-first.
@@ -164,96 +166,6 @@
   std::vectorImmutablePass * ImmutablePasses;
 };
   
-/// Set pass P as the last user of the given analysis passes.
-void PMTopLevelManager::setLastUser(std::vectorPass * AnalysisPasses, 
-Pass *P) {
-
-  for (std::vectorPass *::iterator I = AnalysisPasses.begin(),
- E = AnalysisPasses.end(); I != E; ++I) {
-Pass *AP = *I;
-LastUser[AP] = P;
-// If AP is the last user of other passes then make P last user of
-// such passes.
-for (std::mapPass *, Pass *::iterator LUI = LastUser.begin(),
-   LUE = LastUser.end(); LUI != LUE; ++LUI) {
-  if (LUI-second == AP)
-LastUser[LUI-first] = P;
-}
-  }
-
-}
-
-/// Collect passes whose last user is P
-void PMTopLevelManager::collectLastUses(std::vectorPass * LastUses,
-Pass *P) {
-   for (std::mapPass *, Pass *::iterator LUI = LastUser.begin(),
-  LUE = LastUser.end(); LUI != LUE; ++LUI)
-  if (LUI-second == P)
-LastUses.push_back(LUI-first);
-}
-
-/// Schedule pass P for execution. Make sure that passes required by
-/// P are run before P is run. Update analysis info maintained by
-/// the manager. Remove dead passes. This is a recursive function.
-void PMTopLevelManager::schedulePass(Pass *P) {
-
-  // TODO : Allocate function manager for this pass, other wise required set
-  // may be inserted into previous function manager
-
-  AnalysisUsage AnUsage;
-  P-getAnalysisUsage(AnUsage);
-  const std::vectorAnalysisID RequiredSet = AnUsage.getRequiredSet();
-  for (std::vectorAnalysisID::const_iterator I = RequiredSet.begin(),
- E = RequiredSet.end(); I != E; ++I) {
-
-Pass *AnalysisPass = findAnalysisPass(*I);
-if (!AnalysisPass) {
-  // Schedule this analysis run first.
-  AnalysisPass = (*I)-createPass();
-  schedulePass(AnalysisPass);
-}
-  }
-
-  // Now all required passes are available.
-  addTopLevelPass(P);
-}
-
-/// Find the pass that implements Analysis AID. Search immutable
-/// passes and all pass managers. If desired pass is not found
-/// then return NULL.
-Pass *PMTopLevelManager::findAnalysisPass(AnalysisID AID) {
-
-  Pass *P = NULL;
-  for (std::vectorImmutablePass *::iterator I = ImmutablePasses.begin(),
- E = ImmutablePasses.end(); P == NULL  I != E; ++I) {
-const PassInfo *PI = (*I)-getPassInfo();
-if (PI == AID)
-  P = *I;
-
-// If Pass not found then check the interfaces implemented by Immutable 
Pass
-if (!P) {
-  const std::vectorconst PassInfo* ImmPI = 
-PI-getInterfacesImplemented();
-  for (unsigned Index = 0, End = ImmPI.size(); 
-   P == NULL  Index != End; ++Index)
-if (ImmPI[Index] == AID)
-  P = *I;
-}
-  }
-
-  // Check pass managers
-  for (std::vectorPass *::iterator I = PassManagers.begin(),
- E = PassManagers.end(); P == NULL  I != E; ++I)
-P = (*I)-getResolver()-getAnalysisToUpdate(AID, false);
-
-  // Check other pass managers
-  for (std::vectorPass *::iterator I = OtherPassManagers.begin(),
- E = OtherPassManagers.end(); P == NULL  I != E; ++I)
-P = (*I)-getResolver()-getAnalysisToUpdate(AID, false);
-
-  return P;
-}
-
 
//===--===//
 // PMDataManager
 
@@ -526,6 +438,99 @@
 } // End of llvm namespace
 
 

[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-12 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.79 - 1.80
---
Log message:

findAnalysisPass().

First search all available passes before searching ImmutablePasses.


---
Diffs of the changes:  (+13 -13)

 PassManager.cpp |   26 +-
 1 files changed, 13 insertions(+), 13 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.79 
llvm/lib/VMCore/PassManager.cpp:1.80
--- llvm/lib/VMCore/PassManager.cpp:1.79Tue Dec 12 16:47:13 2006
+++ llvm/lib/VMCore/PassManager.cpp Tue Dec 12 16:50:05 2006
@@ -512,6 +512,19 @@
 Pass *PMTopLevelManager::findAnalysisPass(AnalysisID AID) {
 
   Pass *P = NULL;
+  // Check pass managers
+  for (std::vectorPass *::iterator I = PassManagers.begin(),
+ E = PassManagers.end(); P == NULL  I != E; ++I) {
+PMDataManager *PMD = dynamic_castPMDataManager *(*I);
+assert(PMD  This is not a PassManager);
+P = PMD-findAnalysisPass(AID, false);
+  }
+
+  // Check other pass managers
+  for (std::vectorPMDataManager *::iterator I = IndirectPassManagers.begin(),
+ E = IndirectPassManagers.end(); P == NULL  I != E; ++I)
+P = (*I)-findAnalysisPass(AID, false);
+
   for (std::vectorImmutablePass *::iterator I = ImmutablePasses.begin(),
  E = ImmutablePasses.end(); P == NULL  I != E; ++I) {
 const PassInfo *PI = (*I)-getPassInfo();
@@ -529,19 +542,6 @@
 }
   }
 
-  // Check pass managers
-  for (std::vectorPass *::iterator I = PassManagers.begin(),
- E = PassManagers.end(); P == NULL  I != E; ++I) {
-PMDataManager *PMD = dynamic_castPMDataManager *(*I);
-assert(PMD  This is not a PassManager);
-P = PMD-findAnalysisPass(AID, false);
-  }
-
-  // Check other pass managers
-  for (std::vectorPMDataManager *::iterator I = IndirectPassManagers.begin(),
- E = IndirectPassManagers.end(); P == NULL  I != E; ++I)
-P = (*I)-findAnalysisPass(AID, false);
-
   return P;
 }
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-12 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.80 - 1.81
---
Log message:

Maintain ImmutablePasses list at top level only. Do not make them
directly available to individual managers.


---
Diffs of the changes:  (+0 -6)

 PassManager.cpp |6 --
 1 files changed, 6 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.80 
llvm/lib/VMCore/PassManager.cpp:1.81
--- llvm/lib/VMCore/PassManager.cpp:1.80Tue Dec 12 16:50:05 2006
+++ llvm/lib/VMCore/PassManager.cpp Tue Dec 12 16:53:40 2006
@@ -200,12 +200,6 @@
   void initializeAnalysisInfo() { 
 ForcedLastUses.clear();
 AvailableAnalysis.clear();
-
-// Include immutable passes into AvailableAnalysis vector.
-std::vectorImmutablePass * ImmutablePasses =  TPM-getImmutablePasses();
-for (std::vectorImmutablePass *::iterator I = ImmutablePasses.begin(),
-   E = ImmutablePasses.end(); I != E; ++I) 
-  recordAvailableAnalysis(*I);
   }
 
   /// Populate RequiredPasses with the analysis pass that are required by



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-12 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.78 - 1.79
---
Log message:

Fix thinko.
While searching for a analysis in a pass manager, do not search it into
pass manager's manager.


---
Diffs of the changes:  (+18 -3)

 PassManager.cpp |   21 ++---
 1 files changed, 18 insertions(+), 3 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.78 
llvm/lib/VMCore/PassManager.cpp:1.79
--- llvm/lib/VMCore/PassManager.cpp:1.78Tue Dec 12 16:35:25 2006
+++ llvm/lib/VMCore/PassManager.cpp Tue Dec 12 16:47:13 2006
@@ -260,6 +260,9 @@
   unsigned Depth;
 };
 
+//===--===//
+// BasicBlockPassManager_New
+//
 /// BasicBlockPassManager_New manages BasicBlockPass. It batches all the
 /// pass together and sequence them to process one basic block before
 /// processing next basic block.
@@ -288,6 +291,9 @@
 
 };
 
+//===--===//
+// FunctionPassManagerImpl_New
+//
 /// FunctionPassManagerImpl_New manages FunctionPasses and 
BasicBlockPassManagers.
 /// It batches all function passes and basic block pass managers together and
 /// sequence them to process one function at a time before processing next
@@ -356,6 +362,9 @@
   BasicBlockPassManager_New *activeBBPassManager;
 };
 
+//===--===//
+// ModulePassManager_New
+//
 /// ModulePassManager_New manages ModulePasses and function pass managers.
 /// It batches all Module passes  passes and function pass managers together 
and
 /// sequence them to process one module.
@@ -384,7 +393,10 @@
   FunctionPassManagerImpl_New *activeFunctionPassManager;
 };
 
-/// PassManager_New manages ModulePassManagers
+//===--===//
+// PassManagerImpl_New
+//
+/// PassManagerImpl_New manages ModulePassManagers
 class PassManagerImpl_New : public Pass,
 public PMDataManager,
 public PMTopLevelManager {
@@ -519,8 +531,11 @@
 
   // Check pass managers
   for (std::vectorPass *::iterator I = PassManagers.begin(),
- E = PassManagers.end(); P == NULL  I != E; ++I)
-P = (*I)-getResolver()-getAnalysisToUpdate(AID, false);
+ E = PassManagers.end(); P == NULL  I != E; ++I) {
+PMDataManager *PMD = dynamic_castPMDataManager *(*I);
+assert(PMD  This is not a PassManager);
+P = PMD-findAnalysisPass(AID, false);
+  }
 
   // Check other pass managers
   for (std::vectorPMDataManager *::iterator I = IndirectPassManagers.begin(),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-12 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.82 - 1.83
---
Log message:

Initialize activeManager.


---
Diffs of the changes:  (+3 -1)

 PassManager.cpp |4 +++-
 1 files changed, 3 insertions(+), 1 deletion(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.82 
llvm/lib/VMCore/PassManager.cpp:1.83
--- llvm/lib/VMCore/PassManager.cpp:1.82Tue Dec 12 16:56:36 2006
+++ llvm/lib/VMCore/PassManager.cpp Tue Dec 12 16:57:43 2006
@@ -395,7 +395,9 @@
 
 public:
 
-  PassManagerImpl_New(int D) : PMDataManager(D) {}
+  PassManagerImpl_New(int D) : PMDataManager(D) {
+activeManager = NULL;
+  }
 
   /// add - Add a pass to the queue of passes to run.  This passes ownership of
   /// the Pass to the PassManager.  When the PassManager is destroyed, the pass



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-12 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.81 - 1.82
---
Log message:

Remove unused constructor.


---
Diffs of the changes:  (+0 -2)

 PassManager.cpp |2 --
 1 files changed, 2 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.81 
llvm/lib/VMCore/PassManager.cpp:1.82
--- llvm/lib/VMCore/PassManager.cpp:1.81Tue Dec 12 16:53:40 2006
+++ llvm/lib/VMCore/PassManager.cpp Tue Dec 12 16:56:36 2006
@@ -296,8 +296,6 @@
 public PMDataManager,
 public PMTopLevelManager {
 public:
-  FunctionPassManagerImpl_New(ModuleProvider *P, int D) :
-PMDataManager(D) { /* TODO */ }
   FunctionPassManagerImpl_New(int D) : PMDataManager(D) { 
 activeBBPassManager = NULL;
   }



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-12 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.84 - 1.85
---
Log message:

collectRequiredAnalysisPasses().

Include RequiredTrainsitiveSet also.


---
Diffs of the changes:  (+8 -0)

 PassManager.cpp |8 
 1 files changed, 8 insertions(+)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.84 
llvm/lib/VMCore/PassManager.cpp:1.85
--- llvm/lib/VMCore/PassManager.cpp:1.84Tue Dec 12 17:07:44 2006
+++ llvm/lib/VMCore/PassManager.cpp Tue Dec 12 17:09:32 2006
@@ -678,6 +678,14 @@
 assert (AnalysisPass  Analysis pass is not available);
 RP.push_back(AnalysisPass);
   }
+
+  const std::vectorAnalysisID IDs = AnUsage.getRequiredTransitiveSet();
+  for (std::vectorAnalysisID::const_iterator I = IDs.begin(),
+ E = IDs.end(); I != E; ++I) {
+Pass *AnalysisPass = findAnalysisPass(*I, true);
+assert (AnalysisPass  Analysis pass is not available);
+RP.push_back(AnalysisPass);
+  }
 }
 
 // All Required analyses should be available to the pass as it runs!  Here



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-12 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.83 - 1.84
---
Log message:

removeNotPreservedAnalysis().

Do not remove ImmutablePass from the list.


---
Diffs of the changes:  (+8 -4)

 PassManager.cpp |   12 
 1 files changed, 8 insertions(+), 4 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.83 
llvm/lib/VMCore/PassManager.cpp:1.84
--- llvm/lib/VMCore/PassManager.cpp:1.83Tue Dec 12 16:57:43 2006
+++ llvm/lib/VMCore/PassManager.cpp Tue Dec 12 17:07:44 2006
@@ -580,13 +580,17 @@
 
   const std::vectorAnalysisID PreservedSet = AnUsage.getPreservedSet();
   for (std::mapAnalysisID, Pass*::iterator I = AvailableAnalysis.begin(),
- E = AvailableAnalysis.end(); I != E; ++I ) {
+ E = AvailableAnalysis.end(); I != E; ) {
 if (std::find(PreservedSet.begin(), PreservedSet.end(), I-first) == 
 PreservedSet.end()) {
   // Remove this analysis
-  std::mapAnalysisID, Pass*::iterator J = I++;
-  AvailableAnalysis.erase(J);
-}
+  if (!dynamic_castImmutablePass*(I-second)) {
+std::mapAnalysisID, Pass*::iterator J = I++;
+AvailableAnalysis.erase(J);
+  } else
+++I;
+} else
+  ++I;
   }
 }
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-12 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.86 - 1.87
---
Log message:

Do not runOnFunction on external functions.


---
Diffs of the changes:  (+7 -0)

 PassManager.cpp |7 +++
 1 files changed, 7 insertions(+)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.86 
llvm/lib/VMCore/PassManager.cpp:1.87
--- llvm/lib/VMCore/PassManager.cpp:1.86Tue Dec 12 17:13:09 2006
+++ llvm/lib/VMCore/PassManager.cpp Tue Dec 12 17:15:28 2006
@@ -761,6 +761,9 @@
 bool
 BasicBlockPassManager_New::runOnFunction(Function F) {
 
+  if (F.isExternal())
+return false;
+
   bool Changed = doInitialization(F);
   initializeAnalysisInfo();
 
@@ -972,6 +975,10 @@
 bool FunctionPassManagerImpl_New::runOnFunction(Function F) {
 
   bool Changed = false;
+
+  if (F.isExternal())
+return false;
+
   initializeAnalysisInfo();
 
   for (std::vectorPass *::iterator itr = passVectorBegin(),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-12 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.85 - 1.86
---
Log message:

Initialize AnalysisImpls for each pass before executing the pass.


---
Diffs of the changes:  (+3 -3)

 PassManager.cpp |6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.85 
llvm/lib/VMCore/PassManager.cpp:1.86
--- llvm/lib/VMCore/PassManager.cpp:1.85Tue Dec 12 17:09:32 2006
+++ llvm/lib/VMCore/PassManager.cpp Tue Dec 12 17:13:09 2006
@@ -768,7 +768,7 @@
 for (std::vectorPass *::iterator itr = passVectorBegin(),
e = passVectorEnd(); itr != e; ++itr) {
   Pass *P = *itr;
-  
+  initializeAnalysisImpl(P);
   BasicBlockPass *BP = dynamic_castBasicBlockPass*(P);
   Changed |= BP-runOnBasicBlock(*I);
   removeNotPreservedAnalysis(P);
@@ -977,7 +977,7 @@
   for (std::vectorPass *::iterator itr = passVectorBegin(),
  e = passVectorEnd(); itr != e; ++itr) {
 Pass *P = *itr;
-
+initializeAnalysisImpl(P);
 FunctionPass *FP = dynamic_castFunctionPass*(P);
 Changed |= FP-runOnFunction(F);
 removeNotPreservedAnalysis(P);
@@ -1104,7 +1104,7 @@
   for (std::vectorPass *::iterator itr = passVectorBegin(),
  e = passVectorEnd(); itr != e; ++itr) {
 Pass *P = *itr;
-
+initializeAnalysisImpl(P);
 ModulePass *MP = dynamic_castModulePass*(P);
 Changed |= MP-runOnModule(M);
 removeNotPreservedAnalysis(P);



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-12 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.87 - 1.88
---
Log message:

FunctionPassManager()

Set AnalysisResolver_New and add FPM to PassManagers list.


---
Diffs of the changes:  (+6 -0)

 PassManager.cpp |6 ++
 1 files changed, 6 insertions(+)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.87 
llvm/lib/VMCore/PassManager.cpp:1.88
--- llvm/lib/VMCore/PassManager.cpp:1.87Tue Dec 12 17:15:28 2006
+++ llvm/lib/VMCore/PassManager.cpp Tue Dec 12 17:27:37 2006
@@ -847,6 +847,12 @@
   FPM = new FunctionPassManagerImpl_New(0);
   // FPM is the top level manager.
   FPM-setTopLevelManager(FPM);
+
+  PMDataManager *PMD = dynamic_castPMDataManager *(FPM);
+  AnalysisResolver_New *AR = new AnalysisResolver_New(*PMD);
+  FPM-setResolver(AR);
+  
+  FPM-addPassManager(FPM);
   MP = P;
 }
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-12 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.88 - 1.89
---
Log message:

Add routines to dump pass manager queue.


---
Diffs of the changes:  (+62 -0)

 PassManager.cpp |   62 
 1 files changed, 62 insertions(+)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.88 
llvm/lib/VMCore/PassManager.cpp:1.89
--- llvm/lib/VMCore/PassManager.cpp:1.88Tue Dec 12 17:27:37 2006
+++ llvm/lib/VMCore/PassManager.cpp Tue Dec 12 17:34:33 2006
@@ -149,6 +149,9 @@
 IndirectPassManagers.push_back(Manager);
   }
 
+  // Print passes managed by this top level manager.
+  void dumpPasses();
+
 private:
   
   /// Collection of pass managers
@@ -231,6 +234,21 @@
 
   unsigned getDepth() { return Depth; }
 
+  // Print list of passes that are last used by P.
+  void dumpLastUses(Pass *P, unsigned Offset) {
+
+std::vectorPass * LUses;
+
+assert (TPM  Top Level Manager is missing);
+TPM-collectLastUses(LUses, P);
+
+for (std::vectorPass *::iterator I = LUses.begin(),
+   E = LUses.end(); I != E; ++I) {
+  llvm::cerr  --  std::string(Offset*2, ' ');
+  (*I)-dumpPassStructure(0);
+}
+  }
+
 protected:
 
   // Collection of pass whose last user asked this manager to claim
@@ -283,6 +301,16 @@
   bool doFinalization(Module M);
   bool doFinalization(Function F);
 
+  // Print passes managed by this manager
+  void dumpPassStructure(unsigned Offset) {
+llvm::cerr  std::string(Offset*2, ' ')  BasicBLockPass Manager\n;
+for (std::vectorPass *::iterator I = passVectorBegin(),
+   E = passVectorEnd(); I != E; ++I)  {
+  (*I)-dumpPassStructure(Offset + 1);
+  dumpLastUses(*I, Offset+1);
+}
+  }
+
 };
 
 
//===--===//
@@ -349,6 +377,16 @@
 Info.setPreservesAll();
   }
 
+  // Print passes managed by this manager
+  void dumpPassStructure(unsigned Offset) {
+llvm::cerr  std::string(Offset*2, ' ')  FunctionPass Manager\n;
+for (std::vectorPass *::iterator I = passVectorBegin(),
+   E = passVectorEnd(); I != E; ++I)  {
+  (*I)-dumpPassStructure(Offset + 1);
+  dumpLastUses(*I, Offset+1);
+}
+  }
+
 private:
   // Active Pass Managers
   BasicBlockPassManager_New *activeBBPassManager;
@@ -380,6 +418,16 @@
 Info.setPreservesAll();
   }
 
+  // Print passes managed by this manager
+  void dumpPassStructure(unsigned Offset) {
+llvm::cerr  std::string(Offset*2, ' ')  ModulePass Manager\n;
+for (std::vectorPass *::iterator I = passVectorBegin(),
+   E = passVectorEnd(); I != E; ++I)  {
+  (*I)-dumpPassStructure(Offset + 1);
+  dumpLastUses(*I, Offset+1);
+}
+  }
+
 private:
   // Active Pass Manager
   FunctionPassManagerImpl_New *activeFunctionPassManager;
@@ -539,6 +587,20 @@
   return P;
 }
 
+// Print passes managed by this top level manager.
+void PMTopLevelManager::dumpPasses() {
+
+  // Print out the immutable passes
+  for (unsigned i = 0, e = ImmutablePasses.size(); i != e; ++i) {
+ImmutablePasses[i]-dumpPassStructure(0);
+  }
+  
+  for (std::vectorPass *::iterator I = PassManagers.begin(),
+ E = PassManagers.end(); I != E; ++I)
+(*I)-dumpPassStructure(1);
+
+}
+
 
//===--===//
 // PMDataManager implementation
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-12 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.89 - 1.90
---
Log message:

Remove unused constructor.


---
Diffs of the changes:  (+0 -4)

 PassManager.cpp |4 
 1 files changed, 4 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.89 
llvm/lib/VMCore/PassManager.cpp:1.90
--- llvm/lib/VMCore/PassManager.cpp:1.89Tue Dec 12 17:34:33 2006
+++ llvm/lib/VMCore/PassManager.cpp Tue Dec 12 17:51:31 2006
@@ -901,10 +901,6 @@
 // FunctionPassManager_New implementation
 
 /// Create new Function pass manager
-FunctionPassManager_New::FunctionPassManager_New() {
-  FPM = new FunctionPassManagerImpl_New(0);
-}
-
 FunctionPassManager_New::FunctionPassManager_New(ModuleProvider *P) {
   FPM = new FunctionPassManagerImpl_New(0);
   // FPM is the top level manager.



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-12 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.90 - 1.91
---
Log message:

Implement PassManager_New destructors.


---
Diffs of the changes:  (+27 -2)

 PassManager.cpp |   29 +++--
 1 files changed, 27 insertions(+), 2 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.90 
llvm/lib/VMCore/PassManager.cpp:1.91
--- llvm/lib/VMCore/PassManager.cpp:1.90Tue Dec 12 17:51:31 2006
+++ llvm/lib/VMCore/PassManager.cpp Tue Dec 12 18:09:23 2006
@@ -126,6 +126,15 @@
   Pass *findAnalysisPass(AnalysisID AID);
 
   virtual ~PMTopLevelManager() {
+
+for (std::vectorPass *::iterator I = PassManagers.begin(),
+   E = PassManagers.end(); I != E; ++I)
+  delete *I;
+
+for (std::vectorImmutablePass *::iterator
+   I = ImmutablePasses.begin(), E = ImmutablePasses.end(); I != E; ++I)
+  delete *I;
+
 PassManagers.clear();
   }
 
@@ -182,6 +191,15 @@
 initializeAnalysisInfo();
   }
 
+  virtual ~PMDataManager() {
+
+for (std::vectorPass *::iterator I = PassVector.begin(),
+   E = PassVector.end(); I != E; ++I)
+  delete *I;
+
+PassVector.clear();
+  }
+
   /// Return true IFF pass P's required analysis set does not required new
   /// manager.
   bool manageablePass(Pass *P);
@@ -914,6 +932,10 @@
   MP = P;
 }
 
+FunctionPassManager_New::~FunctionPassManager_New() {
+  delete FPM;
+}
+
 /// add - Add a pass to the queue of passes to run.  This passes
 /// ownership of the Pass to the PassManager.  When the
 /// PassManager_X is destroyed, the pass will be destroyed as well, so
@@ -1187,8 +1209,7 @@
 
 
//===--===//
 // PassManagerImpl implementation
-
-// PassManager_New implementation
+//
 /// Add P into active pass manager or use new module pass manager to
 /// manage it.
 bool PassManagerImpl_New::addPass(Pass *P) {
@@ -1232,6 +1253,10 @@
   PM-setTopLevelManager(PM);
 }
 
+PassManager_New::~PassManager_New() {
+  delete PM;
+}
+
 /// add - Add a pass to the queue of passes to run.  This passes ownership of
 /// the Pass to the PassManager.  When the PassManager is destroyed, the pass
 /// will be destroyed as well, so there is no need to delete the pass.  This



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-12 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.91 - 1.92
---
Log message:

FunctionPassManager does not support runOnModule(). 


---
Diffs of the changes:  (+0 -7)

 PassManager.cpp |7 ---
 1 files changed, 7 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.91 
llvm/lib/VMCore/PassManager.cpp:1.92
--- llvm/lib/VMCore/PassManager.cpp:1.91Tue Dec 12 18:09:23 2006
+++ llvm/lib/VMCore/PassManager.cpp Tue Dec 12 18:34:32 2006
@@ -945,13 +945,6 @@
   FPM-add(P);
 }
 
-/// Execute all of the passes scheduled for execution.  Keep
-/// track of whether any of the passes modifies the function, and if
-/// so, return true.
-bool FunctionPassManager_New::runOnModule(Module M) {
-  return FPM-runOnModule(M);
-}
-
 /// run - Execute all of the passes scheduled for execution.  Keep
 /// track of whether any of the passes modifies the function, and if
 /// so, return true.



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-08 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.61 - 1.62
---
Log message:

Reuse code. Directly use runOnFunction().


---
Diffs of the changes:  (+2 -10)

 PassManager.cpp |   12 ++--
 1 files changed, 2 insertions(+), 10 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.61 
llvm/lib/VMCore/PassManager.cpp:1.62
--- llvm/lib/VMCore/PassManager.cpp:1.61Fri Dec  8 12:57:16 2006
+++ llvm/lib/VMCore/PassManager.cpp Fri Dec  8 13:03:05 2006
@@ -844,16 +844,8 @@
   initializeAnalysisInfo();
 
   for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
-for (std::vectorPass *::iterator itr = passVectorBegin(),
-   e = passVectorEnd(); itr != e; ++itr) {
-  Pass *P = *itr;
-  
-  FunctionPass *FP = dynamic_castFunctionPass*(P);
-  Changed |= FP-runOnFunction(*I);
-  removeNotPreservedAnalysis(P);
-  recordAvailableAnalysis(P);
-  removeDeadPasses(P);
-}
+this-runOnFunction(*I);
+
   return Changed;
 }
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-08 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.60 - 1.61
---
Log message:

Implement FunctionPassManager_New::FunctionPassManager_New(ModuleProvider *P)


---
Diffs of the changes:  (+5 -0)

 PassManager.cpp |5 +
 1 files changed, 5 insertions(+)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.60 
llvm/lib/VMCore/PassManager.cpp:1.61
--- llvm/lib/VMCore/PassManager.cpp:1.60Thu Dec  7 19:38:28 2006
+++ llvm/lib/VMCore/PassManager.cpp Fri Dec  8 12:57:16 2006
@@ -734,6 +734,11 @@
   FPM = new FunctionPassManagerImpl_New(0);
 }
 
+FunctionPassManager_New::FunctionPassManager_New(ModuleProvider *P) {
+  FPM = new FunctionPassManagerImpl_New(0);
+  MP = P;
+}
+
 /// add - Add a pass to the queue of passes to run.  This passes
 /// ownership of the Pass to the PassManager.  When the
 /// PassManager_X is destroyed, the pass will be destroyed as well, so



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-08 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.62 - 1.63
---
Log message:

During runOnModule() do initialization and finalization.


---
Diffs of the changes:  (+2 -2)

 PassManager.cpp |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.62 
llvm/lib/VMCore/PassManager.cpp:1.63
--- llvm/lib/VMCore/PassManager.cpp:1.62Fri Dec  8 13:03:05 2006
+++ llvm/lib/VMCore/PassManager.cpp Fri Dec  8 13:04:09 2006
@@ -840,13 +840,13 @@
 /// the function, and if so, return true.
 bool FunctionPassManagerImpl_New::runOnModule(Module M) {
 
-  bool Changed = false;
+  bool Changed = doInitialization(M);
   initializeAnalysisInfo();
 
   for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
 this-runOnFunction(*I);
 
-  return Changed;
+  return Changed | doFinalization(M);
 }
 
 /// Execute all of the passes scheduled for execution by invoking 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-08 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.63 - 1.64
---
Log message:

Implement PMTopLevel::findAnalysisPass() and 
PMDataManager::findAnalysisPass()


---
Diffs of the changes:  (+71 -6)

 PassManager.cpp |   77 +++-
 1 files changed, 71 insertions(+), 6 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.63 
llvm/lib/VMCore/PassManager.cpp:1.64
--- llvm/lib/VMCore/PassManager.cpp:1.63Fri Dec  8 13:04:09 2006
+++ llvm/lib/VMCore/PassManager.cpp Fri Dec  8 16:30:11 2006
@@ -118,6 +118,11 @@
   /// Collect passes whose last user is P
   void collectLastUses(std::vectorPass * LastUses, Pass *P);
 
+  /// Find the pass that implements Analysis AID. Search immutable
+  /// passes and all pass managers. If desired pass is not found
+  /// then return NULL.
+  Pass *findAnalysisPass(AnalysisID AID);
+
   virtual ~PMTopLevelManager() {
 PassManagers.clear();
   }
@@ -187,7 +192,7 @@
   for (std::vectorAnalysisID::const_iterator I = RequiredSet.begin(),
  E = RequiredSet.end(); I != E; ++I) {
 
-Pass *AnalysisPass = NULL; // FIXME PM-getAnalysisPass(*I, true);
+Pass *AnalysisPass = findAnalysisPass(*I);
 if (!AnalysisPass) {
   // Schedule this analysis run first.
   AnalysisPass = (*I)-createPass();
@@ -199,6 +204,40 @@
   addTopLevelPass(P);
 }
 
+/// Find the pass that implements Analysis AID. Search immutable
+/// passes and all pass managers. If desired pass is not found
+/// then return NULL.
+Pass *PMTopLevelManager::findAnalysisPass(AnalysisID AID) {
+
+  Pass *P = NULL;
+  for (std::vectorImmutablePass *::iterator I = ImmutablePasses.begin(),
+ E = ImmutablePasses.end(); P == NULL  I != E; ++I) {
+const PassInfo *PI = (*I)-getPassInfo();
+if (PI == AID)
+  P = *I;
+
+// If Pass not found then check the interfaces implemented by Immutable 
Pass
+if (!P) {
+  const std::vectorconst PassInfo* ImmPI = 
+PI-getInterfacesImplemented();
+  for (unsigned Index = 0, End = ImmPI.size(); 
+   P == NULL  Index != End; ++Index)
+if (ImmPI[Index] == AID)
+  P = *I;
+}
+  }
+
+  if (P)
+return P;
+
+  // Check pass managers;
+  for (std::vectorPass *::iterator I = PassManagers.begin(),
+ E = PassManagers.end(); P == NULL  I != E; ++I) 
+P = NULL; // FIXME: (*I)-findAnalysisPass(AID, false /* Search downward 
*/);
+
+  return P;
+}
+
 
//===--===//
 // PMDataManager
 
@@ -263,6 +302,10 @@
   /// implementations it needs.
   void initializeAnalysisImpl(Pass *P);
 
+  /// Find the pass that implements Analysis AID. If desired pass is not found
+  /// then return NULL.
+  Pass *findAnalysisPass(AnalysisID AID, bool Direction);
+
   inline std::vectorPass *::iterator passVectorBegin() { 
 return PassVector.begin(); 
   }
@@ -596,7 +639,7 @@
   for (std::vectorAnalysisID::const_iterator 
  I = RequiredSet.begin(), E = RequiredSet.end();
I != E; ++I) {
-Pass *AnalysisPass = NULL; //FIXME findAnalysisPass(*I,true);
+Pass *AnalysisPass = findAnalysisPass(*I, true);
 assert (AnalysisPass  Analysis pass is not available);
 RP.push_back(AnalysisPass);
   }
@@ -614,13 +657,37 @@
   for (std::vectorconst PassInfo *::const_iterator
  I = AnUsage.getRequiredSet().begin(),
  E = AnUsage.getRequiredSet().end(); I != E; ++I) {
-Pass *Impl = getAnalysisPass(*I);
+Pass *Impl = findAnalysisPass(*I, true);
 if (Impl == 0)
   assert(0  Analysis used but not available!);
 // TODO:  P-AnalysisImpls.push_back(std::make_pair(*I, Impl));
   }
 }
 
+/// Find the pass that implements Analysis AID. If desired pass is not found
+/// then return NULL.
+Pass *PMDataManager::findAnalysisPass(AnalysisID AID, bool SearchParent) {
+
+  // Check if AvailableAnalysis map has one entry.
+  std::mapAnalysisID, Pass*::const_iterator I =  AvailableAnalysis.find(AID);
+
+  if (I != AvailableAnalysis.end())
+return I-second;
+
+  // Search Parents through TopLevelManager
+  if (SearchParent)
+return TPM-findAnalysisPass(AID);
+  
+  // FIXME : This is expensive and requires. Need to check only managers not 
all passes.
+  // One solution is to collect managers in advance at TPM level.
+  Pass *P = NULL;
+  for(std::vectorPass *::iterator I = passVectorBegin(),
+E = passVectorEnd(); P == NULL  I!= E; ++I )
+P = NULL; // FIXME : P = (*I)-getResolver()-getAnalysisToUpdate(AID, 
false /* Do not search parents again */);
+
+  return P;
+}
+
 
//===--===//
 // BasicBlockPassManager_New implementation
 
@@ -912,7 +979,6 @@
 Changed |= FP-doFinalization(M);
   }
 
-
   return Changed;
 }
 
@@ -928,8 +994,7 @@
   // If P is FunctionPass then use function pass maanager.
   if (FunctionPass *FP = 

[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-08 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.64 - 1.65
---
Log message:

Remove unused getAnalysisPass and getAnalysisPassFromManager


---
Diffs of the changes:  (+0 -76)

 PassManager.cpp |   76 
 1 files changed, 76 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.64 
llvm/lib/VMCore/PassManager.cpp:1.65
--- llvm/lib/VMCore/PassManager.cpp:1.64Fri Dec  8 16:30:11 2006
+++ llvm/lib/VMCore/PassManager.cpp Fri Dec  8 16:32:32 2006
@@ -255,17 +255,6 @@
   /// manager.
   bool manageablePass(Pass *P);
 
-  Pass *getAnalysisPass(AnalysisID AID) const {
-
-std::mapAnalysisID, Pass*::const_iterator I = 
-  AvailableAnalysis.find(AID);
-
-if (I != AvailableAnalysis.end())
-  return NULL;
-else
-  return I-second;
-  }
-
   /// Augment AvailableAnalysis by adding analysis made available by pass P.
   void recordAvailableAnalysis(Pass *P);
 
@@ -360,10 +349,6 @@
   /// whether any of the passes modifies the function, and if so, return true.
   bool runOnFunction(Function F);
 
-  /// Return true IFF AnalysisID AID is currently available.
-  /// TODO : Replace this method with getAnalysisPass()
-  Pass *getAnalysisPassFromManager(AnalysisID AID);
-
   /// Pass Manager itself does not invalidate any analysis info.
   void getAnalysisUsage(AnalysisUsage Info) const {
 Info.setPreservesAll();
@@ -413,10 +398,6 @@
   bool runOnModule(Module M);
   bool runOnFunction(Function F);
 
-  /// Return true IFF AnalysisID AID is currently available.
-  /// TODO : Replace this method with getAnalysisPass()
-  Pass *getAnalysisPassFromManager(AnalysisID AID);
-
   /// doInitialization - Run all of the initializers for the function passes.
   ///
   bool doInitialization(Module M);
@@ -453,10 +434,6 @@
   /// whether any of the passes modifies the module, and if so, return true.
   bool runOnModule(Module M);
 
-  /// Return true IFF AnalysisID AID is currently available.
-  /// TODO : Replace this method with getAnalysisPass()
-  Pass *getAnalysisPassFromManager(AnalysisID AID);
-
   /// Pass Manager itself does not invalidate any analysis info.
   void getAnalysisUsage(AnalysisUsage Info) const {
 Info.setPreservesAll();
@@ -488,10 +465,6 @@
   /// whether any of the passes modifies the module, and if so, return true.
   bool run(Module M);
 
-  /// Return true IFF AnalysisID AID is currently available.
-  /// TODO : Replace this method with getAnalysisPass()
-  Pass *getAnalysisPassFromManager(AnalysisID AID);
-
   /// Pass Manager itself does not invalidate any analysis info.
   void getAnalysisUsage(AnalysisUsage Info) const {
 Info.setPreservesAll();
@@ -733,12 +706,6 @@
   return Changed | doFinalization(F);
 }
 
-/// Return true IFF AnalysisID AID is currently available.
-/// TODO : Replace this method with getAnalysisPass()
-Pass * BasicBlockPassManager_New::getAnalysisPassFromManager(AnalysisID AID) {
-  return getAnalysisPass(AID);
-}
-
 // Implement doInitialization and doFinalization
 inline bool BasicBlockPassManager_New::doInitialization(Module M) {
   bool Changed = false;
@@ -938,22 +905,6 @@
 }
 
 
-/// Return true IFF AnalysisID AID is currently available.
-/// TODO : Replace this method with getAnalysisPass()
-Pass *FunctionPassManagerImpl_New::getAnalysisPassFromManager(AnalysisID AID) {
-
-  Pass *P = getAnalysisPass(AID);
-  if (P)
-return P;
-
-  if (activeBBPassManager  
-  activeBBPassManager-getAnalysisPass(AID) != 0)
-return activeBBPassManager-getAnalysisPass(AID);
-
-  // TODO : Check inactive managers
-  return NULL;
-}
-
 inline bool FunctionPassManagerImpl_New::doInitialization(Module M) {
   bool Changed = false;
 
@@ -1057,36 +1008,9 @@
   return Changed;
 }
 
-/// Return true IFF AnalysisID AID is currently available.
-/// TODO : Replace this method with getAnalysisPass()
-Pass *ModulePassManager_New::getAnalysisPassFromManager(AnalysisID AID) {
-
-  Pass *P = getAnalysisPass(AID);
-  if (P)
-return P;
-
-  if (activeFunctionPassManager  
-  activeFunctionPassManager-getAnalysisPass(AID) != 0)
-return activeFunctionPassManager-getAnalysisPass(AID);
-
-  // TODO : Check inactive managers
-  return NULL;
-}
-
 
//===--===//
 // PassManagerImpl implementation
 
-/// Return true IFF AnalysisID AID is currently available.
-/// TODO : Replace this method with getAnalysisPass()
-Pass *PassManagerImpl_New::getAnalysisPassFromManager(AnalysisID AID) {
-
-  Pass *P = NULL;
-  for (std::vectorModulePassManager_New *::iterator itr = 
PassManagers.begin(),
- e = PassManagers.end(); !P  itr != e; ++itr)
-P  = (*itr)-getAnalysisPassFromManager(AID);
-  return P;
-}
-
 // PassManager_New implementation
 /// Add P into active pass manager or use new module pass manager to
 /// manage it.



___

[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-08 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.65 - 1.66
---
Log message:

Remove unused schedulePass() parameter.


---
Diffs of the changes:  (+5 -5)

 PassManager.cpp |   10 +-
 1 files changed, 5 insertions(+), 5 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.65 
llvm/lib/VMCore/PassManager.cpp:1.66
--- llvm/lib/VMCore/PassManager.cpp:1.65Fri Dec  8 16:32:32 2006
+++ llvm/lib/VMCore/PassManager.cpp Fri Dec  8 16:34:02 2006
@@ -106,7 +106,7 @@
   /// Schedule pass P for execution. Make sure that passes required by
   /// P are run before P is run. Update analysis info maintained by
   /// the manager. Remove dead passes. This is a recursive function.
-  void schedulePass(Pass *P, Pass *PM);
+  void schedulePass(Pass *P);
 
   /// This is implemented by top level pass manager and used by 
   /// schedulePass() to add analysis info passes that are not available.
@@ -181,7 +181,7 @@
 /// Schedule pass P for execution. Make sure that passes required by
 /// P are run before P is run. Update analysis info maintained by
 /// the manager. Remove dead passes. This is a recursive function.
-void PMTopLevelManager::schedulePass(Pass *P, Pass *PM) {
+void PMTopLevelManager::schedulePass(Pass *P) {
 
   // TODO : Allocate function manager for this pass, other wise required set
   // may be inserted into previous function manager
@@ -196,7 +196,7 @@
 if (!AnalysisPass) {
   // Schedule this analysis run first.
   AnalysisPass = (*I)-createPass();
-  schedulePass(AnalysisPass, PM);
+  schedulePass(AnalysisPass);
 }
   }
 
@@ -386,7 +386,7 @@
   /// there is no need to delete the pass. (TODO delete passes.)
   /// This implies that all passes MUST be allocated with 'new'.
   void add(Pass *P) { 
-schedulePass(P, this);
+schedulePass(P);
   }
 
   /// Add pass into the pass manager queue.
@@ -458,7 +458,7 @@
   /// will be destroyed as well, so there is no need to delete the pass.  This
   /// implies that all passes MUST be allocated with 'new'.
   void add(Pass *P) {
-schedulePass(P, this);
+schedulePass(P);
   }
  
   /// run - Execute all of the passes scheduled for execution.  Keep track of



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-08 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.66 - 1.67
---
Log message:

Do not keep yet another list of pass managers in PassManagerImpl_New.
Use one provided by toplevel manager.


---
Diffs of the changes:  (+9 -8)

 PassManager.cpp |   17 +
 1 files changed, 9 insertions(+), 8 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.66 
llvm/lib/VMCore/PassManager.cpp:1.67
--- llvm/lib/VMCore/PassManager.cpp:1.66Fri Dec  8 16:34:02 2006
+++ llvm/lib/VMCore/PassManager.cpp Fri Dec  8 16:47:25 2006
@@ -137,6 +137,10 @@
 return ImmutablePasses;
   }
 
+  void addPassManager(Pass *Manager) {
+PassManagers.push_back(Manager);
+  }
+
 private:
   
   /// Collection of pass managers
@@ -479,9 +483,6 @@
   /// Add a pass into a passmanager queue.
   bool addPass(Pass *p);
 
-  // Collection of pass managers
-  std::vectorModulePassManager_New * PassManagers;
-
   // Active Pass Manager
   ModulePassManager_New *activeManager;
 };
@@ -1018,7 +1019,7 @@
 
   if (!activeManager || !activeManager-addPass(P)) {
 activeManager = new ModulePassManager_New(getDepth() + 1);
-PassManagers.push_back(activeManager);
+addPassManager(activeManager);
 return activeManager-addPass(P);
   }
   return true;
@@ -1029,10 +1030,10 @@
 bool PassManagerImpl_New::run(Module M) {
 
   bool Changed = false;
-  for (std::vectorModulePassManager_New *::iterator itr = 
PassManagers.begin(),
- e = PassManagers.end(); itr != e; ++itr) {
-ModulePassManager_New *pm = *itr;
-Changed |= pm-runOnModule(M);
+  for (std::vectorPass *::iterator I = passManagersBegin(),
+ E = passManagersEnd(); I != E; ++I) {
+ModulePassManager_New *MP = dynamic_castModulePassManager_New *(*I);
+Changed |= MP-runOnModule(M);
   }
   return Changed;
 }



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-08 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.67 - 1.68
---
Log message:

Implement top level FunctionPassManager::run(Function F)


---
Diffs of the changes:  (+15 -1)

 PassManager.cpp |   16 +++-
 1 files changed, 15 insertions(+), 1 deletion(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.67 
llvm/lib/VMCore/PassManager.cpp:1.68
--- llvm/lib/VMCore/PassManager.cpp:1.67Fri Dec  8 16:47:25 2006
+++ llvm/lib/VMCore/PassManager.cpp Fri Dec  8 16:57:48 2006
@@ -401,6 +401,7 @@
   /// so, return true.
   bool runOnModule(Module M);
   bool runOnFunction(Function F);
+  bool run(Function F);
 
   /// doInitialization - Run all of the initializers for the function passes.
   ///
@@ -800,7 +801,7 @@
 cerr  Error reading bytecode file:   errstr  \n;
 abort();
   }
-  return FPM-runOnFunction(F);
+  return FPM-run(F);
 }
 
 
@@ -934,6 +935,19 @@
   return Changed;
 }
 
+// Execute all the passes managed by this top level manager.
+// Return true if any function is modified by a pass.
+bool FunctionPassManagerImpl_New::run(Function F) {
+
+  bool Changed = false;
+  for (std::vectorPass *::iterator I = passManagersBegin(),
+ E = passManagersEnd(); I != E; ++I) {
+FunctionPass *FP = dynamic_castFunctionPass *(*I);
+Changed |= FP-runOnFunction(F);
+  }
+  return Changed;
+}
+
 
//===--===//
 // ModulePassManager implementation
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-08 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.68 - 1.69
---
Log message:

Keep track of other pass managers, that are not directly managed by
top level manager. Use this info to findAnalysisPass.


---
Diffs of the changes:  (+19 -5)

 PassManager.cpp |   24 +++-
 1 files changed, 19 insertions(+), 5 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.68 
llvm/lib/VMCore/PassManager.cpp:1.69
--- llvm/lib/VMCore/PassManager.cpp:1.68Fri Dec  8 16:57:48 2006
+++ llvm/lib/VMCore/PassManager.cpp Fri Dec  8 17:11:43 2006
@@ -141,11 +141,21 @@
 PassManagers.push_back(Manager);
   }
 
+  // Add Manager into the list of managers that are not directly
+  // maintained by this top level pass manager
+  void addOtherPassManager(Pass *Manager) {
+OtherPassManagers.push_back(Manager);
+  }
+
 private:
   
   /// Collection of pass managers
   std::vectorPass * PassManagers;
 
+  /// Collection of pass managers that are not directly maintained
+  /// by this pass manager
+  std::vectorPass * OtherPassManagers;
+
   // Map to keep track of last user of the analysis pass.
   // LastUser-second is the last user of Lastuser-first.
   std::mapPass *, Pass * LastUser;
@@ -231,14 +241,16 @@
 }
   }
 
-  if (P)
-return P;
-
-  // Check pass managers;
+  // Check pass managers
   for (std::vectorPass *::iterator I = PassManagers.begin(),
  E = PassManagers.end(); P == NULL  I != E; ++I) 
 P = NULL; // FIXME: (*I)-findAnalysisPass(AID, false /* Search downward 
*/);
 
+  // Check other pass managers
+  for (std::vectorPass *::iterator I = OtherPassManagers.begin(),
+ E = OtherPassManagers.end(); P == NULL  I != E; ++I) 
+P = NULL; // FIXME: (*I)-findAnalysisPass(AID, false /* Search downward 
*/);
+
   return P;
 }
 
@@ -839,6 +851,7 @@
   activeBBPassManager = 
 new BasicBlockPassManager_New(getDepth() + 1);
   addPassToManager(activeBBPassManager, false);
+  TPM-addOtherPassManager(activeBBPassManager);
 
   // Add pass into new manager. This time it must succeed.
   if (!activeBBPassManager-addPass(BP))
@@ -970,7 +983,8 @@
   activeFunctionPassManager = 
 new FunctionPassManagerImpl_New(getDepth() + 1);
   addPassToManager(activeFunctionPassManager, false);
-
+  TPM-addOtherPassManager(activeFunctionPassManager);
+  
   // Add pass into new manager. This time it must succeed.
   if (!activeFunctionPassManager-addPass(FP))
 assert(0  Unable to add pass);



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-08 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.69 - 1.70
---
Log message:

Add AnalysisResolver_New. It is a replacement for existing
AnalysisResolver.


---
Diffs of the changes:  (+8 -0)

 PassManager.cpp |8 
 1 files changed, 8 insertions(+)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.69 
llvm/lib/VMCore/PassManager.cpp:1.70
--- llvm/lib/VMCore/PassManager.cpp:1.69Fri Dec  8 17:11:43 2006
+++ llvm/lib/VMCore/PassManager.cpp Fri Dec  8 17:28:54 2006
@@ -675,6 +675,14 @@
   return P;
 }
 
+
+//===--===//
+// NOTE: Is this the right place to define this method ?
+// getAnalysisToUpdate - Return an analysis result or null if it doesn't exist
+Pass *AnalysisResolver_New::getAnalysisToUpdate(AnalysisID ID, bool dir) const 
{
+  return PM.findAnalysisPass(ID, dir);
+}
+
 
//===--===//
 // BasicBlockPassManager_New implementation
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-08 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.70 - 1.71
---
Log message:

Set AnalysisResolver for the passes when they are inserted into
pass manager queuer.


---
Diffs of the changes:  (+29 -0)

 PassManager.cpp |   29 +
 1 files changed, 29 insertions(+)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.70 
llvm/lib/VMCore/PassManager.cpp:1.71
--- llvm/lib/VMCore/PassManager.cpp:1.70Fri Dec  8 17:28:54 2006
+++ llvm/lib/VMCore/PassManager.cpp Fri Dec  8 17:53:00 2006
@@ -393,6 +393,15 @@
   ~FunctionPassManagerImpl_New() { /* TODO */ };
  
   inline void addTopLevelPass(Pass *P) { 
+
+if (dynamic_castImmutablePass * (P)) {
+
+  // P is a immutable pass then it will be managed by this
+  // top level manager. Set up analysis resolver to connect them.
+  AnalysisResolver_New *AR = new AnalysisResolver_New(*this);
+  P-setResolver(AR);
+}
+
 addPass(P);
   }
 
@@ -488,6 +497,15 @@
   }
 
   inline void addTopLevelPass(Pass *P) {
+
+if (dynamic_castImmutablePass * (P)) {
+  
+  // P is a immutable pass and it will be managed by this
+  // top level manager. Set up analysis resolver to connect them.
+  AnalysisResolver_New *AR = new AnalysisResolver_New(*this);
+  P-setResolver(AR);
+}
+
 addPass(P);
   }
 
@@ -577,6 +595,11 @@
 void PMDataManager::addPassToManager(Pass *P, 
  bool ProcessAnalysis) {
 
+  // This manager is going to manage pass P. Set up analysis resolver
+  // to connect them.
+  AnalysisResolver_New *AR = new AnalysisResolver_New(*this);
+  P-setResolver(AR);
+
   if (ProcessAnalysis) {
 
 // At the moment, this pass is the last user of all required passes.
@@ -1055,6 +1078,12 @@
 
   if (!activeManager || !activeManager-addPass(P)) {
 activeManager = new ModulePassManager_New(getDepth() + 1);
+
+// This top level manager is going to manage activeManager. 
+// Set up analysis resolver to connect them.
+AnalysisResolver_New *AR = new AnalysisResolver_New(*this);
+activeManager-setResolver(AR);
+
 addPassManager(activeManager);
 return activeManager-addPass(P);
   }



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-08 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.72 - 1.73
---
Log message:

Use analysis resolver to find the info.


---
Diffs of the changes:  (+11 -8)

 PassManager.cpp |   19 +++
 1 files changed, 11 insertions(+), 8 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.72 
llvm/lib/VMCore/PassManager.cpp:1.73
--- llvm/lib/VMCore/PassManager.cpp:1.72Fri Dec  8 17:57:43 2006
+++ llvm/lib/VMCore/PassManager.cpp Fri Dec  8 18:07:38 2006
@@ -243,13 +243,13 @@
 
   // Check pass managers
   for (std::vectorPass *::iterator I = PassManagers.begin(),
- E = PassManagers.end(); P == NULL  I != E; ++I) 
-P = NULL; // FIXME: (*I)-findAnalysisPass(AID, false /* Search downward 
*/);
+ E = PassManagers.end(); P == NULL  I != E; ++I)
+P = (*I)-getResolver()-getAnalysisToUpdate(AID, false);
 
   // Check other pass managers
   for (std::vectorPass *::iterator I = OtherPassManagers.begin(),
- E = OtherPassManagers.end(); P == NULL  I != E; ++I) 
-P = NULL; // FIXME: (*I)-findAnalysisPass(AID, false /* Search downward 
*/);
+ E = OtherPassManagers.end(); P == NULL  I != E; ++I)
+P = (*I)-getResolver()-getAnalysisToUpdate(AID, false);
 
   return P;
 }
@@ -614,7 +614,10 @@
E = RequiredPasses.end(); I != E; ++I) {
   Pass *PRequired = *I;
   unsigned RDepth = 0;
-  //FIXME: RDepth = PRequired-getResolver()-getDepth();
+
+  PMDataManager DM = PRequired-getResolver()-getPMDataManager();
+  RDepth = DM.getDepth();
+
   if (PDepth == RDepth)
 LastUses.push_back(PRequired);
   else if (PDepth   RDepth) {
@@ -694,9 +697,9 @@
   // One solution is to collect managers in advance at TPM level.
   Pass *P = NULL;
   for(std::vectorPass *::iterator I = passVectorBegin(),
-E = passVectorEnd(); P == NULL  I!= E; ++I )
-P = NULL; // FIXME : P = (*I)-getResolver()-getAnalysisToUpdate(AID, 
false /* Do not search parents again */);
-
+E = passVectorEnd(); P == NULL  I!= E; ++I ) {
+P = (*I)-getResolver()-getAnalysisToUpdate(AID, false /* Do not search 
parents again */);
+  }
   return P;
 }
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-08 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.73 - 1.74
---
Log message:

Top level pass manager keeps track of other managers, so this can be
removed now.


---
Diffs of the changes:  (+1 -8)

 PassManager.cpp |9 +
 1 files changed, 1 insertion(+), 8 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.73 
llvm/lib/VMCore/PassManager.cpp:1.74
--- llvm/lib/VMCore/PassManager.cpp:1.73Fri Dec  8 18:07:38 2006
+++ llvm/lib/VMCore/PassManager.cpp Fri Dec  8 18:09:12 2006
@@ -693,14 +693,7 @@
   if (SearchParent)
 return TPM-findAnalysisPass(AID);
   
-  // FIXME : This is expensive and requires. Need to check only managers not 
all passes.
-  // One solution is to collect managers in advance at TPM level.
-  Pass *P = NULL;
-  for(std::vectorPass *::iterator I = passVectorBegin(),
-E = passVectorEnd(); P == NULL  I!= E; ++I ) {
-P = (*I)-getResolver()-getAnalysisToUpdate(AID, false /* Do not search 
parents again */);
-  }
-  return P;
+  return NULL;
 }
 
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-08 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.74 - 1.75
---
Log message:

Analysis resolver now manages AnalysisImpls for the given patch.


---
Diffs of the changes:  (+2 -1)

 PassManager.cpp |3 ++-
 1 files changed, 2 insertions(+), 1 deletion(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.74 
llvm/lib/VMCore/PassManager.cpp:1.75
--- llvm/lib/VMCore/PassManager.cpp:1.74Fri Dec  8 18:09:12 2006
+++ llvm/lib/VMCore/PassManager.cpp Fri Dec  8 19:11:34 2006
@@ -675,7 +675,8 @@
 Pass *Impl = findAnalysisPass(*I, true);
 if (Impl == 0)
   assert(0  Analysis used but not available!);
-// TODO:  P-AnalysisImpls.push_back(std::make_pair(*I, Impl));
+AnalysisResolver_New *AR = P-getResolver();
+AR-addAnalysisImplsPair(*I, Impl);
   }
 }
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-07 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.34 - 1.35
---
Log message:

Add overview of pass manager.


---
Diffs of the changes:  (+64 -0)

 PassManager.cpp |   64 
 1 files changed, 64 insertions(+)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.34 
llvm/lib/VMCore/PassManager.cpp:1.35
--- llvm/lib/VMCore/PassManager.cpp:1.34Wed Dec  6 19:30:31 2006
+++ llvm/lib/VMCore/PassManager.cpp Thu Dec  7 12:23:30 2006
@@ -20,6 +20,70 @@
 #include map
 using namespace llvm;
 
+//===--===//
+// Overview:
+// The Pass Manager Infrastructure manages passes. It's responsibilities are:
+// 
+//   o Manage optimization pass execution order
+//   o Make required Analysis information available before pass P is run
+//   o Release memory occupied by dead passes
+//   o If Analysis information is dirtied by a pass then regenerate Analysis 
+// information before it is consumed by another pass.
+//
+// Pass Manager Infrastructure uses multipe pass managers. They are 
PassManager,
+// FunctionPassManager, ModulePassManager, BasicBlockPassManager. This class 
+// hierarcy uses multiple inheritance but pass managers do not derive from
+// another pass manager.
+//
+// PassManager and FunctionPassManager are two top level pass manager that
+// represents the external interface of this entire pass manager infrastucture.
+//
+// Important classes :
+//
+// [o] class PMTopLevelManager;
+//
+// Two top level managers, PassManager and FunctionPassManager, derive from 
+// PMTopLevelManager. PMTopLevelManager manages information used by top level 
+// managers such as last user info.
+//
+// [o] class PMDataManager;
+//
+// PMDataManager manages information, e.g. list of available analysis info, 
+// used by a pass manager to manage execution order of passes. It also provides
+// a place to implement common pass manager APIs. All pass managers derive from
+// PMDataManager.
+//
+// [o] class BasicBlockPassManager : public FunctionPass, public PMDataManager;
+//
+// BasicBlockPassManager manages BasicBlockPasses.
+//
+// [o] class FunctionPassManager;
+//
+// This is a external interface used by JIT to manage FunctionPasses. This
+// interface relies on FunctionPassManagerImpl to do all the tasks.
+//
+// [o] class FunctionPassManagerImpl : public ModulePass, PMDataManager,
+// public PMTopLevelManager;
+//
+// FunctionPassManagerImpl is a top level manager. It manages FunctionPasses
+// and BasicBlockPassManagers.
+//
+// [o] class ModulePassManager : public Pass, public PMDataManager;
+//
+// ModulePassManager manages ModulePasses and FunctionPassManagerImpls.
+//
+// [o] class PassManager;
+//
+// This is a external interface used by various tools to manages passes. It
+// relies on PassManagerImpl to do all the tasks.
+//
+// [o] class PassManagerImpl : public Pass, public PMDataManager,
+// public PMDTopLevelManager
+//
+// PassManagerImpl is a top level pass manager responsible for managing
+// ModulePassManagers.
+//===--===//
+
 namespace llvm {
 
 /// CommonPassManagerImpl helps pass manager analysis required by



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-07 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.36 - 1.37
---
Log message:

s/clearAnalysis/initializeAnalysisInfo/g


---
Diffs of the changes:  (+6 -7)

 PassManager.cpp |   13 ++---
 1 files changed, 6 insertions(+), 7 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.36 
llvm/lib/VMCore/PassManager.cpp:1.37
--- llvm/lib/VMCore/PassManager.cpp:1.36Thu Dec  7 12:36:24 2006
+++ llvm/lib/VMCore/PassManager.cpp Thu Dec  7 12:41:09 2006
@@ -123,9 +123,8 @@
   /// AvailableAnalysis appropriately if ProcessAnalysis is true.
   void addPassToManager (Pass *P, bool ProcessAnalysis = true);
 
-  /// Clear analysis vectors RequiredAnalysis and AvailableAnalysis.
-  /// This is used before running passes managed by the manager.
-  void clearAnalysis() { 
+  // Initialize available analysis information.
+  void initializeAnalysisInfo() { 
 RequiredAnalysis.clear();
 AvailableAnalysis.clear();
 LastUser.clear();
@@ -455,7 +454,7 @@
 BasicBlockPassManager_New::runOnFunction(Function F) {
 
   bool Changed = false;
-  clearAnalysis();
+  initializeAnalysisInfo();
 
   for (Function::iterator I = F.begin(), E = F.end(); I != E; ++I)
 for (std::vectorPass *::iterator itr = passVectorBegin(),
@@ -568,7 +567,7 @@
 bool FunctionPassManagerImpl_New::runOnModule(Module M) {
 
   bool Changed = false;
-  clearAnalysis();
+  initializeAnalysisInfo();
 
   for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
 for (std::vectorPass *::iterator itr = passVectorBegin(),
@@ -590,7 +589,7 @@
 bool FunctionPassManagerImpl_New::runOnFunction(Function F) {
 
   bool Changed = false;
-  clearAnalysis();
+  initializeAnalysisInfo();
 
   for (std::vectorPass *::iterator itr = passVectorBegin(),
  e = passVectorEnd(); itr != e; ++itr) {
@@ -696,7 +695,7 @@
 bool
 ModulePassManager_New::runOnModule(Module M) {
   bool Changed = false;
-  clearAnalysis();
+  initializeAnalysisInfo();
 
   for (std::vectorPass *::iterator itr = passVectorBegin(),
  e = passVectorEnd(); itr != e; ++itr) {



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-07 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.35 - 1.36
---
Log message:

s/CommonPassManagerImpl/PMDataManager/g


---
Diffs of the changes:  (+15 -16)

 PassManager.cpp |   31 +++
 1 files changed, 15 insertions(+), 16 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.35 
llvm/lib/VMCore/PassManager.cpp:1.36
--- llvm/lib/VMCore/PassManager.cpp:1.35Thu Dec  7 12:23:30 2006
+++ llvm/lib/VMCore/PassManager.cpp Thu Dec  7 12:36:24 2006
@@ -86,10 +86,9 @@
 
 namespace llvm {
 
-/// CommonPassManagerImpl helps pass manager analysis required by
-/// the managed passes. It provides methods to add/remove analysis
-/// available and query if certain analysis is available or not.
-class CommonPassManagerImpl {
+/// PMDataManager provides the common place to manage the analysis data
+/// used by pass managers.
+class PMDataManager {
 
 public:
 
@@ -176,7 +175,7 @@
 /// BasicBlockPassManager_New manages BasicBlockPass. It batches all the
 /// pass together and sequence them to process one basic block before
 /// processing next basic block.
-class BasicBlockPassManager_New : public CommonPassManagerImpl, 
+class BasicBlockPassManager_New : public PMDataManager, 
   public FunctionPass {
 
 public:
@@ -199,7 +198,7 @@
 /// It batches all function passes and basic block pass managers together and
 /// sequence them to process one function at a time before processing next
 /// function.
-class FunctionPassManagerImpl_New : public CommonPassManagerImpl,
+class FunctionPassManagerImpl_New : public PMDataManager,
 public ModulePass {
 public:
   FunctionPassManagerImpl_New(ModuleProvider *P) { /* TODO */ }
@@ -242,7 +241,7 @@
 /// ModulePassManager_New manages ModulePasses and function pass managers.
 /// It batches all Module passes  passes and function pass managers together 
and
 /// sequence them to process one module.
-class ModulePassManager_New : public CommonPassManagerImpl {
+class ModulePassManager_New : public PMDataManager {
  
 public:
   ModulePassManager_New() { activeFunctionPassManager = NULL; }
@@ -263,7 +262,7 @@
 };
 
 /// PassManager_New manages ModulePassManagers
-class PassManagerImpl_New : public CommonPassManagerImpl {
+class PassManagerImpl_New : public PMDataManager {
 
 public:
 
@@ -303,11 +302,11 @@
 
 } // End of llvm namespace
 
-// CommonPassManagerImpl implementation
+// PMDataManager implementation
 
 /// Return true IFF pass P's required analysis set does not required new
 /// manager.
-bool CommonPassManagerImpl::manageablePass(Pass *P) {
+bool PMDataManager::manageablePass(Pass *P) {
 
   AnalysisUsage AnUsage;
   P-getAnalysisUsage(AnUsage);
@@ -328,7 +327,7 @@
 }
 
 /// Augment RequiredAnalysis by adding analysis required by pass P.
-void CommonPassManagerImpl::noteDownRequiredAnalysis(Pass *P) {
+void PMDataManager::noteDownRequiredAnalysis(Pass *P) {
   AnalysisUsage AnUsage;
   P-getAnalysisUsage(AnUsage);
   const std::vectorAnalysisID RequiredSet = AnUsage.getRequiredSet();
@@ -341,7 +340,7 @@
 }
 
 /// Augement AvailableAnalysis by adding analysis made available by pass P.
-void CommonPassManagerImpl::noteDownAvailableAnalysis(Pass *P) {
+void PMDataManager::noteDownAvailableAnalysis(Pass *P) {
 
   if (const PassInfo *PI = P-getPassInfo()) {
 AvailableAnalysis[PI] = P;
@@ -356,7 +355,7 @@
 }
 
 /// Remove Analyss not preserved by Pass P
-void CommonPassManagerImpl::removeNotPreservedAnalysis(Pass *P) {
+void PMDataManager::removeNotPreservedAnalysis(Pass *P) {
   AnalysisUsage AnUsage;
   P-getAnalysisUsage(AnUsage);
   const std::vectorAnalysisID PreservedSet = AnUsage.getPreservedSet();
@@ -373,7 +372,7 @@
 }
 
 /// Remove analysis passes that are not used any longer
-void CommonPassManagerImpl::removeDeadPasses(Pass *P) {
+void PMDataManager::removeDeadPasses(Pass *P) {
 
   for (std::mapPass *, Pass *::iterator I = LastUser.begin(),
  E = LastUser.end(); I !=E; ++I) {
@@ -393,7 +392,7 @@
 
 /// Add pass P into the PassVector. Update RequiredAnalysis and
 /// AvailableAnalysis appropriately if ProcessAnalysis is true.
-void CommonPassManagerImpl::addPassToManager (Pass *P, 
+void PMDataManager::addPassToManager (Pass *P, 
   bool ProcessAnalysis) {
 
   if (ProcessAnalysis) {
@@ -414,7 +413,7 @@
 // successfully use the getAnalysis() method to retrieve the
 // implementations it needs.
 //
-void CommonPassManagerImpl::initializeAnalysisImpl(Pass *P) {
+void PMDataManager::initializeAnalysisImpl(Pass *P) {
   AnalysisUsage AnUsage;
   P-getAnalysisUsage(AnUsage);
  



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-07 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.37 - 1.38
---
Log message:

RequiredAnalysis support is buggy and not used at the moment so remove 
the code. Add TODO note.


---
Diffs of the changes:  (+10 -41)

 PassManager.cpp |   51 ++-
 1 files changed, 10 insertions(+), 41 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.37 
llvm/lib/VMCore/PassManager.cpp:1.38
--- llvm/lib/VMCore/PassManager.cpp:1.37Thu Dec  7 12:41:09 2006
+++ llvm/lib/VMCore/PassManager.cpp Thu Dec  7 12:47:25 2006
@@ -107,9 +107,6 @@
   return I-second;
   }
 
-  /// Augment RequiredAnalysis by adding analysis required by pass P.
-  void noteDownRequiredAnalysis(Pass *P);
-
   /// Augment AvailableAnalysis by adding analysis made available by pass P.
   void noteDownAvailableAnalysis(Pass *P);
 
@@ -119,13 +116,12 @@
   /// Remove dead passes
   void removeDeadPasses(Pass *P);
 
-  /// Add pass P into the PassVector. Update RequiredAnalysis and
+  /// Add pass P into the PassVector. Update 
   /// AvailableAnalysis appropriately if ProcessAnalysis is true.
   void addPassToManager (Pass *P, bool ProcessAnalysis = true);
 
   // Initialize available analysis information.
   void initializeAnalysisInfo() { 
-RequiredAnalysis.clear();
 AvailableAnalysis.clear();
 LastUser.clear();
   }
@@ -151,12 +147,6 @@
   }
 
 private:
-  // Analysis required by the passes managed by this manager. This information
-  // used while selecting pass manager during addPass. If a pass does not
-  // preserve any analysis required by other passes managed by current
-  // pass manager then new pass manager is used.
-  std::vectorAnalysisID RequiredAnalysis;
-
   // Set of available Analysis. This information is used while scheduling 
   // pass. If a pass requires an analysis which is not not available then 
   // equired analysis pass is scheduled to run before the pass itself is 
@@ -307,37 +297,16 @@
 /// manager.
 bool PMDataManager::manageablePass(Pass *P) {
 
-  AnalysisUsage AnUsage;
-  P-getAnalysisUsage(AnUsage);
-
-  // If this pass is not preserving information that is required by the other
-  // passes managed by this manager then use new manager
-  if (!AnUsage.getPreservesAll()) {
-const std::vectorAnalysisID PreservedSet = AnUsage.getPreservedSet();
-for (std::vectorAnalysisID::iterator I = RequiredAnalysis.begin(),
-   E = RequiredAnalysis.end(); I != E; ++I) {
-  if (std::find(PreservedSet.begin(), PreservedSet.end(), *I) == 
-  PreservedSet.end())
-// This analysis is not preserved. Need new manager.
-return false;
-}
-  }
+  // TODO 
+  // If this pass is not preserving information that is required by a
+  // pass maintained by higher level pass manager then do not insert
+  // this pass into current manager. Use new manager. For example,
+  // For example, If FunctionPass F is not preserving ModulePass Info M1
+  // that is used by another ModulePass M2 then do not insert F in
+  // current function pass manager.
   return true;
 }
 
-/// Augment RequiredAnalysis by adding analysis required by pass P.
-void PMDataManager::noteDownRequiredAnalysis(Pass *P) {
-  AnalysisUsage AnUsage;
-  P-getAnalysisUsage(AnUsage);
-  const std::vectorAnalysisID RequiredSet = AnUsage.getRequiredSet();
-
-  // FIXME: What about duplicates ?
-  RequiredAnalysis.insert(RequiredAnalysis.end(), RequiredSet.begin(), 
-  RequiredSet.end());
-
-  initializeAnalysisImpl(P);
-}
-
 /// Augement AvailableAnalysis by adding analysis made available by pass P.
 void PMDataManager::noteDownAvailableAnalysis(Pass *P) {
 
@@ -389,14 +358,14 @@
   }
 }
 
-/// Add pass P into the PassVector. Update RequiredAnalysis and
+/// Add pass P into the PassVector. Update 
 /// AvailableAnalysis appropriately if ProcessAnalysis is true.
 void PMDataManager::addPassToManager (Pass *P, 
   bool ProcessAnalysis) {
 
   if (ProcessAnalysis) {
 // Take a note of analysis required and made available by this pass
-noteDownRequiredAnalysis(P);
+initializeAnalysisImpl(P);
 noteDownAvailableAnalysis(P);
 
 // Remove the analysis not preserved by this pass



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-07 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.38 - 1.39
---
Log message:

Add PMTopLevelManager. It is not used yet.


---
Diffs of the changes:  (+76 -0)

 PassManager.cpp |   76 
 1 files changed, 76 insertions(+)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.38 
llvm/lib/VMCore/PassManager.cpp:1.39
--- llvm/lib/VMCore/PassManager.cpp:1.38Thu Dec  7 12:47:25 2006
+++ llvm/lib/VMCore/PassManager.cpp Thu Dec  7 13:21:29 2006
@@ -86,6 +86,82 @@
 
 namespace llvm {
 
+//===--===//
+// PMTopLevelManager
+//
+/// PMTopLevelManager manages LastUser info and collects common APIs used by
+/// top level pass managers.
+class PMTopLevelManager {
+
+public:
+
+  inline std::vectorPass *::iterator passManagersBegin() { 
+return PassManagers.begin(); 
+  }
+
+  inline std::vectorPass *::iterator passManagersEnd() { 
+return PassManagers.end();
+  }
+
+  /// Schedule pass P for execution. Make sure that passes required by
+  /// P are run before P is run. Update analysis info maintained by
+  /// the manager. Remove dead passes. This is a recursive function.
+  void schedulePass(Pass *P, Pass *PM);
+
+  /// This is implemented by top level pass manager and used by 
+  /// schedulePass() to add analysis info passes that are not available.
+  virtual void addTopLevelPass(Pass  *P) = 0;
+
+  /// Set pass P as the last user of the given analysis passes.
+  void setLastUser(std::vectorPass * AnalysisPasses, Pass *P);
+
+  /// Collect passes whose last user is P
+  void collectLastUses(std::vectorPass * LastUses, Pass *P);
+
+  virtual ~PMTopLevelManager() {
+PassManagers.clear();
+  }
+
+private:
+  
+  /// Collection of pass managers
+  std::vectorPass * PassManagers;
+
+  // Map to keep track of last user of the analysis pass.
+  // LastUser-second is the last user of Lastuser-first.
+  std::mapPass *, Pass * LastUser;
+};
+  
+/// Set pass P as the last user of the given analysis passes.
+void PMTopLevelManager::setLastUser(std::vectorPass * AnalysisPasses, 
+Pass *P) {
+
+  for (std::vectorPass *::iterator I = AnalysisPasses.begin(),
+ E = AnalysisPasses.end(); I != E; ++I) {
+Pass *AP = *I;
+LastUser[AP] = P;
+// If AP is the last user of other passes then make P last user of
+// such passes.
+for (std::mapPass *, Pass *::iterator LUI = LastUser.begin(),
+   LUE = LastUser.end(); LUI != LUE; ++LUI) {
+  if (LUI-second == AP)
+LastUser[LUI-first] = P;
+}
+  }
+
+}
+
+/// Collect passes whose last user is P
+void PMTopLevelManager::collectLastUses(std::vectorPass * LastUses,
+Pass *P) {
+   for (std::mapPass *, Pass *::iterator LUI = LastUser.begin(),
+  LUE = LastUser.end(); LUI != LUE; ++LUI)
+  if (LUI-second == P)
+LastUses.push_back(LUI-first);
+}
+
+
+
 /// PMDataManager provides the common place to manage the analysis data
 /// used by pass managers.
 class PMDataManager {



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-07 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.39 - 1.40
---
Log message:

s/noteDownAvailableAnalysis/recordAvailableAnalysis

While recording available analysis, include interfaces implemented.


---
Diffs of the changes:  (+12 -13)

 PassManager.cpp |   25 -
 1 files changed, 12 insertions(+), 13 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.39 
llvm/lib/VMCore/PassManager.cpp:1.40
--- llvm/lib/VMCore/PassManager.cpp:1.39Thu Dec  7 13:21:29 2006
+++ llvm/lib/VMCore/PassManager.cpp Thu Dec  7 13:33:53 2006
@@ -184,7 +184,7 @@
   }
 
   /// Augment AvailableAnalysis by adding analysis made available by pass P.
-  void noteDownAvailableAnalysis(Pass *P);
+  void recordAvailableAnalysis(Pass *P);
 
   /// Remove Analysis that is not preserved by the pass
   void removeNotPreservedAnalysis(Pass *P);
@@ -384,17 +384,16 @@
 }
 
 /// Augement AvailableAnalysis by adding analysis made available by pass P.
-void PMDataManager::noteDownAvailableAnalysis(Pass *P) {
+void PMDataManager::recordAvailableAnalysis(Pass *P) {
 
   if (const PassInfo *PI = P-getPassInfo()) {
 AvailableAnalysis[PI] = P;
 
-//TODO This pass is the current implementation of all of the interfaces it
-//TODO implements as well.
-//TODO
-//TODO const std::vectorconst PassInfo* II = 
PI-getInterfacesImplemented();
-//TODO for (unsigned i = 0, e = II.size(); i != e; ++i)
-//TODO CurrentAnalyses[II[i]] = P;
+//This pass is the current implementation of all of the interfaces it
+//implements as well.
+const std::vectorconst PassInfo* II = PI-getInterfacesImplemented();
+for (unsigned i = 0, e = II.size(); i != e; ++i)
+  AvailableAnalysis[II[i]] = P;
   }
 }
 
@@ -442,7 +441,7 @@
   if (ProcessAnalysis) {
 // Take a note of analysis required and made available by this pass
 initializeAnalysisImpl(P);
-noteDownAvailableAnalysis(P);
+recordAvailableAnalysis(P);
 
 // Remove the analysis not preserved by this pass
 removeNotPreservedAnalysis(P);
@@ -506,7 +505,7 @@
e = passVectorEnd(); itr != e; ++itr) {
   Pass *P = *itr;
   
-  noteDownAvailableAnalysis(P);
+  recordAvailableAnalysis(P);
   BasicBlockPass *BP = dynamic_castBasicBlockPass*(P);
   Changed |= BP-runOnBasicBlock(*I);
   removeNotPreservedAnalysis(P);
@@ -619,7 +618,7 @@
e = passVectorEnd(); itr != e; ++itr) {
   Pass *P = *itr;
   
-  noteDownAvailableAnalysis(P);
+  recordAvailableAnalysis(P);
   FunctionPass *FP = dynamic_castFunctionPass*(P);
   Changed |= FP-runOnFunction(*I);
   removeNotPreservedAnalysis(P);
@@ -640,7 +639,7 @@
  e = passVectorEnd(); itr != e; ++itr) {
 Pass *P = *itr;
 
-noteDownAvailableAnalysis(P);
+recordAvailableAnalysis(P);
 FunctionPass *FP = dynamic_castFunctionPass*(P);
 Changed |= FP-runOnFunction(F);
 removeNotPreservedAnalysis(P);
@@ -746,7 +745,7 @@
  e = passVectorEnd(); itr != e; ++itr) {
 Pass *P = *itr;
 
-noteDownAvailableAnalysis(P);
+recordAvailableAnalysis(P);
 ModulePass *MP = dynamic_castModulePass*(P);
 Changed |= MP-runOnModule(M);
 removeNotPreservedAnalysis(P);



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-07 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.40 - 1.41
---
Log message:

Cosmetic markers to divide code in separate chunks.


---
Diffs of the changes:  (+13 -4)

 PassManager.cpp |   17 +
 1 files changed, 13 insertions(+), 4 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.40 
llvm/lib/VMCore/PassManager.cpp:1.41
--- llvm/lib/VMCore/PassManager.cpp:1.40Thu Dec  7 13:33:53 2006
+++ llvm/lib/VMCore/PassManager.cpp Thu Dec  7 13:39:39 2006
@@ -367,6 +367,7 @@
 
 } // End of llvm namespace
 
+//===--===//
 // PMDataManager implementation
 
 /// Return true IFF pass P's required analysis set does not required new
@@ -470,7 +471,8 @@
   }
 }
 
-/// BasicBlockPassManager implementation
+//===--===//
+// BasicBlockPassManager_New implementation
 
 /// Add pass P into PassVector and return true. If this pass is not
 /// manageable by this manager then return false.
@@ -519,7 +521,9 @@
   return getAnalysisPass(AID);
 }
 
+//===--===//
 // FunctionPassManager_New implementation
+
 /// Create new Function pass manager
 FunctionPassManager_New::FunctionPassManager_New() {
   FPM = new FunctionPassManagerImpl_New();
@@ -567,10 +571,9 @@
   return FPM-doFinalization(*MP-getModule());
 }
 
+//===--===//
 // FunctionPassManagerImpl_New implementation
 
-// FunctionPassManager
-
 /// Add pass P into the pass manager queue. If P is a BasicBlockPass then
 /// either use it into active basic block pass manager or create new basic
 /// block pass manager to handle pass P.
@@ -693,7 +696,7 @@
   return Changed;
 }
 
-
+//===--===//
 // ModulePassManager implementation
 
 /// Add P into pass vector if it is manageble. If P is a FunctionPass
@@ -770,6 +773,9 @@
   return NULL;
 }
 
+//===--===//
+// PassManagerImpl implementation
+
 /// Return true IFF AnalysisID AID is currently available.
 Pass *PassManagerImpl_New::getAnalysisPassFromManager(AnalysisID AID) {
 
@@ -854,6 +860,9 @@
   return Changed;
 }
 
+//===--===//
+// PassManager implementation
+
 /// Create new pass manager
 PassManager_New::PassManager_New() {
   PM = new PassManagerImpl_New();



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-07 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.41 - 1.42
---
Log message:

Add a handle to the top level pass manager in PMDataManager.


---
Diffs of the changes:  (+14 -1)

 PassManager.cpp |   15 ++-
 1 files changed, 14 insertions(+), 1 deletion(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.41 
llvm/lib/VMCore/PassManager.cpp:1.42
--- llvm/lib/VMCore/PassManager.cpp:1.41Thu Dec  7 13:39:39 2006
+++ llvm/lib/VMCore/PassManager.cpp Thu Dec  7 13:54:15 2006
@@ -160,7 +160,8 @@
 LastUses.push_back(LUI-first);
 }
 
-
+//===--===//
+// PMDataManager
 
 /// PMDataManager provides the common place to manage the analysis data
 /// used by pass managers.
@@ -168,6 +169,10 @@
 
 public:
 
+  PMDataManager() : TPM(NULL) {
+initializeAnalysisInfo();
+  }
+
   /// Return true IFF pass P's required analysis set does not required new
   /// manager.
   bool manageablePass(Pass *P);
@@ -222,6 +227,10 @@
 // TODO : Check if pass P is available.
   }
 
+  // Access toplevel manager
+  PMTopLevelManager *getTopLevelManager() { return TPM; }
+  void setTopLevelManager(PMTopLevelManager *T) { TPM = T; }
+
 private:
   // Set of available Analysis. This information is used while scheduling 
   // pass. If a pass requires an analysis which is not not available then 
@@ -235,6 +244,10 @@
 
   // Collection of pass that are managed by this manager
   std::vectorPass * PassVector;
+
+  // Top level manager.
+  // TODO : Make it a reference.
+  PMTopLevelManager *TPM;
 };
 
 /// BasicBlockPassManager_New manages BasicBlockPass. It batches all the



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-07 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.42 - 1.43
---
Log message:

Pass Managers themselves do not invalidate any analysis info.


---
Diffs of the changes:  (+22 -1)

 PassManager.cpp |   23 ++-
 1 files changed, 22 insertions(+), 1 deletion(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.42 
llvm/lib/VMCore/PassManager.cpp:1.43
--- llvm/lib/VMCore/PassManager.cpp:1.42Thu Dec  7 13:54:15 2006
+++ llvm/lib/VMCore/PassManager.cpp Thu Dec  7 13:57:52 2006
@@ -269,6 +269,11 @@
   /// Return true IFF AnalysisID AID is currently available.
   Pass *getAnalysisPassFromManager(AnalysisID AID);
 
+  /// Pass Manager itself does not invalidate any analysis info.
+  void getAnalysisUsage(AnalysisUsage Info) const {
+Info.setPreservesAll();
+  }
+
 private:
 };
 
@@ -311,6 +316,12 @@
   /// doFinalization - Run all of the initializers for the function passes.
   ///
   bool doFinalization(Module M);
+
+  /// Pass Manager itself does not invalidate any analysis info.
+  void getAnalysisUsage(AnalysisUsage Info) const {
+Info.setPreservesAll();
+  }
+
 private:
   // Active Pass Managers
   BasicBlockPassManager_New *activeBBPassManager;
@@ -333,7 +344,12 @@
 
   /// Return true IFF AnalysisID AID is currently available.
   Pass *getAnalysisPassFromManager(AnalysisID AID);
-  
+
+  /// Pass Manager itself does not invalidate any analysis info.
+  void getAnalysisUsage(AnalysisUsage Info) const {
+Info.setPreservesAll();
+  }
+
 private:
   // Active Pass Manager
   FunctionPassManagerImpl_New *activeFunctionPassManager;
@@ -357,6 +373,11 @@
   /// Return true IFF AnalysisID AID is currently available.
   Pass *getAnalysisPassFromManager(AnalysisID AID);
 
+  /// Pass Manager itself does not invalidate any analysis info.
+  void getAnalysisUsage(AnalysisUsage Info) const {
+Info.setPreservesAll();
+  }
+
 private:
 
   /// Add a pass into a passmanager queue. This is used by schedulePasses



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-07 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.43 - 1.44
---
Log message:

If pass reserves all analysis info then each info is not separately
included in PreservedSet. So check getPreservesAll() first.


---
Diffs of the changes:  (+6 -3)

 PassManager.cpp |9 ++---
 1 files changed, 6 insertions(+), 3 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.43 
llvm/lib/VMCore/PassManager.cpp:1.44
--- llvm/lib/VMCore/PassManager.cpp:1.43Thu Dec  7 13:57:52 2006
+++ llvm/lib/VMCore/PassManager.cpp Thu Dec  7 14:03:49 2006
@@ -436,8 +436,11 @@
 void PMDataManager::removeNotPreservedAnalysis(Pass *P) {
   AnalysisUsage AnUsage;
   P-getAnalysisUsage(AnUsage);
-  const std::vectorAnalysisID PreservedSet = AnUsage.getPreservedSet();
 
+  if (AnUsage.getPreservesAll())
+return;
+
+  const std::vectorAnalysisID PreservedSet = AnUsage.getPreservedSet();
   for (std::mapAnalysisID, Pass*::iterator I = AvailableAnalysis.begin(),
  E = AvailableAnalysis.end(); I != E; ++I ) {
 if (std::find(PreservedSet.begin(), PreservedSet.end(), I-first) == 
@@ -470,8 +473,8 @@
 
 /// Add pass P into the PassVector. Update 
 /// AvailableAnalysis appropriately if ProcessAnalysis is true.
-void PMDataManager::addPassToManager (Pass *P, 
-  bool ProcessAnalysis) {
+void PMDataManager::addPassToManager(Pass *P, 
+ bool ProcessAnalysis) {
 
   if (ProcessAnalysis) {
 // Take a note of analysis required and made available by this pass



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-07 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.44 - 1.45
---
Log message:

Add ImmutablePass into the list of info  managed by top level pass
manager.


---
Diffs of the changes:  (+13 -0)

 PassManager.cpp |   13 +
 1 files changed, 13 insertions(+)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.44 
llvm/lib/VMCore/PassManager.cpp:1.45
--- llvm/lib/VMCore/PassManager.cpp:1.44Thu Dec  7 14:03:49 2006
+++ llvm/lib/VMCore/PassManager.cpp Thu Dec  7 14:51:18 2006
@@ -122,6 +122,16 @@
 PassManagers.clear();
   }
 
+  /// Add immutable pass and initialize it.
+  inline void addImmutablePass(ImmutablePass *P) {
+P-initializePass();
+ImmutablePasses.push_back(P);
+  }
+
+  inline std::vectorImmutablePass * getImmutablePasses() {
+return ImmutablePasses;
+  }
+
 private:
   
   /// Collection of pass managers
@@ -130,6 +140,9 @@
   // Map to keep track of last user of the analysis pass.
   // LastUser-second is the last user of Lastuser-first.
   std::mapPass *, Pass * LastUser;
+
+  /// Immutable passes are managed by top level manager.
+  std::vectorImmutablePass * ImmutablePasses;
 };
   
 /// Set pass P as the last user of the given analysis passes.



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-07 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.45 - 1.46
---
Log message:

While initializing AvailableAnalysis info, make ImmutablePasses available
immediately.


---
Diffs of the changes:  (+6 -0)

 PassManager.cpp |6 ++
 1 files changed, 6 insertions(+)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.45 
llvm/lib/VMCore/PassManager.cpp:1.46
--- llvm/lib/VMCore/PassManager.cpp:1.45Thu Dec  7 14:51:18 2006
+++ llvm/lib/VMCore/PassManager.cpp Thu Dec  7 15:02:08 2006
@@ -218,6 +218,12 @@
   void initializeAnalysisInfo() { 
 AvailableAnalysis.clear();
 LastUser.clear();
+
+// Include immutable passes into AvailableAnalysis vector.
+std::vectorImmutablePass * ImmutablePasses =  TPM-getImmutablePasses();
+for (std::vectorImmutablePass *::iterator I = ImmutablePasses.begin(),
+   E = ImmutablePasses.end(); I != E; ++I) 
+  recordAvailableAnalysis(*I);
   }
 
   // All Required analyses should be available to the pass as it runs!  Here



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-07 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.46 - 1.47
---
Log message:

Reimplement schedulePass interface. Move it into PMTopLevelManager.


---
Diffs of the changes:  (+28 -51)

 PassManager.cpp |   79 +++-
 1 files changed, 28 insertions(+), 51 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.46 
llvm/lib/VMCore/PassManager.cpp:1.47
--- llvm/lib/VMCore/PassManager.cpp:1.46Thu Dec  7 15:02:08 2006
+++ llvm/lib/VMCore/PassManager.cpp Thu Dec  7 15:10:57 2006
@@ -173,6 +173,33 @@
 LastUses.push_back(LUI-first);
 }
 
+/// Schedule pass P for execution. Make sure that passes required by
+/// P are run before P is run. Update analysis info maintained by
+/// the manager. Remove dead passes. This is a recursive function.
+void PMTopLevelManager::schedulePass(Pass *P, Pass *PM) {
+
+  // TODO : Allocate function manager for this pass, other wise required set
+  // may be inserted into previous function manager
+
+  AnalysisUsage AnUsage;
+  P-getAnalysisUsage(AnUsage);
+  const std::vectorAnalysisID RequiredSet = AnUsage.getRequiredSet();
+  for (std::vectorAnalysisID::const_iterator I = RequiredSet.begin(),
+ E = RequiredSet.end(); I != E; ++I) {
+
+Pass *AnalysisPass = NULL; // FIXME PM-getAnalysisPass(*I, true);
+if (!AnalysisPass) {
+  // Schedule this analysis run first.
+  AnalysisPass = (*I)-createPass();
+  schedulePass(AnalysisPass, PM);
+}
+  }
+
+  // Now all required passes are available.
+  addTopLevelPass(P);
+}
+
+
 
//===--===//
 // PMDataManager
 
@@ -399,18 +426,9 @@
 
 private:
 
-  /// Add a pass into a passmanager queue. This is used by schedulePasses
+  /// Add a pass into a passmanager queue.
   bool addPass(Pass *p);
 
-  /// Schedule pass P for execution. Make sure that passes required by
-  /// P are run before P is run. Update analysis info maintained by
-  /// the manager. Remove dead passes. This is a recursive function.
-  void schedulePass(Pass *P);
-
-  /// Schedule all passes collected in pass queue using add(). Add all the
-  /// schedule passes into various manager's queue using addPass().
-  void schedulePasses();
-
   // Collection of pass managers
   std::vectorModulePassManager_New * PassManagers;
 
@@ -842,46 +860,6 @@
   return P;
 }
 
-/// Schedule pass P for execution. Make sure that passes required by
-/// P are run before P is run. Update analysis info maintained by
-/// the manager. Remove dead passes. This is a recursive function.
-void PassManagerImpl_New::schedulePass(Pass *P) {
-
-  AnalysisUsage AnUsage;
-  P-getAnalysisUsage(AnUsage);
-  const std::vectorAnalysisID RequiredSet = AnUsage.getRequiredSet();
-  for (std::vectorAnalysisID::const_iterator I = RequiredSet.begin(),
- E = RequiredSet.end(); I != E; ++I) {
-
-Pass *AnalysisPass = getAnalysisPassFromManager(*I);
-if (!AnalysisPass) {
-  // Schedule this analysis run first.
-  AnalysisPass = (*I)-createPass();
-  schedulePass(AnalysisPass);
-}
-setLastUser (AnalysisPass, P);
-
-// Prolong live range of analyses that are needed after an analysis pass
-// is destroyed, for querying by subsequent passes
-const std::vectorAnalysisID IDs = AnUsage.getRequiredTransitiveSet();
-for (std::vectorAnalysisID::const_iterator I = IDs.begin(),
-   E = IDs.end(); I != E; ++I) {
-  Pass *AP = getAnalysisPassFromManager(*I);
-  assert (AP  Analysis pass is not available);
-  setLastUser(AP, P);
-}
-  }
-  addPass(P);
-}
-
-/// Schedule all passes from the queue by adding them in their
-/// respective manager's queue. 
-void PassManagerImpl_New::schedulePasses() {
-  for (std::vectorPass *::iterator I = passVectorBegin(),
- E = passVectorEnd(); I != E; ++I)
-schedulePass (*I);
-}
-
 /// Add pass P to the queue of passes to run.
 void PassManagerImpl_New::add(Pass *P) {
   // Do not process Analysis now. Analysis is process while scheduling
@@ -906,7 +884,6 @@
 /// whether any of the passes modifies the module, and if so, return true.
 bool PassManagerImpl_New::run(Module M) {
 
-  schedulePasses();
   bool Changed = false;
   for (std::vectorModulePassManager_New *::iterator itr = 
PassManagers.begin(),
  e = PassManagers.end(); itr != e; ++itr) {



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/VMCore/PassManager.cpp

2006-12-07 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

PassManager.cpp updated: 1.48 - 1.49
---
Log message:

Top level manages schedule the pass immediately at the time of insertion.


---
Diffs of the changes:  (+8 -10)

 PassManager.cpp |   18 --
 1 files changed, 8 insertions(+), 10 deletions(-)


Index: llvm/lib/VMCore/PassManager.cpp
diff -u llvm/lib/VMCore/PassManager.cpp:1.48 
llvm/lib/VMCore/PassManager.cpp:1.49
--- llvm/lib/VMCore/PassManager.cpp:1.48Thu Dec  7 15:27:23 2006
+++ llvm/lib/VMCore/PassManager.cpp Thu Dec  7 15:32:57 2006
@@ -346,7 +346,9 @@
   /// PassManager_X is destroyed, the pass will be destroyed as well, so
   /// there is no need to delete the pass. (TODO delete passes.)
   /// This implies that all passes MUST be allocated with 'new'.
-  void add(Pass *P) { /* TODO*/  }
+  void add(Pass *P) { 
+schedulePass(P, this);
+  }
 
   /// Add pass into the pass manager queue.
   bool addPass(Pass *P);
@@ -407,7 +409,8 @@
 };
 
 /// PassManager_New manages ModulePassManagers
-class PassManagerImpl_New : public PMDataManager,
+class PassManagerImpl_New : public Pass,
+public PMDataManager,
 public PMTopLevelManager {
 
 public:
@@ -416,7 +419,9 @@
   /// the Pass to the PassManager.  When the PassManager is destroyed, the pass
   /// will be destroyed as well, so there is no need to delete the pass.  This
   /// implies that all passes MUST be allocated with 'new'.
-  void add(Pass *P);
+  void add(Pass *P) {
+schedulePass(P, this);
+  }
  
   /// run - Execute all of the passes scheduled for execution.  Keep track of
   /// whether any of the passes modifies the module, and if so, return true.
@@ -870,13 +875,6 @@
   return P;
 }
 
-/// Add pass P to the queue of passes to run.
-void PassManagerImpl_New::add(Pass *P) {
-  // Do not process Analysis now. Analysis is process while scheduling
-  // the pass vector.
-  addPassToManager(P, false);
-}
-
 // PassManager_New implementation
 /// Add P into active pass manager or use new module pass manager to
 /// manage it.



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


  1   2   >