Parse the operand list of the instruction.  We currently support register and immediate operands.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15390 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/utils/TableGen/CodeGenInstruction.h b/utils/TableGen/CodeGenInstruction.h
index 88f2c17..5269cc7 100644
--- a/utils/TableGen/CodeGenInstruction.h
+++ b/utils/TableGen/CodeGenInstruction.h
@@ -14,6 +14,7 @@
 #ifndef CODEGEN_INSTRUCTION_H
 #define CODEGEN_INSTRUCTION_H
 
+#include "llvm/CodeGen/ValueTypes.h"
 #include <string>
 #include <vector>
 #include <utility>
@@ -29,10 +30,21 @@
     /// AsmString - The format string used to emit a .s file for the
     /// instruction.
     std::string AsmString;
+
+    /// OperandInfo - For each operand declared in the OperandList of the
+    /// instruction, keep track of its record (which specifies the class of the
+    /// operand), its type, and the name given to the operand, if any.
+    struct OperandInfo {
+      Record *Rec;
+      MVT::ValueType Ty;
+      std::string Name;
+      OperandInfo(Record *R, MVT::ValueType T, const std::string &N)
+        : Rec(R), Ty(T), Name(N) {}
+    };
     
     /// OperandList - The list of declared operands, along with their declared
     /// type (which is a record).
-    std::vector<std::pair<Record*, std::string> > OperandList;
+    std::vector<OperandInfo> OperandList;
 
     // Various boolean values we track for the instruction.
     bool isReturn;
@@ -43,6 +55,11 @@
     bool isTerminator;
 
     CodeGenInstruction(Record *R);
+
+    /// getOperandNamed - Return the index of the operand with the specified
+    /// non-empty name.  If the instruction does not have an operand with the
+    /// specified name, throw an exception.
+    unsigned getOperandNamed(const std::string &Name) const;
   };
 }