CodeGenInstruction.h revision cdd66b524f62ef6acd6bfa4e586edf8a406c4928
1//===- CodeGenInstruction.h - Instruction Class Wrapper ---------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file was developed by the LLVM research group and is distributed under 6// the University of Illinois Open Source License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file defines a wrapper class for the 'Instruction' TableGen class. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef CODEGEN_INSTRUCTION_H 15#define CODEGEN_INSTRUCTION_H 16 17#include "llvm/CodeGen/ValueTypes.h" 18#include <string> 19#include <vector> 20#include <utility> 21 22namespace llvm { 23 class Record; 24 25 struct CodeGenInstruction { 26 Record *TheDef; // The actual record defining this instruction. 27 std::string Name; // Contents of the 'Name' field. 28 std::string Namespace; // The namespace the instruction is in. 29 30 /// AsmString - The format string used to emit a .s file for the 31 /// instruction. 32 std::string AsmString; 33 34 /// OperandInfo - The information we keep track of for each operand in the 35 /// operand list for a tablegen instruction. 36 struct OperandInfo { 37 /// Rec - The definition this operand is declared as. 38 Record *Rec; 39 40 /// Ty - The MachineValueType of the operand. 41 /// 42 MVT::ValueType Ty; 43 44 /// Name - If this operand was assigned a symbolic name, this is it, 45 /// otherwise, it's empty. 46 std::string Name; 47 48 /// PrinterMethodName - The method used to print operands of this type in 49 /// the asmprinter. 50 std::string PrinterMethodName; 51 52 /// MIOperandNo - Currently (this is meant to be phased out), some logical 53 /// operands correspond to multiple MachineInstr operands. In the X86 54 /// target for example, one address operand is represented as 4 55 /// MachineOperands. Because of this, the operand number in the 56 /// OperandList may not match the MachineInstr operand num. Until it 57 /// does, this contains the MI operand index of this operand. 58 unsigned MIOperandNo; 59 60 OperandInfo(Record *R, MVT::ValueType T, const std::string &N, 61 const std::string &PMN, unsigned MION) 62 : Rec(R), Ty(T), Name(N), PrinterMethodName(PMN), MIOperandNo(MION) {} 63 }; 64 65 /// OperandList - The list of declared operands, along with their declared 66 /// type (which is a record). 67 std::vector<OperandInfo> OperandList; 68 69 // Various boolean values we track for the instruction. 70 bool isReturn; 71 bool isBranch; 72 bool isBarrier; 73 bool isCall; 74 bool isLoad; 75 bool isStore; 76 bool isTwoAddress; 77 bool isTerminator; 78 bool hasDelaySlot; 79 80 CodeGenInstruction(Record *R, const std::string &AsmStr); 81 82 /// getOperandNamed - Return the index of the operand with the specified 83 /// non-empty name. If the instruction does not have an operand with the 84 /// specified name, throw an exception. 85 unsigned getOperandNamed(const std::string &Name) const; 86 }; 87} 88 89#endif 90