forked from OSchip/llvm-project
TableGen: Produce CoveredBySubRegs summary for register classes
This will be used in the upcoming "DetectDeadLanes" pass. llvm-svn: 267850
This commit is contained in:
parent
cd69bcf6d5
commit
39d1fad554
|
@ -70,6 +70,9 @@ public:
|
|||
const uint8_t AllocationPriority;
|
||||
/// Whether the class supports two (or more) disjunct subregister indices.
|
||||
const bool HasDisjunctSubRegs;
|
||||
/// Whether a combination of subregisters can cover every register in the
|
||||
/// class. See also the CoveredBySubRegs description in Target.td.
|
||||
const bool CoveredBySubRegs;
|
||||
const sc_iterator SuperClasses;
|
||||
ArrayRef<MCPhysReg> (*OrderFunc)(const MachineFunction&);
|
||||
|
||||
|
|
|
@ -1829,11 +1829,14 @@ void CodeGenRegBank::computeDerivedInfo() {
|
|||
|
||||
computeRegUnitLaneMasks();
|
||||
|
||||
// Compute register class HasDisjunctSubRegs flag.
|
||||
// Compute register class HasDisjunctSubRegs/CoveredBySubRegs flag.
|
||||
for (CodeGenRegisterClass &RC : RegClasses) {
|
||||
RC.HasDisjunctSubRegs = false;
|
||||
for (const CodeGenRegister *Reg : RC.getMembers())
|
||||
RC.CoveredBySubRegs = true;
|
||||
for (const CodeGenRegister *Reg : RC.getMembers()) {
|
||||
RC.HasDisjunctSubRegs |= Reg->HasDisjunctSubRegs;
|
||||
RC.CoveredBySubRegs &= Reg->CoveredBySubRegs;
|
||||
}
|
||||
}
|
||||
|
||||
// Get the weight of each set.
|
||||
|
|
|
@ -310,6 +310,7 @@ namespace llvm {
|
|||
unsigned LaneMask;
|
||||
/// True if there are at least 2 subregisters which do not interfere.
|
||||
bool HasDisjunctSubRegs;
|
||||
bool CoveredBySubRegs;
|
||||
|
||||
// Return the Record that defined this class, or NULL if the class was
|
||||
// created by TableGen.
|
||||
|
|
|
@ -1311,7 +1311,9 @@ RegisterInfoEmitter::runTargetDesc(raw_ostream &OS, CodeGenTarget &Target,
|
|||
<< format("0x%08x,\n ", RC.LaneMask)
|
||||
<< (unsigned)RC.AllocationPriority << ",\n "
|
||||
<< (RC.HasDisjunctSubRegs?"true":"false")
|
||||
<< ", /* HasDisjunctSubRegs */\n ";
|
||||
<< ", /* HasDisjunctSubRegs */\n "
|
||||
<< (RC.CoveredBySubRegs?"true":"false")
|
||||
<< ", /* CoveredBySubRegs */\n ";
|
||||
if (RC.getSuperClasses().empty())
|
||||
OS << "NullRegClasses,\n ";
|
||||
else
|
||||
|
|
Loading…
Reference in New Issue