CodeGenRegisters.h revision 09bc0298650c76db1a06e20ca84c1dcb34071600
18dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner//===- CodeGenRegisters.h - Register and RegisterClass Info -----*- C++ -*-===// 23da94aec4d429b2ba0f65fa040c33650cade196bMisha Brukman// 38dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner// The LLVM Compiler Infrastructure 48dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner// 53060910e290949a9ac5eda8726d030790c4d60ffChris Lattner// This file is distributed under the University of Illinois Open Source 63060910e290949a9ac5eda8726d030790c4d60ffChris Lattner// 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 18ae9f3a3b7c915f725aef5a7250e88eaeddda03c6Anton Korobeynikov#include "llvm/CodeGen/ValueTypes.h" 1909bc0298650c76db1a06e20ca84c1dcb34071600Jakob Stoklund Olesen#include "llvm/ADT/DenseMap.h" 208dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner#include <string> 21056afeface2ac98664ed8fa4799b46178a4a6fe3Chris Lattner#include <vector> 22ae9f3a3b7c915f725aef5a7250e88eaeddda03c6Anton Korobeynikov#include <cstdlib> 238dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner 248dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattnernamespace llvm { 258dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner class Record; 268dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner 278dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner /// CodeGenRegister - Represents a register definition. 288dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner struct CodeGenRegister { 298dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner Record *TheDef; 308dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner const std::string &getName() const; 317a680c60646fb3b06085f1fe6a7a1917c35010c6Chris Lattner unsigned DeclaredSpillSize, DeclaredSpillAlignment; 327a680c60646fb3b06085f1fe6a7a1917c35010c6Chris Lattner CodeGenRegister(Record *R); 338dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner }; 348dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner 358dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner 368dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner struct CodeGenRegisterClass { 37056afeface2ac98664ed8fa4799b46178a4a6fe3Chris Lattner Record *TheDef; 38c67c18fd2378fd2394c42f12b67897e7eba02d5cChris Lattner std::string Namespace; 39056afeface2ac98664ed8fa4799b46178a4a6fe3Chris Lattner std::vector<Record*> Elements; 40825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson std::vector<MVT::SimpleValueType> VTs; 41056afeface2ac98664ed8fa4799b46178a4a6fe3Chris Lattner unsigned SpillSize; 42056afeface2ac98664ed8fa4799b46178a4a6fe3Chris Lattner unsigned SpillAlignment; 43a3ca3149f2b59c512c50aab330b5a0d8efddeffaEvan Cheng int CopyCost; 4409bc0298650c76db1a06e20ca84c1dcb34071600Jakob Stoklund Olesen // Map SubRegIndex -> RegisterClass 4509bc0298650c76db1a06e20ca84c1dcb34071600Jakob Stoklund Olesen DenseMap<Record*,Record*> SubRegClasses; 46ac46893e246748876d1155bb0c9e8892e52acab7Chris Lattner std::string MethodProtos, MethodBodies; 47056afeface2ac98664ed8fa4799b46178a4a6fe3Chris Lattner 48056afeface2ac98664ed8fa4799b46178a4a6fe3Chris Lattner const std::string &getName() const; 49825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson const std::vector<MVT::SimpleValueType> &getValueTypes() const {return VTs;} 505c4736a3da04795ba8d04e152e151afd6942e2f1Chris Lattner unsigned getNumValueTypes() const { return VTs.size(); } 515c4736a3da04795ba8d04e152e151afd6942e2f1Chris Lattner 52825b72b0571821bf2d378749f69d6c4cfb52d2f9Owen Anderson MVT::SimpleValueType getValueTypeNum(unsigned VTNum) const { 536510b22cec7de4f0acc9965ec24c3668a6a8a87eNate Begeman if (VTNum < VTs.size()) 546510b22cec7de4f0acc9965ec24c3668a6a8a87eNate Begeman return VTs[VTNum]; 556510b22cec7de4f0acc9965ec24c3668a6a8a87eNate Begeman assert(0 && "VTNum greater than number of ValueTypes in RegClass!"); 566510b22cec7de4f0acc9965ec24c3668a6a8a87eNate Begeman abort(); 576510b22cec7de4f0acc9965ec24c3668a6a8a87eNate Begeman } 586510b22cec7de4f0acc9965ec24c3668a6a8a87eNate Begeman 59056afeface2ac98664ed8fa4799b46178a4a6fe3Chris Lattner CodeGenRegisterClass(Record *R); 608dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner }; 618dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner} 628dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner 638dab6ca9c638709e7b60b942107ab88b3ef7d06dChris Lattner#endif 64