OSDN Git Service

Add LPPassManager interface that LoopPass can use to skip
authorDevang Patel <dpatel@apple.com>
Fri, 23 Feb 2007 00:10:16 +0000 (00:10 +0000)
committerDevang Patel <dpatel@apple.com>
Fri, 23 Feb 2007 00:10:16 +0000 (00:10 +0000)
rest of the passes in the queue for a loop.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34508 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/LoopPass.h
lib/Analysis/LoopPass.cpp

index f0b5220..046da6f 100644 (file)
@@ -81,8 +81,13 @@ public:
     return PMT_LoopPassManager; 
   }
 
- private:
+public:
+  // Delete loop from the loop queue. This is used by Loop pass to inform
+  // Loop Pass Manager that it should skip rest of the passes for this loop.
+  void deleteLoopFromQueue(Loop *L);
+private:
   LoopQueue *LQ;
+  bool skipThisLoop;
 
 };
 
index 95a18e5..22d542b 100644 (file)
@@ -57,6 +57,13 @@ LPPassManager::~LPPassManager() {
   delete LQ;
 }
 
+/// Delete loop from the loop queue. This is used by Loop pass to inform
+/// Loop Pass Manager that it should skip rest of the passes for this loop.
+void LPPassManager::deleteLoopFromQueue(Loop *L) {
+  // Do not pop loop from LQ here. It will be done by runOnFunction while loop.
+  skipThisLoop = true;
+}
+
 // Recurse through all subloops and all loops  into LQ.
 static void addLoopIntoQueue(Loop *L, LoopQueue *LQ) {
   for (Loop::iterator I = L->begin(), E = L->end(); I != E; ++I)
@@ -81,6 +88,8 @@ bool LPPassManager::runOnFunction(Function &F) {
   while (!LQ->empty()) {
       
     Loop *L  = LQ->top();
+    skipThisLoop = false;
+
     // Run all passes on current SCC
     for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) {  
         
@@ -107,6 +116,10 @@ bool LPPassManager::runOnFunction(Function &F) {
       removeNotPreservedAnalysis(P);
       recordAvailableAnalysis(P);
       removeDeadPasses(P, Msg2);
+
+      if (skipThisLoop)
+        // Do not run other passes on this loop.
+        break;
     }
     
     // Pop the loop from queue after running all passes.