diff --git a/lib/Analysis/LoopInfo.cpp b/lib/Analysis/LoopInfo.cpp
index b8315ac..cf6e20a 100644
--- a/lib/Analysis/LoopInfo.cpp
+++ b/lib/Analysis/LoopInfo.cpp
@@ -90,7 +90,7 @@
 
 bool LoopInfo::runOnFunction(Function &) {
   releaseMemory();
-  Calculate(getAnalysis<DominatorSet>());    // Update
+  Calculate(getAnalysis<ETForest>());    // Update
   return false;
 }
 
@@ -104,18 +104,18 @@
 }
 
 
-void LoopInfo::Calculate(const DominatorSet &DS) {
-  BasicBlock *RootNode = DS.getRoot();
+void LoopInfo::Calculate(const ETForest &EF) {
+  BasicBlock *RootNode = EF.getRoot();
 
   for (df_iterator<BasicBlock*> NI = df_begin(RootNode),
          NE = df_end(RootNode); NI != NE; ++NI)
-    if (Loop *L = ConsiderForLoop(*NI, DS))
+    if (Loop *L = ConsiderForLoop(*NI, EF))
       TopLevelLoops.push_back(L);
 }
 
 void LoopInfo::getAnalysisUsage(AnalysisUsage &AU) const {
   AU.setPreservesAll();
-  AU.addRequired<DominatorSet>();
+  AU.addRequired<ETForest>();
 }
 
 void LoopInfo::print(std::ostream &OS, const Module* ) const {
@@ -135,7 +135,7 @@
   return isNotAlreadyContainedIn(SubLoop->getParentLoop(), ParentLoop);
 }
 
-Loop *LoopInfo::ConsiderForLoop(BasicBlock *BB, const DominatorSet &DS) {
+Loop *LoopInfo::ConsiderForLoop(BasicBlock *BB, const ETForest &EF) {
   if (BBMap.find(BB) != BBMap.end()) return 0;   // Haven't processed this node?
 
   std::vector<BasicBlock *> TodoStack;
@@ -143,7 +143,7 @@
   // Scan the predecessors of BB, checking to see if BB dominates any of
   // them.  This identifies backedges which target this node...
   for (pred_iterator I = pred_begin(BB), E = pred_end(BB); I != E; ++I)
-    if (DS.dominates(BB, *I))   // If BB dominates it's predecessor...
+    if (EF.dominates(BB, *I))   // If BB dominates it's predecessor...
       TodoStack.push_back(*I);
 
   if (TodoStack.empty()) return 0;  // No backedges to this block...
@@ -159,7 +159,7 @@
     TodoStack.pop_back();
 
     if (!L->contains(X) &&         // As of yet unprocessed??
-        DS.dominates(EntryBlock, X)) {   // X is reachable from entry block?
+        EF.dominates(EntryBlock, X)) {   // X is reachable from entry block?
       // Check to see if this block already belongs to a loop.  If this occurs
       // then we have a case where a loop that is supposed to be a child of the
       // current loop was processed before the current loop.  When this occurs,
@@ -191,7 +191,7 @@
   // If there are any loops nested within this loop, create them now!
   for (std::vector<BasicBlock*>::iterator I = L->Blocks.begin(),
          E = L->Blocks.end(); I != E; ++I)
-    if (Loop *NewLoop = ConsiderForLoop(*I, DS)) {
+    if (Loop *NewLoop = ConsiderForLoop(*I, EF)) {
       L->SubLoops.push_back(NewLoop);
       NewLoop->ParentLoop = L;
     }
