diff --git a/lib/Analysis/LiveVar/BBLiveVar.cpp b/lib/Analysis/LiveVar/BBLiveVar.cpp
index 35548f6..e4a8a51 100644
--- a/lib/Analysis/LiveVar/BBLiveVar.cpp
+++ b/lib/Analysis/LiveVar/BBLiveVar.cpp
@@ -45,7 +45,8 @@
     }
 
     // iterate over  MI operands to find defs
-    for (MachineInstr::val_const_op_iterator OpI(MI); !OpI.done(); ++OpI)
+    for (MachineInstr::const_val_op_iterator OpI = MI->begin(), OpE = MI->end();
+         OpI != OpE; ++OpI)
       if (OpI.isDef())      // add to Defs only if this operand is a def
 	addDef(*OpI);
 
@@ -57,10 +58,11 @@
     bool IsPhi = MI->getOpCode() == PHI;
  
     // iterate over MI operands to find uses
-    for (MachineInstr::val_const_op_iterator OpI(MI); !OpI.done(); ++OpI) {
+    for (MachineInstr::const_val_op_iterator OpI = MI->begin(), OpE = MI->end();
+         OpI != OpE; ++OpI) {
       const Value *Op = *OpI;
 
-      if (Op->getType()->isLabelType())    
+      if (isa<BasicBlock>(Op))
 	continue;             // don't process labels
 
       if (!OpI.isDef()) {   // add to Defs only if this operand is a use
diff --git a/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp b/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp
index 5205a19..d06485d 100644
--- a/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp
+++ b/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp
@@ -187,7 +187,8 @@
 // machine instruction operand.
 //
 static void applyTranferFuncForMInst(ValueSet &LVS, const MachineInstr *MInst) {
-  for (MachineInstr::val_const_op_iterator OpI(MInst); !OpI.done(); ++OpI) {
+  for (MachineInstr::const_val_op_iterator OpI = MInst->begin(),
+         OpE = MInst->end(); OpI != OpE; ++OpI) {
     if (OpI.isDef())           // kill only if this operand is a def
       LVS.insert(*OpI);        // this definition kills any uses
   }
@@ -198,7 +199,8 @@
       LVS.erase(MInst->getImplicitRef(i));
   }
 
-  for (MachineInstr::val_const_op_iterator OpI(MInst); !OpI.done(); ++OpI) {
+  for (MachineInstr::const_val_op_iterator OpI = MInst->begin(),
+         OpE = MInst->end(); OpI != OpE; ++OpI) {
     if (isa<BasicBlock>(*OpI)) continue; // don't process labels
     
     if (!OpI.isDef())      // add only if this operand is a use
@@ -206,7 +208,7 @@
   }
 
   // do for implicit operands as well
-  for (unsigned i=0; i < MInst->getNumImplicitRefs(); ++i) {
+  for (unsigned i = 0; i < MInst->getNumImplicitRefs(); ++i) {
     if (!MInst->implicitRefIsDefined(i))
       LVS.insert(MInst->getImplicitRef(i));
   }
