NFC: Change DictionaryAttr::get(StringRef) to use binary search instead of a linear scan.
The elements of a DictionaryAttr are guaranteed to be sorted by name, so we can use a more efficient lookup when searching for an attribute. PiperOrigin-RevId: 280035488
This commit is contained in:
parent
9d985141ef
commit
8082e3a687
|
@ -91,7 +91,7 @@ bool BoolAttr::getValue() const { return getImpl()->value; }
|
|||
/// NamedAttributes.
|
||||
static int compareNamedAttributes(const NamedAttribute *lhs,
|
||||
const NamedAttribute *rhs) {
|
||||
return lhs->first.str().compare(rhs->first.str());
|
||||
return lhs->first.strref().compare(rhs->first.strref());
|
||||
}
|
||||
|
||||
DictionaryAttr DictionaryAttr::get(ArrayRef<NamedAttribute> value,
|
||||
|
@ -155,10 +155,12 @@ ArrayRef<NamedAttribute> DictionaryAttr::getValue() const {
|
|||
|
||||
/// Return the specified attribute if present, null otherwise.
|
||||
Attribute DictionaryAttr::get(StringRef name) const {
|
||||
for (auto elt : getValue())
|
||||
if (elt.first.is(name))
|
||||
return elt.second;
|
||||
return nullptr;
|
||||
ArrayRef<NamedAttribute> values = getValue();
|
||||
auto compare = [](NamedAttribute attr, StringRef name) {
|
||||
return attr.first.strref() < name;
|
||||
};
|
||||
auto it = llvm::lower_bound(values, name, compare);
|
||||
return it != values.end() && it->first.is(name) ? it->second : Attribute();
|
||||
}
|
||||
Attribute DictionaryAttr::get(Identifier name) const {
|
||||
for (auto elt : getValue())
|
||||
|
|
Loading…
Reference in New Issue