Skip to content

Commit bdfdc33

Browse files
committed
Move RegClassByHwModeUses definition to header
1 parent c416581 commit bdfdc33

File tree

2 files changed

+22
-14
lines changed

2 files changed

+22
-14
lines changed

llvm/test/TableGen/RegClassByHwMode.td

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,13 @@
66

77
include "llvm/Target/Target.td"
88

9-
// INSTRINFO: #if defined(GET_INSTRINFO_MC_DESC) || defined(GET_INSTRINFO_CTOR_DTOR)
10-
// INSTRINFO-NEXT: namespace {
11-
// INSTRINFO-NEXT: enum RegClassByHwModeUses : uint16_t {
9+
// INSTRINFO: #ifdef GET_INSTRINFO_ENUM
10+
// INSTRINFO-NEXT: #undef GET_INSTRINFO_ENUM
11+
// INSTRINFO-NEXT: namespace llvm::MyTarget {
12+
// INSTRINFO-NEXT: enum {
13+
// INSTRINFO-NEXT: PHI
14+
// INSTRINFO: };
15+
// INSTRINFO: enum RegClassByHwModeUses : uint16_t {
1216
// INSTRINFO-NEXT: MyPtrRC,
1317
// INSTRINFO-NEXT: XRegs_EvenIfRequired,
1418
// INSTRINFO-NEXT: YRegs_EvenIfRequired,
@@ -17,10 +21,10 @@ include "llvm/Target/Target.td"
1721

1822
// INSTRINFO: { MyTarget::XRegsRegClassID, 0, MCOI::OPERAND_REGISTER, 0 },
1923
// INSTRINFO: { MyTarget::XRegs_EvenRegClassID, 0, MCOI::OPERAND_REGISTER, 0 },
20-
// INSTRINFO: { YRegs_EvenIfRequired, 0|(1<<MCOI::LookupRegClassByHwMode), MCOI::OPERAND_REGISTER, 0 },
21-
// INSTRINFO: { XRegs_EvenIfRequired, 0|(1<<MCOI::LookupRegClassByHwMode), MCOI::OPERAND_REGISTER, 0 },
22-
// INSTRINFO: { XRegs_EvenIfRequired, 0|(1<<MCOI::LookupRegClassByHwMode), MCOI::OPERAND_REGISTER, 0 }, { MyPtrRC, 0|(1<<MCOI::LookupRegClassByHwMode), MCOI::OPERAND_REGISTER, 0 },
23-
// INSTRINFO: { YRegs_EvenIfRequired, 0|(1<<MCOI::LookupRegClassByHwMode), MCOI::OPERAND_REGISTER, 0 }, { XRegs_EvenIfRequired, 0|(1<<MCOI::LookupRegClassByHwMode), MCOI::OPERAND_REGISTER, 0 },
24+
// INSTRINFO: { MyTarget::YRegs_EvenIfRequired, 0|(1<<MCOI::LookupRegClassByHwMode), MCOI::OPERAND_REGISTER, 0 },
25+
// INSTRINFO: { MyTarget::XRegs_EvenIfRequired, 0|(1<<MCOI::LookupRegClassByHwMode), MCOI::OPERAND_REGISTER, 0 },
26+
// INSTRINFO: { MyTarget::XRegs_EvenIfRequired, 0|(1<<MCOI::LookupRegClassByHwMode), MCOI::OPERAND_REGISTER, 0 }, { MyTarget::MyPtrRC, 0|(1<<MCOI::LookupRegClassByHwMode), MCOI::OPERAND_REGISTER, 0 },
27+
// INSTRINFO: { MyTarget::YRegs_EvenIfRequired, 0|(1<<MCOI::LookupRegClassByHwMode), MCOI::OPERAND_REGISTER, 0 }, { MyTarget::XRegs_EvenIfRequired, 0|(1<<MCOI::LookupRegClassByHwMode), MCOI::OPERAND_REGISTER, 0 },
2428

2529
// INSTRINFO: extern const int16_t MyTargetRegClassByHwModeTables[4][3] = {
2630
// INSTRINFO-NEXT: { // DefaultMode

llvm/utils/TableGen/InstrInfoEmitter.cpp

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ class InstrInfoEmitter {
115115
InstrInfoEmitter::OperandInfoTy
116116
InstrInfoEmitter::GetOperandInfo(const CodeGenInstruction &Inst) {
117117
OperandInfoTy Result;
118+
StringRef Namespace = CDP.getTargetInfo().getInstNamespace();
118119

119120
for (auto &Op : Inst.Operands) {
120121
// Handle aggregate operands and normal operands the same way by expanding
@@ -147,6 +148,8 @@ InstrInfoEmitter::GetOperandInfo(const CodeGenInstruction &Inst) {
147148
OpR = OpR->getValueAsDef("RegClass");
148149

149150
if (OpR->isSubClassOf("RegClassByHwMode")) {
151+
Res += Namespace;
152+
Res += "::";
150153
Res += OpR->getName();
151154
Res += ", ";
152155
} else if (OpR->isSubClassOf("RegisterClass"))
@@ -934,13 +937,6 @@ void InstrInfoEmitter::run(raw_ostream &OS) {
934937
OS << "#if defined(GET_INSTRINFO_MC_DESC) || "
935938
"defined(GET_INSTRINFO_CTOR_DTOR)\n";
936939

937-
OS << "namespace {\n";
938-
OS << "enum RegClassByHwModeUses : uint16_t {\n";
939-
for (const Record *ClassByHwMode : Target.getAllRegClassByHwMode())
940-
OS << " " << ClassByHwMode->getName() << ",\n";
941-
OS << "};\n";
942-
OS << "}\n";
943-
944940
OS << "namespace llvm {\n\n";
945941

946942
OS << "struct " << TargetName << "InstrTable {\n";
@@ -1398,6 +1394,14 @@ void InstrInfoEmitter::emitEnums(
13981394
}
13991395
OS << " INSTRUCTION_LIST_END = " << NumberedInstructions.size() << '\n';
14001396
OS << " };\n";
1397+
1398+
if (!Target.getAllRegClassByHwMode().empty()) {
1399+
OS << " enum RegClassByHwModeUses : uint16_t {\n";
1400+
for (const Record *ClassByHwMode : Target.getAllRegClassByHwMode())
1401+
OS << indent(4) << ClassByHwMode->getName() << ",\n";
1402+
OS << " };\n";
1403+
}
1404+
14011405
OS << "} // end namespace llvm::" << Namespace << '\n';
14021406
OS << "#endif // GET_INSTRINFO_ENUM\n\n";
14031407

0 commit comments

Comments
 (0)