--added support for implicit operands


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@832 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/LiveVar/LiveVarSet.cpp b/lib/Analysis/LiveVar/LiveVarSet.cpp
index 07dc128..1ca65f0 100644
--- a/lib/Analysis/LiveVar/LiveVarSet.cpp
+++ b/lib/Analysis/LiveVar/LiveVarSet.cpp
@@ -14,28 +14,35 @@
 
   for( MachineInstr::val_op_const_iterator OpI(MInst); !OpI.done() ; OpI++) {
 
-    if( OpI.isDef() ) {     // kill only if this operand is a def
+    if( OpI.isDef() )      // kill only if this operand is a def
          remove(*OpI);        // this definition kills any uses
-    }
-
   }
 
+  // do for implicit operands as well
+  for( unsigned i=0; i < MInst->getNumImplicitRefs(); ++i) {
+    if( MInst->implicitRefIsDefined(i) )
+      remove( MInst->getImplicitRef(i) );
+  }
+
+
   for( MachineInstr::val_op_const_iterator OpI(MInst); !OpI.done() ; OpI++) {
 
     if ( ((*OpI)->getType())->isLabelType()) continue; // don't process labels
-
-    if( ! OpI.isDef() ) {     // add only if this operand is a use
+    
+    if( ! OpI.isDef() )      // add only if this operand is a use
        add( *OpI );            // An operand is a use - so add to use set
-    }
   }
+
+  // do for implicit operands as well
+  for( unsigned i=0; i < MInst->getNumImplicitRefs(); ++i) {
+    if(  ! MInst->implicitRefIsDefined(i) )
+      add( MInst->getImplicitRef(i) );
+  }
+
 }
 
   
 
-
-
-
-
 #if 0
 void LiveVarSet::applyTranferFuncForInst(const Instruction *const Inst) 
 {