Revert my changes that try to avoid creating StringMap entries for
identifiers. They don't yet work, but will inhibit future optimizations. llvm-svn: 70071
This commit is contained in:
parent
518bd14f2d
commit
6b7bf5a771
|
@ -293,6 +293,34 @@ public:
|
|||
return *II;
|
||||
}
|
||||
|
||||
/// \brief Creates a new IdentifierInfo from the given string.
|
||||
///
|
||||
/// This is a lower-level version of get() that requires that this
|
||||
/// identifier not be known previously and that does not consult an
|
||||
/// external source for identifiers. In particular, external
|
||||
/// identifier sources can use this routine to build IdentifierInfo
|
||||
/// nodes and then introduce additional information about those
|
||||
/// identifiers.
|
||||
IdentifierInfo &CreateIdentifierInfo(const char *NameStart,
|
||||
const char *NameEnd) {
|
||||
llvm::StringMapEntry<IdentifierInfo*> &Entry =
|
||||
HashTable.GetOrCreateValue(NameStart, NameEnd);
|
||||
|
||||
IdentifierInfo *II = Entry.getValue();
|
||||
assert(!II && "IdentifierInfo already exists");
|
||||
|
||||
// Lookups failed, make a new IdentifierInfo.
|
||||
void *Mem = getAllocator().Allocate<IdentifierInfo>();
|
||||
II = new (Mem) IdentifierInfo();
|
||||
Entry.setValue(II);
|
||||
|
||||
// Make sure getName() knows how to find the IdentifierInfo
|
||||
// contents.
|
||||
II->Entry = &Entry;
|
||||
|
||||
return *II;
|
||||
}
|
||||
|
||||
IdentifierInfo &get(const char *Name) {
|
||||
return get(Name, Name+strlen(Name));
|
||||
}
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
#include "llvm/ADT/OwningPtr.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include "llvm/Bitcode/BitstreamReader.h"
|
||||
#include "llvm/Support/Allocator.h"
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
#include <map>
|
||||
#include <string>
|
||||
|
@ -86,9 +85,6 @@ private:
|
|||
/// \brief The bitstream reader from which we'll read the PCH file.
|
||||
llvm::BitstreamReader Stream;
|
||||
|
||||
/// \brief Allocator used for IdentifierInfo objects.
|
||||
llvm::BumpPtrAllocator Alloc;
|
||||
|
||||
/// \brief The file name of the PCH file.
|
||||
std::string FileName;
|
||||
|
||||
|
@ -374,13 +370,6 @@ public:
|
|||
IdentifierInfo *GetIdentifierInfo(const RecordData &Record, unsigned &Idx) {
|
||||
return DecodeIdentifierInfo(Record[Idx++]);
|
||||
}
|
||||
|
||||
/// \brief Builds a new IdentifierInfo object that refers to a
|
||||
/// string stored within the PCH file.
|
||||
///
|
||||
/// \brief Str must be a pointer into the start of a string within
|
||||
/// IdentifierTableData.
|
||||
IdentifierInfo &BuildIdentifierInfoInsidePCH(const unsigned char *Str);
|
||||
|
||||
Selector DecodeSelector(unsigned Idx);
|
||||
|
||||
|
|
|
@ -1245,8 +1245,8 @@ public:
|
|||
static std::pair<unsigned, unsigned>
|
||||
ReadKeyDataLength(const unsigned char*& d) {
|
||||
using namespace clang::io;
|
||||
unsigned DataLen = ReadUnalignedLE16(d);
|
||||
unsigned KeyLen = ReadUnalignedLE16(d);
|
||||
unsigned DataLen = ReadUnalignedLE16(d);
|
||||
return std::make_pair(KeyLen, DataLen);
|
||||
}
|
||||
|
||||
|
@ -1282,7 +1282,8 @@ public:
|
|||
// the new IdentifierInfo.
|
||||
IdentifierInfo *II = KnownII;
|
||||
if (!II)
|
||||
II = &Reader.BuildIdentifierInfoInsidePCH((const unsigned char *)k.first);
|
||||
II = &Reader.getIdentifierTable().CreateIdentifierInfo(
|
||||
k.first, k.first + k.second);
|
||||
Reader.SetIdentifierInfo(ID, II);
|
||||
|
||||
// Set or check the various bits in the IdentifierInfo structure.
|
||||
|
@ -2848,19 +2849,6 @@ IdentifierInfo *PCHReader::DecodeIdentifierInfo(unsigned ID) {
|
|||
return IdentifiersLoaded[ID - 1];
|
||||
}
|
||||
|
||||
IdentifierInfo &
|
||||
PCHReader::BuildIdentifierInfoInsidePCH(const unsigned char *Str) {
|
||||
// Allocate the object.
|
||||
std::pair<IdentifierInfo,const unsigned char*> *Mem =
|
||||
Alloc.Allocate<std::pair<IdentifierInfo,const unsigned char*> >();
|
||||
|
||||
// Build the IdentifierInfo itself.
|
||||
Mem->second = Str;
|
||||
assert(Str[0] != '\0');
|
||||
IdentifierInfo *II = new ((void*) Mem) IdentifierInfo();
|
||||
return *II;
|
||||
}
|
||||
|
||||
Selector PCHReader::DecodeSelector(unsigned ID) {
|
||||
if (ID == 0)
|
||||
return Selector();
|
||||
|
|
|
@ -2013,6 +2013,7 @@ public:
|
|||
EmitKeyDataLength(llvm::raw_ostream& Out, const IdentifierInfo* II,
|
||||
pch::IdentID ID) {
|
||||
unsigned KeyLen = strlen(II->getName()) + 1;
|
||||
clang::io::Emit16(Out, KeyLen);
|
||||
unsigned DataLen = 4 + 4; // 4 bytes for token ID, builtin, flags
|
||||
// 4 bytes for the persistent ID
|
||||
if (II->hasMacroDefinition() &&
|
||||
|
@ -2022,14 +2023,7 @@ public:
|
|||
DEnd = IdentifierResolver::end();
|
||||
D != DEnd; ++D)
|
||||
DataLen += sizeof(pch::DeclID);
|
||||
|
||||
// We emit the data length before the key length, because we want
|
||||
// the key length to immediately precede the actual string
|
||||
// data. This is so that our identifier length + key layout
|
||||
// matches that of the identifier hash table for pretokenized
|
||||
// headers.
|
||||
clang::io::Emit16(Out, DataLen);
|
||||
clang::io::Emit16(Out, KeyLen);
|
||||
return std::make_pair(KeyLen, DataLen);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue