Renamed MachienOperand::opIsDef to MachineOperand::opIsDefOnly()
and related functions and flags.  Fixed several bugs where only
"isDef" was being checked, not "isDefAndUse".


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6342 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/llvm/CodeGen/MachineInstr.h b/include/llvm/CodeGen/MachineInstr.h
index 00cab22..f4f65da 100644
--- a/include/llvm/CodeGen/MachineInstr.h
+++ b/include/llvm/CodeGen/MachineInstr.h
@@ -88,13 +88,13 @@
 private:
   // Bit fields of the flags variable used for different operand properties
   enum {
-    DEFFLAG    = 0x01,        // this is a def of the operand
-    DEFUSEFLAG = 0x02,        // this is both a def and a use
-    HIFLAG32   = 0x04,        // operand is %hi32(value_or_immedVal)
-    LOFLAG32   = 0x08,        // operand is %lo32(value_or_immedVal)
-    HIFLAG64   = 0x10,        // operand is %hi64(value_or_immedVal)
-    LOFLAG64   = 0x20,        // operand is %lo64(value_or_immedVal)
-    PCRELATIVE = 0x40,        // Operand is relative to PC, not a global address
+    DEFONLYFLAG = 0x01,       // this is a def but not a use of the operand
+    DEFUSEFLAG  = 0x02,       // this is both a def and a use
+    HIFLAG32    = 0x04,       // operand is %hi32(value_or_immedVal)
+    LOFLAG32    = 0x08,       // operand is %lo32(value_or_immedVal)
+    HIFLAG64    = 0x10,       // operand is %hi64(value_or_immedVal)
+    LOFLAG64    = 0x20,       // operand is %lo64(value_or_immedVal)
+    PCRELATIVE  = 0x40,       // Operand is relative to PC, not a global address
   
     USEDEFMASK = 0x03,
   };
@@ -137,7 +137,7 @@
       regNum(Reg) {
     switch (UseTy) {
     case MOTy::Use:       flags = 0; break;
-    case MOTy::Def:       flags = DEFFLAG; break;
+    case MOTy::Def:       flags = DEFONLYFLAG; break;
     case MOTy::UseAndDef: flags = DEFUSEFLAG; break;
     default: assert(0 && "Invalid value for UseTy!");
     }
@@ -148,7 +148,7 @@
     : value(V), opType(OpTy), regNum(-1) {
     switch (UseTy) {
     case MOTy::Use:       flags = 0; break;
-    case MOTy::Def:       flags = DEFFLAG; break;
+    case MOTy::Def:       flags = DEFONLYFLAG; break;
     case MOTy::UseAndDef: flags = DEFUSEFLAG; break;
     default: assert(0 && "Invalid value for UseTy!");
     }
@@ -259,7 +259,7 @@
   }
 
   bool          opIsUse         () const { return (flags & USEDEFMASK) == 0; }
-  bool		opIsDef		() const { return flags & DEFFLAG; }
+  bool		opIsDefOnly     () const { return flags & DEFONLYFLAG; }
   bool		opIsDefAndUse	() const { return flags & DEFUSEFLAG; }
   bool          opHiBits32      () const { return flags & HIFLAG32; }
   bool          opLoBits32      () const { return flags & LOFLAG32; }
@@ -332,15 +332,6 @@
   std::vector<MachineOperand> operands; // the operands
   unsigned numImplicitRefs;             // number of implicit operands
 
-  MachineOperand& getImplicitOp(unsigned i) {
-    assert(i < numImplicitRefs && "implicit ref# out of range!");
-    return operands[i + operands.size() - numImplicitRefs];
-  }
-  const MachineOperand& getImplicitOp(unsigned i) const {
-    assert(i < numImplicitRefs && "implicit ref# out of range!");
-    return operands[i + operands.size() - numImplicitRefs];
-  }
-
   // regsUsed - all machine registers used for this instruction, including regs
   // used to save values across the instruction.  This is a bitset of registers.
   std::vector<bool> regsUsed;
@@ -371,7 +362,7 @@
   const MachineOpCode getOpCode() const { return opCode; }
 
   //
-  // Information about explicit operands of the instruction
+  // Access to explicit operands of the instruction
   // 
   unsigned getNumOperands() const { return operands.size() - numImplicitRefs; }
   
@@ -384,38 +375,27 @@
     return operands[i];
   }
 
-  // FIXME: ELIMINATE
-  MachineOperand::MachineOperandType getOperandType(unsigned i) const {
-    return getOperand(i).getType();
-  }
-
-  // FIXME: ELIMINATE: Misleading name: Definition not defined.
-  bool operandIsDefined(unsigned i) const {
-    return getOperand(i).opIsDef();
-  }
-
-  bool operandIsDefinedAndUsed(unsigned i) const {
-    return getOperand(i).opIsDefAndUse();
-  }
-
   //
