1 /* Title: MachineRegInfo.h
2 Author: Ruchira Sasanka
4 Purpose: Contains the description of machine register classes.
8 A machine will have several register classes. For each register class, the
9 machine has to provide a class which is derived class of the virtual class
10 MachineRegClass. This virtual class itself is machine independent but
11 the derived classes are all machine dependent.
15 #ifndef MACHINE_REG_INFO_H
16 #define MACHINE_REG_INFO_H
18 #include "llvm/CodeGen/MachineInstr.h"
22 // This is the virtual class which must be subclassed by all machine specific
25 unsigned RegClassID; // integer ID of a reg class
26 unsigned NumOfAvailRegs; // # of avail for coloring (without SP, g0 etc)
27 unsigned NumOfAllRegs; // # of all registers (including SP, g0 etc
34 const unsigned RegClassID;
38 virtual unsigned getRegClassID() const = 0;
40 // Number of registes available for coloring (e.g., without SP, g0 etc)
41 virtual unsigned getNumOfAvailRegs() const = 0;
43 // Number of all registers (e.g., including SP, g0 etc)
44 virtual unsigned getNumOfAllRegs() const = 0;
46 // This method should find a color which is not used by neighbors
47 // (i.e., a false position in IsColorUsedArr) and
48 virtual void colorIGNode(IGNode * Node, bool IsColorUsedArr[] ) const = 0;
51 MachineRegClass(const unsigned ID) : RegClassID(ID) { }
57 // include .h files that describes machine reg classes here
59 #include "RegAlloc/Sparc/SparcIntRegClass.h"
61 typedef vector<const MachineRegClass *> MachineRegClassArrayType;
69 // A vector of all machine register classes
70 MachineRegClassArrayType MachineRegClassArr;
75 MachineRegInfo() : MachineRegClassArr() {
77 MachineRegClassArr.push_back( new SparcIntRegClass(0) );
78 // RegClassArr.pushback( new SparcFloatRegClass(1) );
79 // RegClassArr.pushback( new SparcFloatCCRegClass(2) );
82 cout << "Created machine register classes." << endl;
87 inline unsigned int getNumOfRegClasses() const {
88 return MachineRegClassArr.size();
91 unsigned getRegClassIDOfValue (const Value *const Val) const ;
93 const MachineRegClass *const getMachineRegClass(unsigned i) const {
94 return MachineRegClassArr[i];
97 inline bool isCallInst(const MachineInstr *const MI) const {
98 MachineOpCode Op = MI->getOpCode();
99 return false; // ########################################
100 // return (Op == CALL || Op == JMPL);
106 // This function should detrmine the register class of a value. This can be
107 // done on type information in the value class. The register class returned
108 // must be same as the array index of RegClassArr.
110 unsigned MachineRegInfo::getRegClassIDOfValue (const Value *const Val) const