forked from OSchip/llvm-project
Add an MCPhysReg typedef to replace naked uint16_t.
Use this type for arrays of physical registers. llvm-svn: 168850
This commit is contained in:
parent
01ab5d718b
commit
7afe1663e9
|
@ -22,11 +22,15 @@
|
|||
|
||||
namespace llvm {
|
||||
|
||||
/// An unsigned integer type large enough to represent all physical registers,
|
||||
/// but not necessarily virtual registers.
|
||||
typedef uint16_t MCPhysReg;
|
||||
|
||||
/// MCRegisterClass - Base class of TargetRegisterClass.
|
||||
class MCRegisterClass {
|
||||
public:
|
||||
typedef const uint16_t* iterator;
|
||||
typedef const uint16_t* const_iterator;
|
||||
typedef const MCPhysReg* iterator;
|
||||
typedef const MCPhysReg* const_iterator;
|
||||
|
||||
const char *Name;
|
||||
const iterator RegsBegin;
|
||||
|
@ -152,7 +156,7 @@ private:
|
|||
unsigned NumClasses; // Number of entries in the array
|
||||
unsigned NumRegUnits; // Number of regunits.
|
||||
const uint16_t (*RegUnitRoots)[2]; // Pointer to regunit root table.
|
||||
const uint16_t *DiffLists; // Pointer to the difflists array
|
||||
const MCPhysReg *DiffLists; // Pointer to the difflists array
|
||||
const char *RegStrings; // Pointer to the string table.
|
||||
const uint16_t *SubRegIndices; // Pointer to the subreg lookup
|
||||
// array.
|
||||
|
@ -177,7 +181,7 @@ public:
|
|||
/// defined below.
|
||||
class DiffListIterator {
|
||||
uint16_t Val;
|
||||
const uint16_t *List;
|
||||
const MCPhysReg *List;
|
||||
|
||||
protected:
|
||||
/// Create an invalid iterator. Call init() to point to something useful.
|
||||
|
@ -186,7 +190,7 @@ public:
|
|||
/// init - Point the iterator to InitVal, decoding subsequent values from
|
||||
/// DiffList. The iterator will initially point to InitVal, sub-classes are
|
||||
/// responsible for skipping the seed value if it is not part of the list.
|
||||
void init(uint16_t InitVal, const uint16_t *DiffList) {
|
||||
void init(MCPhysReg InitVal, const MCPhysReg *DiffList) {
|
||||
Val = InitVal;
|
||||
List = DiffList;
|
||||
}
|
||||
|
@ -196,7 +200,7 @@ public:
|
|||
/// is the caller's responsibility (by checking for a 0 return value).
|
||||
unsigned advance() {
|
||||
assert(isValid() && "Cannot move off the end of the list.");
|
||||
uint16_t D = *List++;
|
||||
MCPhysReg D = *List++;
|
||||
Val += D;
|
||||
return D;
|
||||
}
|
||||
|
@ -231,7 +235,7 @@ public:
|
|||
const MCRegisterClass *C, unsigned NC,
|
||||
const uint16_t (*RURoots)[2],
|
||||
unsigned NRU,
|
||||
const uint16_t *DL,
|
||||
const MCPhysReg *DL,
|
||||
const char *Strings,
|
||||
const uint16_t *SubIndices,
|
||||
unsigned NumIndices,
|
||||
|
|
|
@ -34,8 +34,8 @@ class raw_ostream;
|
|||
|
||||
class TargetRegisterClass {
|
||||
public:
|
||||
typedef const uint16_t* iterator;
|
||||
typedef const uint16_t* const_iterator;
|
||||
typedef const MCPhysReg* iterator;
|
||||
typedef const MCPhysReg* const_iterator;
|
||||
typedef const MVT::SimpleValueType* vt_iterator;
|
||||
typedef const TargetRegisterClass* const * sc_iterator;
|
||||
|
||||
|
@ -45,7 +45,7 @@ public:
|
|||
const uint32_t *SubClassMask;
|
||||
const uint16_t *SuperRegIndices;
|
||||
const sc_iterator SuperClasses;
|
||||
ArrayRef<uint16_t> (*OrderFunc)(const MachineFunction&);
|
||||
ArrayRef<MCPhysReg> (*OrderFunc)(const MachineFunction&);
|
||||
|
||||
/// getID() - Return the register class ID number.
|
||||
///
|
||||
|
@ -190,7 +190,7 @@ public:
|
|||
///
|
||||
/// By default, this method returns all registers in the class.
|
||||
///
|
||||
ArrayRef<uint16_t> getRawAllocationOrder(const MachineFunction &MF) const {
|
||||
ArrayRef<MCPhysReg> getRawAllocationOrder(const MachineFunction &MF) const {
|
||||
return OrderFunc ? OrderFunc(MF) : makeArrayRef(begin(), getNumRegs());
|
||||
}
|
||||
};
|
||||
|
@ -407,7 +407,7 @@ public:
|
|||
/// order of desired callee-save stack frame offset. The first register is
|
||||
/// closest to the incoming stack pointer if stack grows down, and vice versa.
|
||||
///
|
||||
virtual const uint16_t* getCalleeSavedRegs(const MachineFunction *MF = 0)
|
||||
virtual const MCPhysReg* getCalleeSavedRegs(const MachineFunction *MF = 0)
|
||||
const = 0;
|
||||
|
||||
/// getCallPreservedMask - Return a mask of call-preserved registers for the
|
||||
|
@ -619,7 +619,7 @@ public:
|
|||
///
|
||||
/// Register allocators need only call this function to resolve
|
||||
/// target-dependent hints, but it should work without hinting as well.
|
||||
virtual ArrayRef<uint16_t>
|
||||
virtual ArrayRef<MCPhysReg>
|
||||
getRawAllocationOrder(const TargetRegisterClass *RC,
|
||||
unsigned HintType, unsigned HintReg,
|
||||
const MachineFunction &MF) const {
|
||||
|
|
|
@ -729,7 +729,7 @@ RegisterInfoEmitter::runMCDesc(raw_ostream &OS, CodeGenTarget &Target,
|
|||
const std::string &TargetName = Target.getName();
|
||||
|
||||
// Emit the shared table of differential lists.
|
||||
OS << "extern const uint16_t " << TargetName << "RegDiffLists[] = {\n";
|
||||
OS << "extern const MCPhysReg " << TargetName << "RegDiffLists[] = {\n";
|
||||
DiffSeqs.emit(OS, printDiff16);
|
||||
OS << "};\n\n";
|
||||
|
||||
|
@ -1074,12 +1074,12 @@ RegisterInfoEmitter::runTargetDesc(raw_ostream &OS, CodeGenTarget &Target,
|
|||
OS << "\nstatic inline unsigned " << RC.getName()
|
||||
<< "AltOrderSelect(const MachineFunction &MF) {"
|
||||
<< RC.AltOrderSelect << "}\n\n"
|
||||
<< "static ArrayRef<uint16_t> " << RC.getName()
|
||||
<< "static ArrayRef<MCPhysReg> " << RC.getName()
|
||||
<< "GetRawAllocationOrder(const MachineFunction &MF) {\n";
|
||||
for (unsigned oi = 1 , oe = RC.getNumOrders(); oi != oe; ++oi) {
|
||||
ArrayRef<Record*> Elems = RC.getOrder(oi);
|
||||
if (!Elems.empty()) {
|
||||
OS << " static const uint16_t AltOrder" << oi << "[] = {";
|
||||
OS << " static const MCPhysReg AltOrder" << oi << "[] = {";
|
||||
for (unsigned elem = 0; elem != Elems.size(); ++elem)
|
||||
OS << (elem ? ", " : " ") << getQualifiedName(Elems[elem]);
|
||||
OS << " };\n";
|
||||
|
@ -1087,11 +1087,11 @@ RegisterInfoEmitter::runTargetDesc(raw_ostream &OS, CodeGenTarget &Target,
|
|||
}
|
||||
OS << " const MCRegisterClass &MCR = " << Target.getName()
|
||||
<< "MCRegisterClasses[" << RC.getQualifiedName() + "RegClassID];\n"
|
||||
<< " const ArrayRef<uint16_t> Order[] = {\n"
|
||||
<< " const ArrayRef<MCPhysReg> Order[] = {\n"
|
||||
<< " makeArrayRef(MCR.begin(), MCR.getNumRegs()";
|
||||
for (unsigned oi = 1, oe = RC.getNumOrders(); oi != oe; ++oi)
|
||||
if (RC.getOrder(oi).empty())
|
||||
OS << "),\n ArrayRef<uint16_t>(";
|
||||
OS << "),\n ArrayRef<MCPhysReg>(";
|
||||
else
|
||||
OS << "),\n makeArrayRef(AltOrder" << oi;
|
||||
OS << ")\n };\n const unsigned Select = " << RC.getName()
|
||||
|
@ -1194,7 +1194,7 @@ RegisterInfoEmitter::runTargetDesc(raw_ostream &OS, CodeGenTarget &Target,
|
|||
|
||||
// Emit the constructor of the class...
|
||||
OS << "extern const MCRegisterDesc " << TargetName << "RegDesc[];\n";
|
||||
OS << "extern const uint16_t " << TargetName << "RegDiffLists[];\n";
|
||||
OS << "extern const MCPhysReg " << TargetName << "RegDiffLists[];\n";
|
||||
OS << "extern const char " << TargetName << "RegStrings[];\n";
|
||||
OS << "extern const uint16_t " << TargetName << "RegUnitRoots[][2];\n";
|
||||
OS << "extern const uint16_t " << TargetName << "SubRegIdxLists[];\n";
|
||||
|
@ -1232,7 +1232,7 @@ RegisterInfoEmitter::runTargetDesc(raw_ostream &OS, CodeGenTarget &Target,
|
|||
assert(Regs && "Cannot expand CalleeSavedRegs instance");
|
||||
|
||||
// Emit the *_SaveList list of callee-saved registers.
|
||||
OS << "static const uint16_t " << CSRSet->getName()
|
||||
OS << "static const MCPhysReg " << CSRSet->getName()
|
||||
<< "_SaveList[] = { ";
|
||||
for (unsigned r = 0, re = Regs->size(); r != re; ++r)
|
||||
OS << getQualifiedName((*Regs)[r]) << ", ";
|
||||
|
|
Loading…
Reference in New Issue