1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 04:02:41 +01:00

Add register size info back to MCRegisterClass

This patch addresses the removal of register size information done in
commit c8b782c.

Without this change, there is no viable option to get register size
information outside libTarget. We need this information to run
analysis that know the register size from the MC layer, used by
BOLT.

Discussion D50285 and D47199.

Reviewed By: kparzysz

Differential Revision: https://reviews.llvm.org/D97891
This commit is contained in:
Rafael Auler 2021-03-03 14:31:57 -08:00
parent a4c86712c5
commit 3b0888e5fb
2 changed files with 15 additions and 5 deletions

View File

@ -39,6 +39,7 @@ public:
const uint16_t RegsSize;
const uint16_t RegSetSize;
const uint16_t ID;
const uint16_t RegSizeInBits;
const int8_t CopyCost;
const bool Allocatable;
@ -78,6 +79,12 @@ public:
return contains(Reg1) && contains(Reg2);
}
/// Return the size of the physical register in bits if we are able to
/// determine it. This always returns zero for registers of targets that use
/// HW modes, as we need more information to determine the size of registers
/// in such cases. Use TargetRegisterInfo to cover them.
unsigned getSizeInBits() const { return RegSizeInBits; }
/// getCopyCost - Return the cost of copying a value between two registers in
/// this class. A negative number means the register class is very expensive
/// to copy e.g. status flag register classes.

View File

@ -1084,12 +1084,15 @@ RegisterInfoEmitter::runMCDesc(raw_ostream &OS, CodeGenTarget &Target,
for (const auto &RC : RegisterClasses) {
assert(isInt<8>(RC.CopyCost) && "Copy cost too large.");
uint32_t RegSize = 0;
if (RC.RSI.isSimple())
RegSize = RC.RSI.getSimple().RegSize;
OS << " { " << RC.getName() << ", " << RC.getName() << "Bits, "
<< RegClassStrings.get(RC.getName()) << ", "
<< RC.getOrder().size() << ", sizeof(" << RC.getName() << "Bits), "
<< RC.getQualifiedName() + "RegClassID" << ", "
<< RC.CopyCost << ", "
<< ( RC.Allocatable ? "true" : "false" ) << " },\n";
<< RegClassStrings.get(RC.getName()) << ", " << RC.getOrder().size()
<< ", sizeof(" << RC.getName() << "Bits), "
<< RC.getQualifiedName() + "RegClassID"
<< ", " << RegSize << ", " << RC.CopyCost << ", "
<< (RC.Allocatable ? "true" : "false") << " },\n";
}
OS << "};\n\n";