forked from OSchip/llvm-project
rearrange GetIdentifierInfo so that the fast path can be partially inlined into PTHLexer::Lex. This speeds up the user time of PTH -Eonly by another 2ms (4.4%)
llvm-svn: 62454
This commit is contained in:
parent
c57acbc3af
commit
144aacd19e
|
@ -109,7 +109,13 @@ class PTHManager : public IdentifierInfoLookup {
|
|||
|
||||
/// GetIdentifierInfo - Used to reconstruct IdentifierInfo objects from the
|
||||
/// PTH file.
|
||||
IdentifierInfo* GetIdentifierInfo(unsigned);
|
||||
inline IdentifierInfo* GetIdentifierInfo(unsigned PersistentID) {
|
||||
// Check if the IdentifierInfo has already been resolved.
|
||||
if (IdentifierInfo* II = PerIDCache[PersistentID])
|
||||
return II;
|
||||
return LazilyCreateIdentifierInfo(PersistentID);
|
||||
}
|
||||
IdentifierInfo* LazilyCreateIdentifierInfo(unsigned PersistentID);
|
||||
|
||||
public:
|
||||
~PTHManager();
|
||||
|
|
|
@ -596,15 +596,9 @@ PTHManager* PTHManager::Create(const std::string& file) {
|
|||
return new PTHManager(File.take(), FL.take(), IData, PerIDCache,
|
||||
SortedIdTable, NumIds);
|
||||
}
|
||||
|
||||
IdentifierInfo* PTHManager::GetIdentifierInfo(unsigned persistentID) {
|
||||
|
||||
// Check if the IdentifierInfo has already been resolved.
|
||||
IdentifierInfo* II = PerIDCache[persistentID];
|
||||
if (II) return II;
|
||||
|
||||
IdentifierInfo* PTHManager::LazilyCreateIdentifierInfo(unsigned PersistentID) {
|
||||
// Look in the PTH file for the string data for the IdentifierInfo object.
|
||||
const unsigned char* TableEntry = IdDataTable + sizeof(uint32_t)*persistentID;
|
||||
const unsigned char* TableEntry = IdDataTable + sizeof(uint32_t)*PersistentID;
|
||||
const unsigned char* IDData =
|
||||
(const unsigned char*)Buf->getBufferStart() + Read32(TableEntry);
|
||||
assert(IDData < (const unsigned char*)Buf->getBufferEnd());
|
||||
|
@ -614,10 +608,10 @@ IdentifierInfo* PTHManager::GetIdentifierInfo(unsigned persistentID) {
|
|||
Alloc.Allocate<std::pair<IdentifierInfo,const unsigned char*> >();
|
||||
|
||||
Mem->second = IDData;
|
||||
II = new ((void*) Mem) IdentifierInfo(true);
|
||||
IdentifierInfo *II = new ((void*) Mem) IdentifierInfo(true);
|
||||
|
||||
// Store the new IdentifierInfo in the cache.
|
||||
PerIDCache[persistentID] = II;
|
||||
PerIDCache[PersistentID] = II;
|
||||
return II;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue