726baabf24fe94619292ba2c6a18e02b4a91255f
[oota-llvm.git] / include / llvm / Target / RegInfo.h
1 //===-- llvm/Target/RegInfo.h - Target Register Information ------*- C++ -*-==//
2 //
3 // This file is used to describe the register system of a target to the register
4 // allocator.
5 //
6 //===----------------------------------------------------------------------===//
7
8 #ifndef LLVM_TARGET_REGINFO_H
9 #define LLVM_TARGET_REGINFO_H
10
11 class LiveRangeInfo;
12 class Method;
13 class Instruction;
14 class LiveRange;
15 class AddedInstrns;
16 class MachineInstr;
17
18 //-----------------------------------------------------------------------------
19 // class MachineRegClassInfo
20 // 
21 // Purpose:
22 //   Interface to description of machine register class (e.g., int reg class
23 //   float reg class etc)
24 // 
25 //--------------------------------------------------------------------------
26
27 class IGNode;
28 class MachineRegClassInfo {
29 protected:  
30   const unsigned RegClassID;        // integer ID of a reg class
31   const unsigned NumOfAvailRegs;    // # of avail for coloring -without SP etc.
32   const unsigned NumOfAllRegs;      // # of all registers -including SP,g0 etc.
33
34 public:
35   
36   inline unsigned getRegClassID() const { return RegClassID; }
37   inline unsigned getNumOfAvailRegs() const { return NumOfAvailRegs; }
38   inline unsigned getNumOfAllRegs() const { return NumOfAllRegs; }
39
40
41
42   // This method should find a color which is not used by neighbors
43   // (i.e., a false position in IsColorUsedArr) and 
44   virtual void colorIGNode(IGNode * Node, bool IsColorUsedArr[] ) const = 0;
45
46
47   MachineRegClassInfo(const unsigned ID, const unsigned NVR, 
48                       const unsigned NAR): RegClassID(ID), NumOfAvailRegs(NVR),
49                                            NumOfAllRegs(NAR) { }
50 };
51
52 //---------------------------------------------------------------------------
53 // class MachineRegInfo
54 // 
55 // Purpose:
56 //   Interface to register info of target machine
57 // 
58 //--------------------------------------------------------------------------
59
60 typedef hash_map<const MachineInstr *, AddedInstrns *> AddedInstrMapType;
61
62 // A vector of all machine register classes
63 typedef vector<const MachineRegClassInfo *> MachineRegClassArrayType;
64
65
66 class MachineRegInfo : public NonCopyableV {
67 protected:
68   MachineRegClassArrayType MachineRegClassArr;    
69  
70 public:
71   inline unsigned int getNumOfRegClasses() const { 
72     return MachineRegClassArr.size(); 
73   }  
74
75   const MachineRegClassInfo *const getMachineRegClass(unsigned i) const { 
76     return MachineRegClassArr[i]; 
77   }
78
79
80   virtual unsigned getRegClassIDOfValue (const Value *const Val) const = 0;
81
82   virtual void colorArgs(const Method *const Meth, 
83                          LiveRangeInfo & LRI) const = 0;
84
85   virtual void colorCallArgs(vector<const Instruction *> & CallInstrList, 
86                              LiveRangeInfo& LRI, 
87                              AddedInstrMapType& AddedInstrMap ) const = 0;
88
89   virtual int getUnifiedRegNum(int RegClassID, int reg) const = 0;
90
91   virtual const string getUnifiedRegName(int reg) const = 0;
92
93   //virtual void printReg(const LiveRange *const LR) const =0;
94
95   MachineRegInfo() { }
96
97 };
98
99 #endif