diff options
| author | Craig Topper <craig.topper@gmail.com> | 2012-03-07 05:17:23 +0000 |
|---|---|---|
| committer | Craig Topper <craig.topper@gmail.com> | 2012-03-07 05:17:23 +0000 |
| commit | 8d68422121c2a40c25935d768c73a02ca5e4f14d (patch) | |
| tree | 55ae6121be0c0122341570f86d7470b94bfab2d3 /llvm/utils/TableGen/InstrInfoEmitter.cpp | |
| parent | da7e7da0cf3dcbb5ebb019209314e64cde3015f3 (diff) | |
| download | bcm5719-llvm-8d68422121c2a40c25935d768c73a02ca5e4f14d.tar.gz bcm5719-llvm-8d68422121c2a40c25935d768c73a02ca5e4f14d.zip | |
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.
llvm-svn: 152202
Diffstat (limited to 'llvm/utils/TableGen/InstrInfoEmitter.cpp')
| -rw-r--r-- | llvm/utils/TableGen/InstrInfoEmitter.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/llvm/utils/TableGen/InstrInfoEmitter.cpp b/llvm/utils/TableGen/InstrInfoEmitter.cpp index 4c4cd18e1cc..b539194f860 100644 --- a/llvm/utils/TableGen/InstrInfoEmitter.cpp +++ b/llvm/utils/TableGen/InstrInfoEmitter.cpp @@ -213,18 +213,20 @@ void InstrInfoEmitter::run(raw_ostream &OS) { OperandInfoIDs, OS); OS << "};\n\n"; - OS << "extern const unsigned " << TargetName <<"InstrNameIndices[] = {\n "; + OS << "extern const uint16_t " << TargetName <<"InstrNameIndices[] = {\n "; StringToOffsetTable StringTable; for (unsigned i = 0, e = NumberedInstructions.size(); i != e; ++i) { const CodeGenInstruction *Instr = NumberedInstructions[i]; - OS << StringTable.GetOrAddStringOffset(Instr->TheDef->getName()) << "U, "; + unsigned Idx = StringTable.GetOrAddStringOffset(Instr->TheDef->getName()); + assert(Idx <= 0xffff && "String offset too large to fit in table"); + OS << Idx << "U, "; if (i % 8 == 0) OS << "\n "; } OS << "\n};\n\n"; - OS << "const char *" << TargetName << "InstrNameData =\n"; + OS << "extern const char *const " << TargetName << "InstrNameData =\n"; StringTable.EmitString(OS); OS << ";\n\n"; @@ -257,7 +259,7 @@ void InstrInfoEmitter::run(raw_ostream &OS) { OS << "namespace llvm {\n"; OS << "extern const MCInstrDesc " << TargetName << "Insts[];\n"; - OS << "extern const unsigned " << TargetName << "InstrNameIndices[];\n"; + OS << "extern const uint16_t " << TargetName << "InstrNameIndices[];\n"; OS << "extern const char *" << TargetName << "InstrNameData;\n"; OS << ClassName << "::" << ClassName << "(int SO, int DO)\n" << " : TargetInstrInfoImpl(SO, DO) {\n" |

