From f6761be50d9fe4beee1a8a9eeedb33e529011f9f Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 14 Sep 2009 01:26:18 +0000 Subject: [PATCH] emit the register table as a massive string to avoid relocations. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81741 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/TableGen/AsmWriterEmitter.cpp | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/utils/TableGen/AsmWriterEmitter.cpp b/utils/TableGen/AsmWriterEmitter.cpp index 8f8f89a79b0..9b8325c3779 100644 --- a/utils/TableGen/AsmWriterEmitter.cpp +++ b/utils/TableGen/AsmWriterEmitter.cpp @@ -767,6 +767,7 @@ void AsmWriterEmitter::EmitGetRegisterName(raw_ostream &O) { std::string ClassName = AsmWriter->getValueAsString("AsmWriterClassName"); const std::vector &Registers = Target.getRegisters(); + StringToOffsetTable StringTable; O << "\n\n/// getRegisterName - This method is automatically generated by tblgen\n" "/// from the register set description. This returns the assembler name\n" @@ -776,19 +777,29 @@ void AsmWriterEmitter::EmitGetRegisterName(raw_ostream &O) { << " assert(RegNo && RegNo < " << (Registers.size()+1) << " && \"Invalid register number!\");\n" << "\n" - << " static const char *const RegAsmNames[] = {\n"; + << " static const unsigned RegAsmOffset[] = {\n "; for (unsigned i = 0, e = Registers.size(); i != e; ++i) { const CodeGenRegister &Reg = Registers[i]; std::string AsmName = Reg.TheDef->getValueAsString("AsmName"); if (AsmName.empty()) AsmName = Reg.getName(); - O << " \"" << AsmName << "\",\n"; + + + if ((i % 16) == 0) + O << "\n "; + + O << StringTable.GetOrAddStringOffset(AsmName) << ", "; } - O << " 0\n" + O << "0\n" << " };\n" - << "\n" - << " return RegAsmNames[RegNo-1];\n" + << "\n"; + + O << " const char *AsmStrs =\n"; + StringTable.EmitString(O); + O << ";\n"; + + O << " return AsmStrs+RegAsmOffset[RegNo-1];\n" << "}\n"; } -- 2.34.1