Changes in directory llvm/lib/Analysis:
LoopPass.cpp updated: 1.9 -> 1.10 --- Log message: Use std::deque to manage loop queue inside LPPassManager. --- Diffs of the changes: (+6 -40) LoopPass.cpp | 46 ++++++---------------------------------------- 1 files changed, 6 insertions(+), 40 deletions(-) Index: llvm/lib/Analysis/LoopPass.cpp diff -u llvm/lib/Analysis/LoopPass.cpp:1.9 llvm/lib/Analysis/LoopPass.cpp:1.10 --- llvm/lib/Analysis/LoopPass.cpp:1.9 Mon Mar 5 14:01:30 2007 +++ llvm/lib/Analysis/LoopPass.cpp Mon Mar 5 20:30:46 2007 @@ -14,38 +14,9 @@ //===----------------------------------------------------------------------===// #include "llvm/Analysis/LoopPass.h" -#include <queue> using namespace llvm; //===----------------------------------------------------------------------===// -// LoopQueue - -namespace llvm { - -// Compare Two loops based on their depth in loop nest. -class LoopCompare { -public: - bool operator()( Loop *L1, Loop *L2) const { - // Loops with highest depth has the highest priority. - return L1->getLoopDepth() < L2->getLoopDepth(); - } -}; - -// Loop queue used by Loop Pass Manager. This is a wrapper class -// that hides implemenation detail (use of priority_queue) inside .cpp file. -class LoopQueue { -public: - inline void push(Loop *L) { LPQ.push(L); } - inline void pop() { LPQ.pop(); } - inline Loop *top() { return LPQ.top(); } - inline bool empty() { return LPQ.empty(); } -private: - std::priority_queue<Loop *, std::vector<Loop *>, LoopCompare> LPQ; -}; - -} // End of LLVM namespace - -//===----------------------------------------------------------------------===// // LPPassManager // /// LPPassManager manages FPPassManagers and CalLGraphSCCPasses. @@ -53,11 +24,6 @@ LPPassManager::LPPassManager(int Depth) : PMDataManager(Depth) { skipThisLoop = false; redoThisLoop = false; - LQ = new LoopQueue(); -} - -LPPassManager::~LPPassManager() { - delete LQ; } /// Delete loop from the loop queue. This is used by Loop pass to inform @@ -75,10 +41,10 @@ } // Recurse through all subloops and all loops into LQ. -static void addLoopIntoQueue(Loop *L, LoopQueue *LQ) { +static void addLoopIntoQueue(Loop *L, std::deque<Loop *> &LQ) { for (Loop::iterator I = L->begin(), E = L->end(); I != E; ++I) addLoopIntoQueue(*I, LQ); - LQ->push(L); + LQ.push_back(L); } /// run - Execute all of the passes scheduled for execution. Keep track of @@ -92,9 +58,9 @@ addLoopIntoQueue(*I, LQ); // Walk Loops - while (!LQ->empty()) { + while (!LQ.empty()) { - Loop *L = LQ->top(); + Loop *L = LQ.back(); skipThisLoop = false; redoThisLoop = false; @@ -130,10 +96,10 @@ } // Pop the loop from queue after running all passes. - LQ->pop(); + LQ.pop_back(); if (redoThisLoop) - LQ->push(L); + LQ.push_back(L); } return Changed; _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits