From d09413cdd738e8161611ae7d42ad3d94ac5d1620 Mon Sep 17 00:00:00 2001 From: Rahul Joshi Date: Mon, 9 Sep 2024 05:05:02 -0700 Subject: [PATCH] [TableGen] Migrate CodeGenHWModes to use const RecordKeeper Migrate CodeGenHWModes to use const RecordKeeper and const Record pointers. --- llvm/utils/TableGen/CodeEmitterGen.cpp | 8 ++++---- llvm/utils/TableGen/Common/CodeGenHwModes.cpp | 17 ++++++++-------- llvm/utils/TableGen/Common/CodeGenHwModes.h | 20 +++++++++---------- llvm/utils/TableGen/Common/InfoByHwMode.cpp | 12 ++++++----- llvm/utils/TableGen/Common/InfoByHwMode.h | 12 +++++------ .../TableGen/Common/VarLenCodeEmitterGen.cpp | 4 ++-- 6 files changed, 37 insertions(+), 36 deletions(-) diff --git a/llvm/utils/TableGen/CodeEmitterGen.cpp b/llvm/utils/TableGen/CodeEmitterGen.cpp index 755b819e748fd7..88acd79cab092e 100644 --- a/llvm/utils/TableGen/CodeEmitterGen.cpp +++ b/llvm/utils/TableGen/CodeEmitterGen.cpp @@ -58,7 +58,7 @@ class CodeEmitterGen { int getVariableBit(const std::string &VarName, BitsInit *BI, int bit); std::pair getInstructionCases(Record *R, CodeGenTarget &Target); - void addInstructionCasesForEncoding(Record *R, Record *EncodingDef, + void addInstructionCasesForEncoding(Record *R, const Record *EncodingDef, CodeGenTarget &Target, std::string &Case, std::string &BitOffsetCase); bool addCodeToMergeInOperand(Record *R, BitsInit *BI, @@ -342,8 +342,8 @@ CodeEmitterGen::getInstructionCases(Record *R, CodeGenTarget &Target) { } void CodeEmitterGen::addInstructionCasesForEncoding( - Record *R, Record *EncodingDef, CodeGenTarget &Target, std::string &Case, - std::string &BitOffsetCase) { + Record *R, const Record *EncodingDef, CodeGenTarget &Target, + std::string &Case, std::string &BitOffsetCase) { BitsInit *BI = EncodingDef->getValueAsBitsInit("Inst"); // Loop over all of the fields in the instruction, determining which are the @@ -413,7 +413,7 @@ void CodeEmitterGen::emitInstructionBaseValues( continue; } - Record *EncodingDef = R; + const Record *EncodingDef = R; if (const RecordVal *RV = R->getValue("EncodingInfos")) { if (auto *DI = dyn_cast_or_null(RV->getValue())) { EncodingInfoByHwMode EBM(DI->getDef(), HWM); diff --git a/llvm/utils/TableGen/Common/CodeGenHwModes.cpp b/llvm/utils/TableGen/Common/CodeGenHwModes.cpp index 124cfbaf4fb747..fd2fd33740af4f 100644 --- a/llvm/utils/TableGen/Common/CodeGenHwModes.cpp +++ b/llvm/utils/TableGen/Common/CodeGenHwModes.cpp @@ -18,15 +18,14 @@ using namespace llvm; StringRef CodeGenHwModes::DefaultModeName = "DefaultMode"; -HwMode::HwMode(Record *R) { +HwMode::HwMode(const Record *R) { Name = R->getName(); Features = std::string(R->getValueAsString("Features")); - std::vector PredicateRecs = R->getValueAsListOfDefs("Predicates"); SmallString<128> PredicateCheck; raw_svector_ostream OS(PredicateCheck); ListSeparator LS(" && "); - for (Record *Pred : PredicateRecs) { + for (const Record *Pred : R->getValueAsListOfDefs("Predicates")) { StringRef CondString = Pred->getValueAsString("CondString"); if (CondString.empty()) continue; @@ -39,7 +38,7 @@ HwMode::HwMode(Record *R) { LLVM_DUMP_METHOD void HwMode::dump() const { dbgs() << Name << ": " << Features << '\n'; } -HwModeSelect::HwModeSelect(Record *R, CodeGenHwModes &CGH) { +HwModeSelect::HwModeSelect(const Record *R, CodeGenHwModes &CGH) { std::vector Modes = R->getValueAsListOfDefs("Modes"); std::vector Objects = R->getValueAsListOfDefs("Objects"); if (Modes.size() != Objects.size()) { @@ -64,8 +63,8 @@ void HwModeSelect::dump() const { dbgs() << " }\n"; } -CodeGenHwModes::CodeGenHwModes(RecordKeeper &RK) : Records(RK) { - for (Record *R : Records.getAllDerivedDefinitions("HwMode")) { +CodeGenHwModes::CodeGenHwModes(const RecordKeeper &RK) : Records(RK) { + for (const Record *R : Records.getAllDerivedDefinitions("HwMode")) { // The default mode needs a definition in the .td sources for TableGen // to accept references to it. We need to ignore the definition here. if (R->getName() == DefaultModeName) @@ -76,14 +75,14 @@ CodeGenHwModes::CodeGenHwModes(RecordKeeper &RK) : Records(RK) { assert(Modes.size() <= 32 && "number of HwModes exceeds maximum of 32"); - for (Record *R : Records.getAllDerivedDefinitions("HwModeSelect")) { + for (const Record *R : Records.getAllDerivedDefinitions("HwModeSelect")) { auto P = ModeSelects.emplace(std::pair(R, HwModeSelect(R, *this))); assert(P.second); (void)P; } } -unsigned CodeGenHwModes::getHwModeId(Record *R) const { +unsigned CodeGenHwModes::getHwModeId(const Record *R) const { if (R->getName() == DefaultModeName) return DefaultMode; auto F = ModeIds.find(R); @@ -91,7 +90,7 @@ unsigned CodeGenHwModes::getHwModeId(Record *R) const { return F->second; } -const HwModeSelect &CodeGenHwModes::getHwModeSelect(Record *R) const { +const HwModeSelect &CodeGenHwModes::getHwModeSelect(const Record *R) const { auto F = ModeSelects.find(R); assert(F != ModeSelects.end() && "Record is not a \"mode select\""); return F->second; diff --git a/llvm/utils/TableGen/Common/CodeGenHwModes.h b/llvm/utils/TableGen/Common/CodeGenHwModes.h index 305ee7c42ce1be..4ced4208cea076 100644 --- a/llvm/utils/TableGen/Common/CodeGenHwModes.h +++ b/llvm/utils/TableGen/Common/CodeGenHwModes.h @@ -28,7 +28,7 @@ class RecordKeeper; struct CodeGenHwModes; struct HwMode { - HwMode(Record *R); + HwMode(const Record *R); StringRef Name; std::string Features; std::string Predicates; @@ -36,8 +36,8 @@ struct HwMode { }; struct HwModeSelect { - HwModeSelect(Record *R, CodeGenHwModes &CGH); - typedef std::pair PairType; + HwModeSelect(const Record *R, CodeGenHwModes &CGH); + typedef std::pair PairType; std::vector Items; void dump() const; }; @@ -46,8 +46,8 @@ struct CodeGenHwModes { enum : unsigned { DefaultMode = 0 }; static StringRef DefaultModeName; - CodeGenHwModes(RecordKeeper &R); - unsigned getHwModeId(Record *R) const; + CodeGenHwModes(const RecordKeeper &R); + unsigned getHwModeId(const Record *R) const; const HwMode &getMode(unsigned Id) const { assert(Id != 0 && "Mode id of 0 is reserved for the default mode"); return Modes[Id - 1]; @@ -57,18 +57,18 @@ struct CodeGenHwModes { return DefaultModeName; return getMode(Id).Name; } - const HwModeSelect &getHwModeSelect(Record *R) const; - const std::map &getHwModeSelects() const { + const HwModeSelect &getHwModeSelect(const Record *R) const; + const std::map &getHwModeSelects() const { return ModeSelects; } unsigned getNumModeIds() const { return Modes.size() + 1; } void dump() const; private: - RecordKeeper &Records; - DenseMap ModeIds; // HwMode Record -> HwModeId + const RecordKeeper &Records; + DenseMap ModeIds; // HwMode Record -> HwModeId std::vector Modes; - std::map ModeSelects; + std::map ModeSelects; }; } // namespace llvm diff --git a/llvm/utils/TableGen/Common/InfoByHwMode.cpp b/llvm/utils/TableGen/Common/InfoByHwMode.cpp index cacf4ece667137..7425e7f48c2b03 100644 --- a/llvm/utils/TableGen/Common/InfoByHwMode.cpp +++ b/llvm/utils/TableGen/Common/InfoByHwMode.cpp @@ -115,7 +115,7 @@ ValueTypeByHwMode llvm::getValueTypeByHwMode(Record *Rec, return ValueTypeByHwMode(Rec, llvm::getValueType(Rec)); } -RegSizeInfo::RegSizeInfo(Record *R) { +RegSizeInfo::RegSizeInfo(const Record *R) { RegSize = R->getValueAsInt("RegSize"); SpillSize = R->getValueAsInt("SpillSize"); SpillAlignment = R->getValueAsInt("SpillAlignment"); @@ -136,7 +136,8 @@ void RegSizeInfo::writeToStream(raw_ostream &OS) const { << ']'; } -RegSizeInfoByHwMode::RegSizeInfoByHwMode(Record *R, const CodeGenHwModes &CGH) { +RegSizeInfoByHwMode::RegSizeInfoByHwMode(const Record *R, + const CodeGenHwModes &CGH) { const HwModeSelect &MS = CGH.getHwModeSelect(R); for (const HwModeSelect::PairType &P : MS.Items) { auto I = Map.insert({P.first, RegSizeInfo(P.second)}); @@ -183,12 +184,13 @@ void RegSizeInfoByHwMode::writeToStream(raw_ostream &OS) const { OS << '}'; } -SubRegRange::SubRegRange(Record *R) { +SubRegRange::SubRegRange(const Record *R) { Size = R->getValueAsInt("Size"); Offset = R->getValueAsInt("Offset"); } -SubRegRangeByHwMode::SubRegRangeByHwMode(Record *R, const CodeGenHwModes &CGH) { +SubRegRangeByHwMode::SubRegRangeByHwMode(const Record *R, + const CodeGenHwModes &CGH) { const HwModeSelect &MS = CGH.getHwModeSelect(R); for (const HwModeSelect::PairType &P : MS.Items) { auto I = Map.insert({P.first, SubRegRange(P.second)}); @@ -197,7 +199,7 @@ SubRegRangeByHwMode::SubRegRangeByHwMode(Record *R, const CodeGenHwModes &CGH) { } } -EncodingInfoByHwMode::EncodingInfoByHwMode(Record *R, +EncodingInfoByHwMode::EncodingInfoByHwMode(const Record *R, const CodeGenHwModes &CGH) { const HwModeSelect &MS = CGH.getHwModeSelect(R); for (const HwModeSelect::PairType &P : MS.Items) { diff --git a/llvm/utils/TableGen/Common/InfoByHwMode.h b/llvm/utils/TableGen/Common/InfoByHwMode.h index f614cd5af815b8..a6edf3c90da25b 100644 --- a/llvm/utils/TableGen/Common/InfoByHwMode.h +++ b/llvm/utils/TableGen/Common/InfoByHwMode.h @@ -183,7 +183,7 @@ struct RegSizeInfo { unsigned SpillSize; unsigned SpillAlignment; - RegSizeInfo(Record *R); + RegSizeInfo(const Record *R); RegSizeInfo() = default; bool operator<(const RegSizeInfo &I) const; bool operator==(const RegSizeInfo &I) const { @@ -197,7 +197,7 @@ struct RegSizeInfo { }; struct RegSizeInfoByHwMode : public InfoByHwMode { - RegSizeInfoByHwMode(Record *R, const CodeGenHwModes &CGH); + RegSizeInfoByHwMode(const Record *R, const CodeGenHwModes &CGH); RegSizeInfoByHwMode() = default; bool operator<(const RegSizeInfoByHwMode &VI) const; bool operator==(const RegSizeInfoByHwMode &VI) const; @@ -222,12 +222,12 @@ struct SubRegRange { uint16_t Size; uint16_t Offset; - SubRegRange(Record *R); + SubRegRange(const Record *R); SubRegRange(uint16_t Size, uint16_t Offset) : Size(Size), Offset(Offset) {} }; struct SubRegRangeByHwMode : public InfoByHwMode { - SubRegRangeByHwMode(Record *R, const CodeGenHwModes &CGH); + SubRegRangeByHwMode(const Record *R, const CodeGenHwModes &CGH); SubRegRangeByHwMode(SubRegRange Range) { Map.insert({DefaultMode, Range}); } SubRegRangeByHwMode() = default; @@ -236,8 +236,8 @@ struct SubRegRangeByHwMode : public InfoByHwMode { } }; -struct EncodingInfoByHwMode : public InfoByHwMode { - EncodingInfoByHwMode(Record *R, const CodeGenHwModes &CGH); +struct EncodingInfoByHwMode : public InfoByHwMode { + EncodingInfoByHwMode(const Record *R, const CodeGenHwModes &CGH); EncodingInfoByHwMode() = default; }; diff --git a/llvm/utils/TableGen/Common/VarLenCodeEmitterGen.cpp b/llvm/utils/TableGen/Common/VarLenCodeEmitterGen.cpp index e633dc36e2343b..049bd37dc83e58 100644 --- a/llvm/utils/TableGen/Common/VarLenCodeEmitterGen.cpp +++ b/llvm/utils/TableGen/Common/VarLenCodeEmitterGen.cpp @@ -241,8 +241,8 @@ void VarLenCodeEmitterGen::run(raw_ostream &OS) { for (auto &KV : EBM) { AltEncodingTy Mode = KV.first; Modes.insert({Mode, "_" + HWM.getMode(Mode).Name.str()}); - Record *EncodingDef = KV.second; - RecordVal *RV = EncodingDef->getValue("Inst"); + const Record *EncodingDef = KV.second; + const RecordVal *RV = EncodingDef->getValue("Inst"); DagInit *DI = cast(RV->getValue()); VarLenInsts[R].insert({Mode, VarLenInst(DI, RV)}); }