CodeGenRegisters.h revision 5c4736a3da04795ba8d04e152e151afd6942e2f1
18dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner//===- CodeGenRegisters.h - Register and RegisterClass Info -----*- C++ -*-===// 23da94aec4d429b2ba0f65fa040c33650cade196bMisha Brukman// 38dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner// The LLVM Compiler Infrastructure 48dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner// 58dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner// This file was developed by the LLVM research group and is distributed under 68dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner// the University of Illinois Open Source License. See LICENSE.TXT for details. 73da94aec4d429b2ba0f65fa040c33650cade196bMisha Brukman// 88dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner//===----------------------------------------------------------------------===// 98dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner// 108dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner// This file defines structures to encapsulate information gleaned from the 118dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner// target register and register class definitions. 128dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner// 138dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner//===----------------------------------------------------------------------===// 148dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner 158dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner#ifndef CODEGEN_REGISTERS_H 168dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner#define CODEGEN_REGISTERS_H 178dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner 188dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner#include <string> 19056afeface2ac98664ed8fa4799b46178a4a6fe3Chris Lattner#include <vector> 20e9f4ba8dd47de9da2a98db3bbe25b54d5a9607f1Chris Lattner#include "llvm/CodeGen/ValueTypes.h" 218dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner 228dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattnernamespace llvm { 238dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner class Record; 248dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner 258dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner /// CodeGenRegister - Represents a register definition. 268dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner struct CodeGenRegister { 278dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner Record *TheDef; 288dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner const std::string &getName() const; 297a680c60646fb3b06085f1fe6a7a1917c35010c6Chris Lattner unsigned DeclaredSpillSize, DeclaredSpillAlignment; 307a680c60646fb3b06085f1fe6a7a1917c35010c6Chris Lattner CodeGenRegister(Record *R); 318dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner }; 328dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner 338dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner 348dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner struct CodeGenRegisterClass { 35056afeface2ac98664ed8fa4799b46178a4a6fe3Chris Lattner Record *TheDef; 36c67c18fd2378fd2394c42f12b67897e7eba02d5cChris Lattner std::string Namespace; 37056afeface2ac98664ed8fa4799b46178a4a6fe3Chris Lattner std::vector<Record*> Elements; 386510b22cec7de4f0acc9965ec24c3668a6a8a87eNate Begeman std::vector<MVT::ValueType> VTs; 39056afeface2ac98664ed8fa4799b46178a4a6fe3Chris Lattner unsigned SpillSize; 40056afeface2ac98664ed8fa4799b46178a4a6fe3Chris Lattner unsigned SpillAlignment; 41ac46893e246748876d1155bb0c9e8892e52acab7Chris Lattner std::string MethodProtos, MethodBodies; 42056afeface2ac98664ed8fa4799b46178a4a6fe3Chris Lattner 43056afeface2ac98664ed8fa4799b46178a4a6fe3Chris Lattner const std::string &getName() const; 448dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner 455c4736a3da04795ba8d04e152e151afd6942e2f1Chris Lattner unsigned getNumValueTypes() const { return VTs.size(); } 465c4736a3da04795ba8d04e152e151afd6942e2f1Chris Lattner 476510b22cec7de4f0acc9965ec24c3668a6a8a87eNate Begeman const MVT::ValueType getValueTypeNum(unsigned VTNum) const { 486510b22cec7de4f0acc9965ec24c3668a6a8a87eNate Begeman if (VTNum < VTs.size()) 496510b22cec7de4f0acc9965ec24c3668a6a8a87eNate Begeman return VTs[VTNum]; 506510b22cec7de4f0acc9965ec24c3668a6a8a87eNate Begeman assert(0 && "VTNum greater than number of ValueTypes in RegClass!"); 516510b22cec7de4f0acc9965ec24c3668a6a8a87eNate Begeman abort(); 526510b22cec7de4f0acc9965ec24c3668a6a8a87eNate Begeman } 536510b22cec7de4f0acc9965ec24c3668a6a8a87eNate Begeman 54056afeface2ac98664ed8fa4799b46178a4a6fe3Chris Lattner CodeGenRegisterClass(Record *R); 558dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner }; 568dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner} 578dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner 588dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner#endif 59