From 3c777947f4fdd94f061f8ac4a118a8db03da88a8 Mon Sep 17 00:00:00 2001 From: Chad Rosier Date: Wed, 7 Mar 2012 17:06:40 +0000 Subject: [PATCH] Revert r152202 as it's causing internal buildbot failures. Original commit message: Use uint16_t to store InstrNameIndices in MCInstrInfo. Add asserts to protect all 16-bit string table offsets. Also make sure the string to offset table string is not larger than 65536 characters since larger string literals aren't portable. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152233 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/MC/MCInstrInfo.h | 4 ++-- utils/TableGen/AsmMatcherEmitter.cpp | 18 ++++++++---------- utils/TableGen/AsmWriterEmitter.cpp | 11 +++-------- utils/TableGen/InstrInfoEmitter.cpp | 10 ++++------ utils/TableGen/StringToOffsetTable.h | 3 --- 5 files changed, 17 insertions(+), 29 deletions(-) diff --git a/include/llvm/MC/MCInstrInfo.h b/include/llvm/MC/MCInstrInfo.h index 686d4386aa9..1d3a36ca7c7 100644 --- a/include/llvm/MC/MCInstrInfo.h +++ b/include/llvm/MC/MCInstrInfo.h @@ -25,14 +25,14 @@ namespace llvm { /// class MCInstrInfo { const MCInstrDesc *Desc; // Raw array to allow static init'n - const uint16_t *InstrNameIndices; // Array for name indices in InstrNameData + const unsigned *InstrNameIndices; // Array for name indices in InstrNameData const char *InstrNameData; // Instruction name string pool unsigned NumOpcodes; // Number of entries in the desc array public: /// InitMCInstrInfo - Initialize MCInstrInfo, called by TableGen /// auto-generated routines. *DO NOT USE*. - void InitMCInstrInfo(const MCInstrDesc *D, const uint16_t *NI, const char *ND, + void InitMCInstrInfo(const MCInstrDesc *D, const unsigned *NI, const char *ND, unsigned NO) { Desc = D; InstrNameIndices = NI; diff --git a/utils/TableGen/AsmMatcherEmitter.cpp b/utils/TableGen/AsmMatcherEmitter.cpp index 4afee215234..cdcc496e7d4 100644 --- a/utils/TableGen/AsmMatcherEmitter.cpp +++ b/utils/TableGen/AsmMatcherEmitter.cpp @@ -2023,7 +2023,7 @@ static void EmitCustomOperandParsing(raw_ostream &OS, CodeGenTarget &Target, // Emit the static custom operand parsing table; OS << "namespace {\n"; OS << " struct OperandMatchEntry {\n"; - OS << " static const char *const MnemonicTable;\n"; + OS << " static const char *MnemonicTable;\n"; OS << " unsigned OperandMask;\n"; OS << " uint16_t Mnemonic;\n"; OS << " " << getMinimalTypeForRange(Info.Classes.size()) @@ -2079,9 +2079,8 @@ static void EmitCustomOperandParsing(raw_ostream &OS, CodeGenTarget &Target, // Store a pascal-style length byte in the mnemonic. std::string LenMnemonic = char(II.Mnemonic.size()) + II.Mnemonic.str(); - unsigned Idx = StringTable.GetOrAddStringOffset(LenMnemonic, false); - assert(Idx <= 0xffff && "String offset too large to fit in table"); - OS << ", " << Idx << " /* " << II.Mnemonic << " */"; + OS << ", " << StringTable.GetOrAddStringOffset(LenMnemonic, false) + << " /* " << II.Mnemonic << " */"; OS << ", " << OMI.CI->Name << ", "; @@ -2098,7 +2097,7 @@ static void EmitCustomOperandParsing(raw_ostream &OS, CodeGenTarget &Target, } OS << "};\n\n"; - OS << "const char *const OperandMatchEntry::MnemonicTable =\n"; + OS << "const char *OperandMatchEntry::MnemonicTable =\n"; StringTable.EmitString(OS); OS << ";\n\n"; @@ -2321,7 +2320,7 @@ void AsmMatcherEmitter::run(raw_ostream &OS) { // following the mnemonic. OS << "namespace {\n"; OS << " struct MatchEntry {\n"; - OS << " static const char *const MnemonicTable;\n"; + OS << " static const char *MnemonicTable;\n"; OS << " uint16_t Opcode;\n"; OS << " uint16_t Mnemonic;\n"; OS << " " << getMinimalTypeForRange(Info.Matchables.size()) @@ -2364,11 +2363,10 @@ void AsmMatcherEmitter::run(raw_ostream &OS) { // Store a pascal-style length byte in the mnemonic. std::string LenMnemonic = char(II.Mnemonic.size()) + II.Mnemonic.str(); - unsigned Idx = StringTable.GetOrAddStringOffset(LenMnemonic, false); - assert(Idx <= 0xffff && "String offset too large to fit in table"); OS << " { " << Target.getName() << "::" << II.getResultInst()->TheDef->getName() << ", " - << Idx << " /* " << II.Mnemonic << " */" + << StringTable.GetOrAddStringOffset(LenMnemonic, false) + << " /* " << II.Mnemonic << " */" << ", " << II.ConversionFnKind << ", { "; for (unsigned i = 0, e = II.AsmOperands.size(); i != e; ++i) { MatchableInfo::AsmOperand &Op = II.AsmOperands[i]; @@ -2392,7 +2390,7 @@ void AsmMatcherEmitter::run(raw_ostream &OS) { OS << "};\n\n"; - OS << "const char *const MatchEntry::MnemonicTable =\n"; + OS << "const char *MatchEntry::MnemonicTable =\n"; StringTable.EmitString(OS); OS << ";\n\n"; diff --git a/utils/TableGen/AsmWriterEmitter.cpp b/utils/TableGen/AsmWriterEmitter.cpp index 7671efdde0a..59926a32990 100644 --- a/utils/TableGen/AsmWriterEmitter.cpp +++ b/utils/TableGen/AsmWriterEmitter.cpp @@ -306,7 +306,6 @@ void AsmWriterEmitter::EmitPrintInstruction(raw_ostream &O) { } // Bias offset by one since we want 0 as a sentinel. - assert((Idx+1) <= 0xffff && "String offset too large to fit in table"); OpcodeInfo.push_back(Idx+1); } @@ -374,7 +373,7 @@ void AsmWriterEmitter::EmitPrintInstruction(raw_ostream &O) { O << " };\n\n"; // Emit the string itself. - O << " const char *const AsmStrs = \n"; + O << " const char *AsmStrs = \n"; StringTable.EmitString(O); O << ";\n\n"; @@ -497,9 +496,7 @@ emitRegisterNameString(raw_ostream &O, StringRef AltName, } } - unsigned Idx = StringTable.GetOrAddStringOffset(AsmName); - assert(Idx <= 0xffff && "String offset too large to fit in table"); - O << Idx; + O << StringTable.GetOrAddStringOffset(AsmName); if (((i + 1) % 14) == 0) O << ",\n "; else @@ -594,9 +591,7 @@ void AsmWriterEmitter::EmitGetInstructionName(raw_ostream &O) { if ((i % 14) == 0) O << "\n "; - unsigned Idx = StringTable.GetOrAddStringOffset(AsmName); - assert(Idx <= 0xffff && "String offset too large to fit in table"); - O << Idx << ", "; + O << StringTable.GetOrAddStringOffset(AsmName) << ", "; } O << "0\n" << " };\n" diff --git a/utils/TableGen/InstrInfoEmitter.cpp b/utils/TableGen/InstrInfoEmitter.cpp index b539194f860..4c4cd18e1cc 100644 --- a/utils/TableGen/InstrInfoEmitter.cpp +++ b/utils/TableGen/InstrInfoEmitter.cpp @@ -213,20 +213,18 @@ void InstrInfoEmitter::run(raw_ostream &OS) { OperandInfoIDs, OS); OS << "};\n\n"; - OS << "extern const uint16_t " << TargetName <<"InstrNameIndices[] = {\n "; + OS << "extern const unsigned " << TargetName <<"InstrNameIndices[] = {\n "; StringToOffsetTable StringTable; for (unsigned i = 0, e = NumberedInstructions.size(); i != e; ++i) { const CodeGenInstruction *Instr = NumberedInstructions[i]; - unsigned Idx = StringTable.GetOrAddStringOffset(Instr->TheDef->getName()); - assert(Idx <= 0xffff && "String offset too large to fit in table"); - OS << Idx << "U, "; + OS << StringTable.GetOrAddStringOffset(Instr->TheDef->getName()) << "U, "; if (i % 8 == 0) OS << "\n "; } OS << "\n};\n\n"; - OS << "extern const char *const " << TargetName << "InstrNameData =\n"; + OS << "const char *" << TargetName << "InstrNameData =\n"; StringTable.EmitString(OS); OS << ";\n\n"; @@ -259,7 +257,7 @@ void InstrInfoEmitter::run(raw_ostream &OS) { OS << "namespace llvm {\n"; OS << "extern const MCInstrDesc " << TargetName << "Insts[];\n"; - OS << "extern const uint16_t " << TargetName << "InstrNameIndices[];\n"; + OS << "extern const unsigned " << TargetName << "InstrNameIndices[];\n"; OS << "extern const char *" << TargetName << "InstrNameData;\n"; OS << ClassName << "::" << ClassName << "(int SO, int DO)\n" << " : TargetInstrInfoImpl(SO, DO) {\n" diff --git a/utils/TableGen/StringToOffsetTable.h b/utils/TableGen/StringToOffsetTable.h index 6d528a2b0a7..803f5bd5cf0 100644 --- a/utils/TableGen/StringToOffsetTable.h +++ b/utils/TableGen/StringToOffsetTable.h @@ -40,9 +40,6 @@ public: } void EmitString(raw_ostream &O) { - assert(AggregateString.size() <= 65536 && - "Aggregate string too large to be portable"); - // Escape the string. SmallString<256> Str; raw_svector_ostream(Str).write_escaped(AggregateString); -- 2.34.1