mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-04 16:26:46 +00:00
Cleanup/comment IdentifierInfo::get.
- Shaves off a few instructions on x86_64. One notable change: this intentionally stops setting the II->Entry field of IdentifierInfo's retrieved by the ExternalLookup method. This is to maintain the invariant that .getName() has a constant value for any given IdentifierInfo. IRgen currently relies on this; which is quite questionable but will be cleaned up in time. Apologies for the lack of a test case; there really isn't a good way to make one. As IRgen will eventually be fixed to not rely on this, we can survive without one. llvm-svn: 66316
This commit is contained in:
parent
9153f08c74
commit
fc1b80d481
@ -267,24 +267,27 @@ public:
|
||||
HashTable.GetOrCreateValue(NameStart, NameEnd);
|
||||
|
||||
IdentifierInfo *II = Entry.getValue();
|
||||
if (II) return *II;
|
||||
|
||||
if (!II) {
|
||||
while (1) {
|
||||
if (ExternalLookup) {
|
||||
II = ExternalLookup->get(NameStart, NameEnd);
|
||||
if (II) break;
|
||||
}
|
||||
|
||||
void *Mem = getAllocator().Allocate<IdentifierInfo>();
|
||||
II = new (Mem) IdentifierInfo();
|
||||
break;
|
||||
// No entry; if we have an external lookup, look there first.
|
||||
if (ExternalLookup) {
|
||||
II = ExternalLookup->get(NameStart, NameEnd);
|
||||
if (II) {
|
||||
// Cache in the StringMap for subsequent lookups.
|
||||
Entry.setValue(II);
|
||||
return *II;
|
||||
}
|
||||
|
||||
Entry.setValue(II);
|
||||
II->Entry = &Entry;
|
||||
}
|
||||
|
||||
assert(II->Entry != 0);
|
||||
// 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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user