summaryrefslogtreecommitdiff
path: root/utils/TableGen/InstrInfoEmitter.cpp
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@gmail.com>2012-03-08 06:55:27 +0000
committerCraig Topper <craig.topper@gmail.com>2012-03-08 06:55:27 +0000
commit88d2fa438a5b9feb7da77e4beeaa00944ae4168e (patch)
tree78670ed745845060a34061c675e15f0ba9026d25 /utils/TableGen/InstrInfoEmitter.cpp
parent8c0152f8a557742efddc57c3993c2c0a3a79ca4d (diff)
downloadllvm-88d2fa438a5b9feb7da77e4beeaa00944ae4168e.tar.gz
llvm-88d2fa438a5b9feb7da77e4beeaa00944ae4168e.tar.bz2
llvm-88d2fa438a5b9feb7da77e4beeaa00944ae4168e.tar.xz
Re-commit r152202 hopefully fixing the MSVC linker error.
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@152296 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/InstrInfoEmitter.cpp')
-rw-r--r--utils/TableGen/InstrInfoEmitter.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/utils/TableGen/InstrInfoEmitter.cpp b/utils/TableGen/InstrInfoEmitter.cpp
index 4c4cd18e1c..3706f2d0a7 100644
--- a/utils/TableGen/InstrInfoEmitter.cpp
+++ b/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,8 +259,8 @@ 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 char *" << TargetName << "InstrNameData;\n";
+ OS << "extern const uint16_t " << TargetName << "InstrNameIndices[];\n";
+ OS << "extern const char *const " << TargetName << "InstrNameData;\n";
OS << ClassName << "::" << ClassName << "(int SO, int DO)\n"
<< " : TargetInstrInfoImpl(SO, DO) {\n"
<< " InitMCInstrInfo(" << TargetName << "Insts, "