From 5b1592b5c50e71d54382a400264f3539a4aad9a1 Mon Sep 17 00:00:00 2001 From: Roman Lebedev Date: Sat, 17 Dec 2022 16:48:07 +0300 Subject: [PATCH] [NFC][llvm-exegesis] LLVMState: only store references to reg/op names We know that the original reference from which we've built these maps will persist, so we do not need to copy the names. --- llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp | 4 ++-- llvm/tools/llvm-exegesis/lib/LlvmState.cpp | 10 ++++++---- llvm/tools/llvm-exegesis/lib/LlvmState.h | 13 +++++++------ 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp b/llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp index 3972bb3..593b41e 100644 --- a/llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp +++ b/llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp @@ -152,8 +152,8 @@ private: const exegesis::LLVMState *State; std::string LastError; raw_string_ostream ErrorStream; - const StringMap &OpcodeNameToOpcodeIdx; - const StringMap &RegNameToRegNo; + const DenseMap &OpcodeNameToOpcodeIdx; + const DenseMap &RegNameToRegNo; }; } // namespace diff --git a/llvm/tools/llvm-exegesis/lib/LlvmState.cpp b/llvm/tools/llvm-exegesis/lib/LlvmState.cpp index 363ef82..d7940ce 100644 --- a/llvm/tools/llvm-exegesis/lib/LlvmState.cpp +++ b/llvm/tools/llvm-exegesis/lib/LlvmState.cpp @@ -100,20 +100,22 @@ std::unique_ptr LLVMState::createTargetMachine() const { Reloc::Model::Static))); } -std::unique_ptr> +std::unique_ptr> LLVMState::createOpcodeNameToOpcodeIdxMapping() const { const MCInstrInfo &InstrInfo = getInstrInfo(); - auto Map = std::make_unique>(InstrInfo.getNumOpcodes()); + auto Map = std::make_unique>( + InstrInfo.getNumOpcodes()); for (unsigned I = 0, E = InstrInfo.getNumOpcodes(); I < E; ++I) (*Map)[InstrInfo.getName(I)] = I; assert(Map->size() == InstrInfo.getNumOpcodes() && "Size prediction failed"); return std::move(Map); } -std::unique_ptr> +std::unique_ptr> LLVMState::createRegNameToRegNoMapping() const { const MCRegisterInfo &RegInfo = getRegInfo(); - auto Map = std::make_unique>(RegInfo.getNumRegs()); + auto Map = + std::make_unique>(RegInfo.getNumRegs()); // Special-case RegNo 0, which would otherwise be spelled as ''. (*Map)[kNoRegister] = 0; for (unsigned I = 1, E = RegInfo.getNumRegs(); I < E; ++I) diff --git a/llvm/tools/llvm-exegesis/lib/LlvmState.h b/llvm/tools/llvm-exegesis/lib/LlvmState.h index f504e02..6039bdb 100644 --- a/llvm/tools/llvm-exegesis/lib/LlvmState.h +++ b/llvm/tools/llvm-exegesis/lib/LlvmState.h @@ -68,21 +68,21 @@ public: const PfmCountersInfo &getPfmCounters() const { return *PfmCounters; } - const StringMap &getOpcodeNameToOpcodeIdxMapping() const { + const DenseMap &getOpcodeNameToOpcodeIdxMapping() const { assert(OpcodeNameToOpcodeIdxMapping); return *OpcodeNameToOpcodeIdxMapping; }; - const StringMap &getRegNameToRegNoMapping() const { + const DenseMap &getRegNameToRegNoMapping() const { assert(RegNameToRegNoMapping); return *RegNameToRegNoMapping; } private: - std::unique_ptr> + std::unique_ptr> createOpcodeNameToOpcodeIdxMapping() const; - std::unique_ptr> + std::unique_ptr> createRegNameToRegNoMapping() const; LLVMState(std::unique_ptr TM, const ExegesisTarget *ET, @@ -93,8 +93,9 @@ private: std::unique_ptr RATC; std::unique_ptr IC; const PfmCountersInfo *PfmCounters; - std::unique_ptr> OpcodeNameToOpcodeIdxMapping; - std::unique_ptr> RegNameToRegNoMapping; + std::unique_ptr> + OpcodeNameToOpcodeIdxMapping; + std::unique_ptr> RegNameToRegNoMapping; }; } // namespace exegesis -- 2.7.4