diff options
Diffstat (limited to 'utils/TableGen/CodeGenInstruction.h')
-rw-r--r-- | utils/TableGen/CodeGenInstruction.h | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/utils/TableGen/CodeGenInstruction.h b/utils/TableGen/CodeGenInstruction.h index 88f2c17d9d..5269cc76e2 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 @@ namespace llvm { /// 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 @@ namespace llvm { 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; }; } |