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:
parent
a4c86712c5
commit
3b0888e5fb
@ -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.
|
||||
|
@ -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";
|
||||
|
Loading…
Reference in New Issue
Block a user