rename hasVariableOperands() -> isVariadic(). Add some comments.
authorChris Lattner <sabre@nondot.org>
Mon, 7 Jan 2008 05:19:29 +0000 (05:19 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 7 Jan 2008 05:19:29 +0000 (05:19 +0000)
Evan, please review the comments I added to getNumDefs to make sure
that they are accurate, thx.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45687 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Target/TargetInstrInfo.h
lib/CodeGen/MachineInstr.cpp
lib/CodeGen/SelectionDAG/ScheduleDAG.cpp
lib/Target/X86/X86CodeEmitter.cpp
utils/TableGen/CodeGenInstruction.cpp
utils/TableGen/CodeGenInstruction.h
utils/TableGen/DAGISelEmitter.cpp
utils/TableGen/InstrInfoEmitter.cpp

index f8dde43407b06fe5dc816a4f6a44efd93413ec6a..26c6dcb2f411023a6b90ef1491e2e8d65b959439 100644 (file)
@@ -125,9 +125,7 @@ const unsigned M_TERMINATOR_FLAG       = 1 << 11;
 // block.
 const unsigned M_USES_CUSTOM_DAG_SCHED_INSERTION = 1 << 12;
 
-// M_VARIABLE_OPS - Set if this instruction can have a variable number of extra
-// operands in addition to the minimum number operands specified.
-const unsigned M_VARIABLE_OPS          = 1 << 13;
+const unsigned M_VARIADIC          = 1 << 13;
 
 // M_PREDICABLE - Set if this instruction has a predicate operand that
 // controls execution. It may be set to 'always'.
@@ -141,8 +139,6 @@ const unsigned M_REMATERIALIZIBLE      = 1 << 15;
 // (e.g. instructions with unique labels attached).
 const unsigned M_NOT_DUPLICABLE        = 1 << 16;
 
-// M_HAS_OPTIONAL_DEF - Set if this instruction has an optional definition, e.g.
-// ARM instructions which can set condition code if 's' bit is set.
 const unsigned M_HAS_OPTIONAL_DEF      = 1 << 17;
 
 // M_NEVER_HAS_SIDE_EFFECTS - Set if this instruction has no side effects that
@@ -182,7 +178,7 @@ public:
   /// it is set. Returns -1 if it is not set.
   int getOperandConstraint(unsigned OpNum,
                            TOI::OperandConstraint Constraint) const {
-    assert((OpNum < NumOperands || hasVariableOperands()) &&
+    assert((OpNum < NumOperands || isVariadic()) &&
            "Invalid operand # of TargetInstrInfo");
     if (OpNum < NumOperands &&
         (OpInfo[OpNum].Constraints & (1 << Constraint))) {
@@ -202,18 +198,32 @@ public:
     return Name;
   }
   
+  /// getNumOperands - Return the number of declared MachineOperands for this
+  /// MachineInstruction.  Note that variadic (isVariadic() returns true)
+  /// instructions may have additional operands at the end of the list, and note
+  /// that the machine instruction may include implicit register def/uses as
+  /// well.
   unsigned getNumOperands() const {
     return NumOperands;
   }
   
+  /// getNumDefs - Return the number of MachineOperands that are register
+  /// definitions.  Register definitions always occur at the start of the 
+  /// machine operand list.  This is the number of "outs" in the .td file.
   unsigned getNumDefs() const {
     return NumDefs;
   }
   
-  bool hasVariableOperands() const {
-    return Flags & M_VARIABLE_OPS;
+  /// isVariadic - Return true if this instruction can have a variable number of
+  /// operands.  In this case, the variable operands will be after the normal
+  /// operands but before the implicit definitions and uses (if any are
+  /// present).
+  bool isVariadic() const {
+    return Flags & M_VARIADIC;
   }
   
+  /// hasOptionalDef - Set if this instruction has an optional definition, e.g.
+  /// ARM instructions which can set condition code if 's' bit is set.
   bool hasOptionalDef() const {
     return Flags & M_HAS_OPTIONAL_DEF;
   }
index 99bc22230c30348b5af845bc0286114e5f20aa50..d040bd45da038767e90fe5352802ed48790a18d0 100644 (file)
@@ -488,8 +488,7 @@ MachineInstr *MachineInstr::removeFromParent() {
 ///
 bool MachineInstr::OperandsComplete() const {
   unsigned short NumOperands = TID->getNumOperands();
-  if (TID->hasVariableOperands() == 0 &&
-      getNumOperands()-NumImplicitOps >= NumOperands)
+  if (!TID->isVariadic() && getNumOperands()-NumImplicitOps >= NumOperands)
     return true;  // Broken: we have all the operands of this instruction!
   return false;
 }
@@ -498,7 +497,7 @@ bool MachineInstr::OperandsComplete() const {
 ///
 unsigned MachineInstr::getNumExplicitOperands() const {
   unsigned NumOperands = TID->getNumOperands();
-  if (TID->hasVariableOperands() == 0)
+  if (!TID->isVariadic())
     return NumOperands;
 
   for (unsigned e = getNumOperands(); NumOperands != e; ++NumOperands) {
index 499c2c7286b764f4093c17a32c0a7e38745dc66a..df6503fd144b80bd612b60ac95054fe21437ccc8 100644 (file)
@@ -294,7 +294,7 @@ static const TargetRegisterClass *getInstrOperandRegClass(
         const TargetInstrDescriptor *II,
         unsigned Op) {
   if (Op >= II->getNumOperands()) {
-    assert((II->Flags & M_VARIABLE_OPS)&& "Invalid operand # of instruction");
+    assert(II->isVariadic() && "Invalid operand # of instruction");
     return NULL;
   }
   if (II->OpInfo[Op].isLookupPtrRegClass())
@@ -678,7 +678,7 @@ void ScheduleDAG::EmitNode(SDNode *Node, unsigned InstanceNo,
                           II.getImplicitDefs() != 0;
 #ifndef NDEBUG
     assert((II.getNumOperands() == NumMIOperands ||
-            HasPhysRegOuts || II.hasVariableOperands()) &&
+            HasPhysRegOuts || II.isVariadic()) &&
            "#operands for dag node doesn't match .td file!"); 
 #endif
 
index c4461a751a19cce47e424f0a5c11a096e0fb727b..d25ede168d8776f65beed60e020f36db9b706047 100644 (file)
@@ -799,6 +799,5 @@ void Emitter::emitInstruction(const MachineInstr &MI,
     break;
   }
 
-  assert((Desc->Flags & M_VARIABLE_OPS) != 0 ||
-         CurOp == NumOps && "Unknown encoding!");
+  assert((Desc->isVariadic() || CurOp == NumOps) && "Unknown encoding!");
 }
index ea01d1b0e29a1c6e151a61e18783c2745693806c..daab0654a410f88624be536d98299575eac3b585 100644 (file)
@@ -99,7 +99,7 @@ CodeGenInstruction::CodeGenInstruction(Record *R, const std::string &AsmStr)
   mayHaveSideEffects = R->getValueAsBit("mayHaveSideEffects");
   neverHasSideEffects = R->getValueAsBit("neverHasSideEffects");
   hasOptionalDef = false;
-  hasVariableNumberOfOperands = false;
+  isVariadic = false;
 
   if (mayHaveSideEffects && neverHasSideEffects)
     throw R->getName() +
@@ -159,7 +159,7 @@ CodeGenInstruction::CodeGenInstruction(Record *R, const std::string &AsmStr)
       else if (Rec->isSubClassOf("OptionalDefOperand"))
         hasOptionalDef = true;
     } else if (Rec->getName() == "variable_ops") {
-      hasVariableNumberOfOperands = true;
+      isVariadic = true;
       continue;
     } else if (!Rec->isSubClassOf("RegisterClass") && 
                Rec->getName() != "ptr_rc")
index 351a880165f4b254ea878e81cdbec88ee87ca793..6f7a19efffae69fc301b32eb2f579e6225655cab 100644 (file)
@@ -99,7 +99,7 @@ namespace llvm {
     bool isReMaterializable;
     bool hasDelaySlot;
     bool usesCustomDAGSchedInserter;
-    bool hasVariableNumberOfOperands;
+    bool isVariadic;
     bool hasCtrlDep;
     bool isNotDuplicable;
     bool hasOptionalDef;
index bd8d21058de3d5d64fec9abf8ea4573fd7ff9e48..8502d6197a73fb446429a731f0234cfae9f3914e 100644 (file)
@@ -835,7 +835,7 @@ public:
       if (InstPatNode && InstPatNode->getOperator()->getName() == "set") {
         InstPatNode = InstPatNode->getChild(InstPatNode->getNumChildren()-1);
       }
-      bool HasVarOps     = isRoot && II.hasVariableNumberOfOperands;
+      bool HasVarOps     = isRoot && II.isVariadic;
       // FIXME: fix how we deal with physical register operands.
       bool HasImpInputs  = isRoot && Inst.getNumImpOperands() > 0;
       bool HasImpResults = isRoot && DstRegs.size() > 0;
index 77ee860c24ae097bda16255dc78908b280898004..51896b85f8b6486626171860d202102def29e1e1 100644 (file)
@@ -320,9 +320,9 @@ void InstrInfoEmitter::emitRecord(const CodeGenInstruction &Inst, unsigned Num,
   if (Inst.hasOptionalDef)     OS << "|M_HAS_OPTIONAL_DEF";
   if (Inst.usesCustomDAGSchedInserter)
     OS << "|M_USES_CUSTOM_DAG_SCHED_INSERTION";
-  if (Inst.hasVariableNumberOfOperands) OS << "|M_VARIABLE_OPS";
-  if (Inst.mayHaveSideEffects)          OS << "|M_MAY_HAVE_SIDE_EFFECTS";
-  if (NeverHasSideEffects)              OS << "|M_NEVER_HAS_SIDE_EFFECTS";
+  if (Inst.isVariadic)         OS << "|M_VARIADIC";
+  if (Inst.mayHaveSideEffects) OS << "|M_MAY_HAVE_SIDE_EFFECTS";
+  if (NeverHasSideEffects)     OS << "|M_NEVER_HAS_SIDE_EFFECTS";
   OS << ", 0";
 
   // Emit all of the target-specific flags...