mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-27 04:18:42 +00:00
MIR Serialization: Serialize the register mask machine operands.
This commit implements serialization of the register mask machine operands. This commit serializes only the call preserved register masks that are defined by a target, it doesn't serialize arbitrary register masks. This commit also extends the TargetRegisterInfo class and TableGen so that the users of TRI can get the list of all the call preserved register masks and their names. Reviewers: Duncan P. N. Exon Smith Differential Revision: http://reviews.llvm.org/D10673 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@240966 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
1 parent
59a20ece84
commit
1a4def3d97
5 files changed
+134
-3
No files matched your search
@@ -1094,6 +1094,8 @@ RegisterInfoEmitter::runTargetHeader(raw_ostream &OS, CodeGenTarget &Target,
|
||||
<< "const TargetRegisterClass *RC) const override;\n"
|
||||
<< " const int *getRegUnitPressureSets("
|
||||
<< "unsigned RegUnit) const override;\n"
|
||||
<< " ArrayRef<const char *> getRegMaskNames() const override;\n"
|
||||
<< " ArrayRef<const uint32_t *> getRegMasks() const override;\n"
|
||||
<< "};\n\n";
|
||||
|
||||
const auto &RegisterClasses = RegBank.getRegClasses();
|
||||
@@ -1445,6 +1447,26 @@ RegisterInfoEmitter::runTargetDesc(raw_ostream &OS, CodeGenTarget &Target,
|
||||
}
|
||||
OS << "\n\n";
|
||||
|
||||
OS << "ArrayRef<const uint32_t *> " << ClassName
|
||||
<< "::getRegMasks() const {\n";
|
||||
OS << " static const uint32_t *Masks[] = {\n";
|
||||
for (Record *CSRSet : CSRSets)
|
||||
OS << " " << CSRSet->getName() << "_RegMask, \n";
|
||||
OS << " nullptr\n };\n";
|
||||
OS << " return ArrayRef<const uint32_t *>(Masks, (size_t)" << CSRSets.size()
|
||||
<< ");\n";
|
||||
OS << "}\n\n";
|
||||
|
||||
OS << "ArrayRef<const char *> " << ClassName
|
||||
<< "::getRegMaskNames() const {\n";
|
||||
OS << " static const char *Names[] = {\n";
|
||||
for (Record *CSRSet : CSRSets)
|
||||
OS << " " << '"' << CSRSet->getName() << '"' << ",\n";
|
||||
OS << " nullptr\n };\n";
|
||||
OS << " return ArrayRef<const char *>(Names, (size_t)" << CSRSets.size()
|
||||
<< ");\n";
|
||||
OS << "}\n\n";
|
||||
|
||||
OS << "} // End llvm namespace\n";
|
||||
OS << "#endif // GET_REGINFO_TARGET_DESC\n\n";
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user