//===- CodeGenRegisters.h - Register and RegisterClass Info -----*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file defines structures to encapsulate information gleaned from the // target register and register class definitions. // //===----------------------------------------------------------------------===// #ifndef CODEGEN_REGISTERS_H #define CODEGEN_REGISTERS_H #include "llvm/CodeGen/ValueTypes.h" #include #include #include namespace llvm { class Record; /// CodeGenRegister - Represents a register definition. struct CodeGenRegister { Record *TheDef; const std::string &getName() const; unsigned DeclaredSpillSize, DeclaredSpillAlignment; CodeGenRegister(Record *R); }; struct CodeGenRegisterClass { Record *TheDef; std::string Namespace; std::vector Elements; std::vector VTs; unsigned SpillSize; unsigned SpillAlignment; int CopyCost; std::vector SubRegClasses; std::string MethodProtos, MethodBodies; const std::string &getName() const; const std::vector &getValueTypes() const {return VTs;} unsigned getNumValueTypes() const { return VTs.size(); } MVT::SimpleValueType getValueTypeNum(unsigned VTNum) const { if (VTNum < VTs.size()) return VTs[VTNum]; assert(0 && "VTNum greater than number of ValueTypes in RegClass!"); abort(); } CodeGenRegisterClass(Record *R); }; } #endif