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