From 9380297bc0dacd02d331cd5cffee115ecf26ae48 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 11 Jan 2004 23:29:26 +0000 Subject: [PATCH] Fix a regression that I introduced yesterday. :( git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10756 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Bytecode/Writer/SlotCalculator.cpp | 24 ++++++++++++++++-------- lib/VMCore/SlotCalculator.cpp | 24 ++++++++++++++++-------- 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/lib/Bytecode/Writer/SlotCalculator.cpp b/lib/Bytecode/Writer/SlotCalculator.cpp index ca87b603ee2..b40d94ea240 100644 --- a/lib/Bytecode/Writer/SlotCalculator.cpp +++ b/lib/Bytecode/Writer/SlotCalculator.cpp @@ -132,24 +132,32 @@ void SlotCalculator::processModule() { // all non-value types are pushed to the end of the type table, giving nice // low numbers to the types that can be used by instructions, thus reducing // the amount of explodage we suffer. - if (!IgnoreNamedNodes && Table[Type::TypeTyID].size() >= 64) { + if (!IgnoreNamedNodes && Table[Type::TypeTyID].size() >= 0/*64*/) { // Scan through the type table moving value types to the start of the table. - TypePlane &Types = Table[Type::TypeTyID]; + TypePlane *Types = &Table[Type::TypeTyID]; unsigned FirstNonValueTypeID = 0; - for (unsigned i = 0, e = Types.size(); i != e; ++i) - if (cast(Types[i])->isFirstClassType() || - cast(Types[i])->isPrimitiveType()) { + for (unsigned i = 0, e = Types->size(); i != e; ++i) + if (cast((*Types)[i])->isFirstClassType() || + cast((*Types)[i])->isPrimitiveType()) { // Check to see if we have to shuffle this type around. If not, don't // do anything. if (i != FirstNonValueTypeID) { + assert(i != Type::TypeTyID && FirstNonValueTypeID != Type::TypeTyID && + "Cannot move around the type plane!"); + // Swap the type ID's. - std::swap(Types[i], Types[FirstNonValueTypeID]); + std::swap((*Types)[i], (*Types)[FirstNonValueTypeID]); // Keep the NodeMap up to date. - std::swap(NodeMap[Types[i]], NodeMap[Types[FirstNonValueTypeID]]); + NodeMap[(*Types)[i]] = i; + NodeMap[(*Types)[FirstNonValueTypeID]] = FirstNonValueTypeID; // When we move a type, make sure to move its value plane as needed. - std::swap(Table[i], Table[FirstNonValueTypeID]); + if (Table.size() > FirstNonValueTypeID) { + if (Table.size() <= i) Table.resize(i+1); + std::swap(Table[i], Table[FirstNonValueTypeID]); + Types = &Table[Type::TypeTyID]; + } } ++FirstNonValueTypeID; } diff --git a/lib/VMCore/SlotCalculator.cpp b/lib/VMCore/SlotCalculator.cpp index ca87b603ee2..b40d94ea240 100644 --- a/lib/VMCore/SlotCalculator.cpp +++ b/lib/VMCore/SlotCalculator.cpp @@ -132,24 +132,32 @@ void SlotCalculator::processModule() { // all non-value types are pushed to the end of the type table, giving nice // low numbers to the types that can be used by instructions, thus reducing // the amount of explodage we suffer. - if (!IgnoreNamedNodes && Table[Type::TypeTyID].size() >= 64) { + if (!IgnoreNamedNodes && Table[Type::TypeTyID].size() >= 0/*64*/) { // Scan through the type table moving value types to the start of the table. - TypePlane &Types = Table[Type::TypeTyID]; + TypePlane *Types = &Table[Type::TypeTyID]; unsigned FirstNonValueTypeID = 0; - for (unsigned i = 0, e = Types.size(); i != e; ++i) - if (cast(Types[i])->isFirstClassType() || - cast(Types[i])->isPrimitiveType()) { + for (unsigned i = 0, e = Types->size(); i != e; ++i) + if (cast((*Types)[i])->isFirstClassType() || + cast((*Types)[i])->isPrimitiveType()) { // Check to see if we have to shuffle this type around. If not, don't // do anything. if (i != FirstNonValueTypeID) { + assert(i != Type::TypeTyID && FirstNonValueTypeID != Type::TypeTyID && + "Cannot move around the type plane!"); + // Swap the type ID's. - std::swap(Types[i], Types[FirstNonValueTypeID]); + std::swap((*Types)[i], (*Types)[FirstNonValueTypeID]); // Keep the NodeMap up to date. - std::swap(NodeMap[Types[i]], NodeMap[Types[FirstNonValueTypeID]]); + NodeMap[(*Types)[i]] = i; + NodeMap[(*Types)[FirstNonValueTypeID]] = FirstNonValueTypeID; // When we move a type, make sure to move its value plane as needed. - std::swap(Table[i], Table[FirstNonValueTypeID]); + if (Table.size() > FirstNonValueTypeID) { + if (Table.size() <= i) Table.resize(i+1); + std::swap(Table[i], Table[FirstNonValueTypeID]); + Types = &Table[Type::TypeTyID]; + } } ++FirstNonValueTypeID; } -- 2.34.1