-  // Information about implicit operands of the instruction
+  // Access to implicit operands of the instruction
   // 
   unsigned getNumImplicitRefs() const{ return numImplicitRefs; }
   
-  const Value* getImplicitRef(unsigned i) const {
-    return getImplicitOp(i).getVRegValue();
+  MachineOperand& getImplicitOp(unsigned i) {
+    assert(i < numImplicitRefs && "implicit ref# out of range!");
+    return operands[i + operands.size() - numImplicitRefs];
   }
+  const MachineOperand& getImplicitOp(unsigned i) const {
+    assert(i < numImplicitRefs && "implicit ref# out of range!");
+    return operands[i + operands.size() - numImplicitRefs];
+  }
+
   Value* getImplicitRef(unsigned i) {
     return getImplicitOp(i).getVRegValue();
   }
+  const Value* getImplicitRef(unsigned i) const {
+    return getImplicitOp(i).getVRegValue();
+  }
 
-  bool implicitRefIsDefined(unsigned i) const {
-    return getImplicitOp(i).opIsDef();
-  }
-  bool implicitRefIsDefinedAndUsed(unsigned i) const {
-    return getImplicitOp(i).opIsDefAndUse();
-  }
   inline void addImplicitRef    (Value* V,
                                  bool isDef=false,bool isDefAndUse=false);
   inline void setImplicitRef    (unsigned i, Value* V,
@@ -647,8 +627,8 @@
     
     void skipToNextVal() {
       while (i < MI->getNumOperands() &&
-             !( (MI->getOperandType(i) == MachineOperand::MO_VirtualRegister ||
-                 MI->getOperandType(i) == MachineOperand::MO_CCRegister)
+             !( (MI->getOperand(i).getType() == MachineOperand::MO_VirtualRegister ||
+                 MI->getOperand(i).getType() == MachineOperand::MO_CCRegister)
                 && MI->getOperand(i).getVRegValue() != 0))
         ++i;
     }
@@ -669,7 +649,8 @@
 
     inline VTy operator->() const { return operator*(); }
 
-    inline bool isDef()       const { return MI->getOperand(i).opIsDef(); } 
+    inline bool isUseOnly()   const { return MI->getOperand(i).opIsUse(); } 
+    inline bool isDefOnly()   const { return MI->getOperand(i).opIsDefOnly(); } 
     inline bool isDefAndUse() const { return MI->getOperand(i).opIsDefAndUse();}
 
     inline _Self& operator++() { i++; skipToNextVal(); return *this; }
diff --git a/lib/Analysis/LiveVar/BBLiveVar.cpp b/lib/Analysis/LiveVar/BBLiveVar.cpp
index 81d3b52..3968430 100644
--- a/lib/Analysis/LiveVar/BBLiveVar.cpp
+++ b/lib/Analysis/LiveVar/BBLiveVar.cpp
@@ -64,12 +64,12 @@
     // iterate over  MI operands to find defs
     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
+      if (OpI.isDefOnly() || OpI.isDefAndUse()) // add to Defs if this operand is a def
 	addDef(*OpI);
 
     // do for implicit operands as well
     for (unsigned i = 0; i < MI->getNumImplicitRefs(); ++i)
-      if (MI->implicitRefIsDefined(i))
+      if (MI->getImplicitOp(i).opIsDefOnly() || MI->getImplicitOp(i).opIsDefAndUse())
 	addDef(MI->getImplicitRef(i));
     
     // iterate over MI operands to find uses
@@ -80,7 +80,7 @@
       if (isa<BasicBlock>(Op))
 	continue;             // don't process labels
 
-      if (!OpI.isDef() || OpI.isDefAndUse()) {
+      if (OpI.isUseOnly() || OpI.isDefAndUse()) {
                                 // add to Uses only if this operand is a use
         //
         // *** WARNING: The following code for handling dummy PHI machine
@@ -116,7 +116,7 @@
       if (Op->getType() == Type::LabelTy)             // don't process labels
 	continue;
 
-      if (!MI->implicitRefIsDefined(i) || MI->implicitRefIsDefinedAndUsed(i) )
+      if (MI->getImplicitOp(i).opIsUse() || MI->getImplicitOp(i).opIsDefAndUse())
 	addUse(Op);
     }
   } // for all machine instructions
diff --git a/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp b/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp
index 371cecd..63c2019 100644
--- a/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp
+++ b/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp
@@ -213,13 +213,14 @@
 static void applyTranferFuncForMInst(ValueSet &LVS, const MachineInstr *MInst) {
   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.erase(*OpI);         // this definition kills any uses
+    if (OpI.isDefOnly() || OpI.isDefAndUse()) // kill if this operand is a def
+      LVS.erase(*OpI);                        // this definition kills any uses
   }
 
   // do for implicit operands as well
   for (unsigned i=0; i < MInst->getNumImplicitRefs(); ++i) {
-    if (MInst->implicitRefIsDefined(i))
+    if (MInst->getImplicitOp(i).opIsDefOnly() ||
+        MInst->getImplicitOp(i).opIsDefAndUse())
       LVS.erase(MInst->getImplicitRef(i));
   }
 
@@ -227,14 +228,14 @@
          OpE = MInst->end(); OpI != OpE; ++OpI) {
     if (!isa<BasicBlock>(*OpI))      // don't process labels
       // add only if this operand is a use
-      if (!OpI.isDef() || OpI.isDefAndUse() )
+      if (!OpI.isDefOnly() || OpI.isDefAndUse() )
         LVS.insert(*OpI);            // An operand is a use - so add to use set
   }
 
   // do for implicit operands as well
   for (unsigned i = 0, e = MInst->getNumImplicitRefs(); i != e; ++i)
-    if (!MInst->implicitRefIsDefined(i) ||
-        MInst->implicitRefIsDefinedAndUsed(i))
+    if (MInst->getImplicitOp(i).opIsUse() ||
+        MInst->getImplicitOp(i).opIsDefAndUse())
       LVS.insert(MInst->getImplicitRef(i));
 }
 
diff --git a/lib/Target/SparcV9/LiveVar/BBLiveVar.cpp b/lib/Target/SparcV9/LiveVar/BBLiveVar.cpp
index 81d3b52..3968430 100644
--- a/lib/Target/SparcV9/LiveVar/BBLiveVar.cpp
+++ b/lib/Target/SparcV9/LiveVar/BBLiveVar.cpp
@@ -64,12 +64,12 @@
     // iterate over  MI operands to find defs
     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
+      if (OpI.isDefOnly() || OpI.isDefAndUse()) // add to Defs if this operand is a def
 	addDef(*OpI);
 
     // do for implicit operands as well
     for (unsigned i = 0; i < MI->getNumImplicitRefs(); ++i)
-      if (MI->implicitRefIsDefined(i))
+      if (MI->getImplicitOp(i).opIsDefOnly() || MI->getImplicitOp(i).opIsDefAndUse())
 	addDef(MI->getImplicitRef(i));
     
     // iterate over MI operands to find uses
@@ -80,7 +80,7 @@
       if (isa<BasicBlock>(Op))
 	continue;             // don't process labels
 
-      if (!OpI.isDef() || OpI.isDefAndUse()) {
+      if (OpI.isUseOnly() || OpI.isDefAndUse()) {
                                 // add to Uses only if this operand is a use
         //
         // *** WARNING: The following code for handling dummy PHI machine
@@ -116,7 +116,7 @@
       if (Op->getType() == Type::LabelTy)             // don't process labels
 	continue;
 
-      if (!MI->implicitRefIsDefined(i) || MI->implicitRefIsDefinedAndUsed(i) )
+      if (MI->getImplicitOp(i).opIsUse() || MI->getImplicitOp(i).opIsDefAndUse())
 	addUse(Op);
     }
   } // for all machine instructions
diff --git a/lib/Target/SparcV9/LiveVar/FunctionLiveVarInfo.cpp b/lib/Target/SparcV9/LiveVar/FunctionLiveVarInfo.cpp
index 371cecd..63c2019 100644
--- a/lib/Target/SparcV9/LiveVar/FunctionLiveVarInfo.cpp
+++ b/lib/Target/SparcV9/LiveVar/FunctionLiveVarInfo.cpp
@@ -213,13 +213,14 @@
 static void applyTranferFuncForMInst(ValueSet &LVS, const MachineInstr *MInst) {
   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.erase(*OpI);         // this definition kills any uses
+    if (OpI.isDefOnly() || OpI.isDefAndUse()) // kill if this operand is a def
+      LVS.erase(*OpI);                        // this definition kills any uses
   }
 
   // do for implicit operands as well
   for (unsigned i=0; i < MInst->getNumImplicitRefs(); ++i) {
-    if (MInst->implicitRefIsDefined(i))
+    if (MInst->getImplicitOp(i).opIsDefOnly() ||
+        MInst->getImplicitOp(i).opIsDefAndUse())
       LVS.erase(MInst->getImplicitRef(i));
   }
 
@@ -227,14 +228,14 @@
          OpE = MInst->end(); OpI != OpE; ++OpI) {
     if (!isa<BasicBlock>(*OpI))      // don't process labels
       // add only if this operand is a use
-      if (!OpI.isDef() || OpI.isDefAndUse() )
+      if (!OpI.isDefOnly() || OpI.isDefAndUse() )
         LVS.insert(*OpI);            // An operand is a use - so add to use set
   }
 
   // do for implicit operands as well
   for (unsigned i = 0, e = MInst->getNumImplicitRefs(); i != e; ++i)
-    if (!MInst->implicitRefIsDefined(i) ||
-        MInst->implicitRefIsDefinedAndUsed(i))
+    if (MInst->getImplicitOp(i).opIsUse() ||
+        MInst->getImplicitOp(i).opIsDefAndUse())
       LVS.insert(MInst->getImplicitRef(i));
 }