summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mlir/lib/IR/Attributes.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/mlir/lib/IR/Attributes.cpp b/mlir/lib/IR/Attributes.cpp
index 80ac4a59246..5d7a4f08d1e 100644
--- a/mlir/lib/IR/Attributes.cpp
+++ b/mlir/lib/IR/Attributes.cpp
@@ -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())
OpenPOWER on IntegriCloud