1 //===-- llvm/Target/RegInfo.h - Target Register Information ------*- C++ -*-==//
3 // This file is used to describe the register system of a target to the register
6 //===----------------------------------------------------------------------===//
8 #ifndef LLVM_TARGET_REGINFO_H
9 #define LLVM_TARGET_REGINFO_H
18 //-----------------------------------------------------------------------------
19 // class MachineRegClassInfo
22 // Interface to description of machine register class (e.g., int reg class
23 // float reg class etc)
25 //--------------------------------------------------------------------------
28 class MachineRegClassInfo {
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.
36 inline unsigned getRegClassID() const { return RegClassID; }
37 inline unsigned getNumOfAvailRegs() const { return NumOfAvailRegs; }
38 inline unsigned getNumOfAllRegs() const { return NumOfAllRegs; }
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;
47 MachineRegClassInfo(const unsigned ID, const unsigned NVR,
48 const unsigned NAR): RegClassID(ID), NumOfAvailRegs(NVR),
52 //---------------------------------------------------------------------------
53 // class MachineRegInfo
56 // Interface to register info of target machine
58 //--------------------------------------------------------------------------
60 typedef hash_map<const MachineInstr *, AddedInstrns *> AddedInstrMapType;
62 // A vector of all machine register classes
63 typedef vector<const MachineRegClassInfo *> MachineRegClassArrayType;
66 class MachineRegInfo : public NonCopyableV {
68 MachineRegClassArrayType MachineRegClassArr;
71 inline unsigned int getNumOfRegClasses() const {
72 return MachineRegClassArr.size();
75 const MachineRegClassInfo *const getMachineRegClass(unsigned i) const {
76 return MachineRegClassArr[i];
80 virtual unsigned getRegClassIDOfValue (const Value *const Val) const = 0;
82 virtual void colorArgs(const Method *const Meth,
83 LiveRangeInfo & LRI) const = 0;
85 virtual void colorCallArgs(vector<const Instruction *> & CallInstrList,
87 AddedInstrMapType& AddedInstrMap ) const = 0;
89 virtual int getUnifiedRegNum(int RegClassID, int reg) const = 0;
91 virtual const string getUnifiedRegName(int reg) const = 0;
93 //virtual void printReg(const LiveRange *const LR) const =0;