Skip to content

Commit b594b93

Browse files
authored
[LLVM][TableGen] Change DisassemblerEmitter to use const RecordKeeper (#109177)
Change DisassemblerEmitter to use const RecordKeeper. This is a part of effort to have better const correctness in TableGen backends: https://discourse.llvm.org/t/psa-planned-changes-to-tablegen-getallderiveddefinitions-api-potential-downstream-breakages/81089
1 parent 8a36eb8 commit b594b93

File tree

3 files changed

+12
-18
lines changed

3 files changed

+12
-18
lines changed

llvm/utils/TableGen/DecoderEmitter.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ class DecoderEmitter {
159159
std::vector<EncodingAndInst> NumberedEncodings;
160160

161161
public:
162-
DecoderEmitter(const RecordKeeper &R, const std::string &PredicateNamespace)
162+
DecoderEmitter(const RecordKeeper &R, StringRef PredicateNamespace)
163163
: RK(R), Target(R), PredicateNamespace(PredicateNamespace) {}
164164

165165
// Emit the decoder state machine table.
@@ -180,7 +180,7 @@ class DecoderEmitter {
180180
CodeGenTarget Target;
181181

182182
public:
183-
const std::string &PredicateNamespace;
183+
StringRef PredicateNamespace;
184184
};
185185

186186
} // end anonymous namespace
@@ -2645,11 +2645,7 @@ namespace llvm {
26452645
OS << "\n} // end namespace llvm\n";
26462646
}
26472647

2648-
namespace llvm {
2649-
2650-
void EmitDecoder(RecordKeeper &RK, raw_ostream &OS,
2651-
const std::string &PredicateNamespace) {
2648+
void llvm::EmitDecoder(const RecordKeeper &RK, raw_ostream &OS,
2649+
StringRef PredicateNamespace) {
26522650
DecoderEmitter(RK, PredicateNamespace).run(OS);
26532651
}
2654-
2655-
} // end namespace llvm

llvm/utils/TableGen/DisassemblerEmitter.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -95,19 +95,17 @@ using namespace llvm::X86Disassembler;
9595
/// X86RecognizableInstr.cpp contains the implementation for a single
9696
/// instruction.
9797

98-
static void EmitDisassembler(RecordKeeper &Records, raw_ostream &OS) {
99-
CodeGenTarget Target(Records);
98+
static void EmitDisassembler(const RecordKeeper &Records, raw_ostream &OS) {
99+
const CodeGenTarget Target(Records);
100100
emitSourceFileHeader(" * " + Target.getName().str() + " Disassembler", OS);
101101

102102
// X86 uses a custom disassembler.
103103
if (Target.getName() == "X86") {
104104
DisassemblerTables Tables;
105105

106-
ArrayRef<const CodeGenInstruction *> numberedInstructions =
107-
Target.getInstructionsByEnumValue();
108-
109-
for (unsigned i = 0, e = numberedInstructions.size(); i != e; ++i)
110-
RecognizableInstr::processInstr(Tables, *numberedInstructions[i], i);
106+
for (const auto &[Idx, NumberedInst] :
107+
enumerate(Target.getInstructionsByEnumValue()))
108+
RecognizableInstr::processInstr(Tables, *NumberedInst, Idx);
111109

112110
if (Tables.hasConflicts()) {
113111
PrintError(Target.getTargetRecord()->getLoc(), "Primary decode conflict");
@@ -126,7 +124,7 @@ static void EmitDisassembler(RecordKeeper &Records, raw_ostream &OS) {
126124
return;
127125
}
128126

129-
std::string PredicateNamespace = std::string(Target.getName());
127+
StringRef PredicateNamespace = Target.getName();
130128
if (PredicateNamespace == "Thumb")
131129
PredicateNamespace = "ARM";
132130
EmitDecoder(Records, OS, PredicateNamespace);

llvm/utils/TableGen/TableGenBackends.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ class RecordKeeper;
6464
void EmitMapTable(const RecordKeeper &RK, raw_ostream &OS);
6565

6666
// Defined in DecoderEmitter.cpp
67-
void EmitDecoder(RecordKeeper &RK, raw_ostream &OS,
68-
const std::string &PredicateNamespace);
67+
void EmitDecoder(const RecordKeeper &RK, raw_ostream &OS,
68+
StringRef PredicateNamespace);
6969

7070
} // namespace llvm
7171

0 commit comments

Comments
 (0)