diff options
| author | Freddy Ye <freddy.ye@intel.com> | 2024-08-06 08:52:48 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-06 08:52:48 +0800 |
| commit | f30188797453fc9bccb0ba9e8bdb8fd47369dfa7 (patch) | |
| tree | f3fe5ece57f2f0b4f0da1984e051f28313abb2ab /llvm/utils/TableGen/RegisterInfoEmitter.cpp | |
| parent | 8ec3049e67a830cd35b46d4a33e8305569c5312f (diff) | |
[X86][RA] Add two address hints for compressible NDD instructions. (#98603)
To address @topperc 's comment at
https://discourse.llvm.org/t/rfc-design-for-apx-feature-egpr-and-ndd-support/73031/5?u=kanrobert
Diffstat (limited to 'llvm/utils/TableGen/RegisterInfoEmitter.cpp')
| -rw-r--r-- | llvm/utils/TableGen/RegisterInfoEmitter.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/llvm/utils/TableGen/RegisterInfoEmitter.cpp b/llvm/utils/TableGen/RegisterInfoEmitter.cpp index 2233072718bb..dce6c2ada917 100644 --- a/llvm/utils/TableGen/RegisterInfoEmitter.cpp +++ b/llvm/utils/TableGen/RegisterInfoEmitter.cpp @@ -1149,6 +1149,8 @@ void RegisterInfoEmitter::runTargetHeader(raw_ostream &OS, << " ArrayRef<const uint32_t *> getRegMasks() const override;\n" << " bool isGeneralPurposeRegister(const MachineFunction &, " << "MCRegister) const override;\n" + << " bool isGeneralPurposeRegisterClass(const TargetRegisterClass *RC)" + << " const override;\n" << " bool isFixedRegister(const MachineFunction &, " << "MCRegister) const override;\n" << " bool isArgumentRegister(const MachineFunction &, " @@ -1740,6 +1742,20 @@ void RegisterInfoEmitter::runTargetDesc(raw_ostream &OS, CodeGenTarget &Target, OS << "}\n\n"; OS << "bool " << ClassName << "::\n" + << "isGeneralPurposeRegisterClass(const TargetRegisterClass *RC)" + << " const {\n" + << " return\n"; + for (const CodeGenRegisterCategory &Category : RegCategories) + if (Category.getName() == "GeneralPurposeRegisters") { + for (const CodeGenRegisterClass *RC : Category.getClasses()) + OS << " " << RC->getQualifiedName() + << "RegClass.hasSubClassEq(RC) ||\n"; + break; + } + OS << " false;\n"; + OS << "}\n\n"; + + OS << "bool " << ClassName << "::\n" << "isFixedRegister(const MachineFunction &MF, " << "MCRegister PhysReg) const {\n" << " return\n"; |
