[MLIR] Mark additional builtin attr methods const
authorFabian Schuiki <fabian@schuiki.ch>
Mon, 7 Jun 2021 15:33:23 +0000 (17:33 +0200)
committerFabian Schuiki <fabian@schuiki.ch>
Tue, 8 Jun 2021 12:45:19 +0000 (14:45 +0200)
* Mark the following methods const:
  * `ArrayAttr::getAsRange`
  * `ArrayAttr::getAsValueRange`
  * `DictionaryAttr::getAs`
* Make `DictionarAttr::getAs` generic over the name class, such that
  `Identifier` and `StringRef` arguments get forwarded to the underlying
  call to `get`. (Made generic to avoid introducing a dependency on
  `include/mlir/IR/Identifier.h` as per the diff discussion.)

Reviewed By: rriddle

Differential Revision: https://reviews.llvm.org/D103822

mlir/include/mlir/IR/BuiltinAttributes.td

index 5d6646b..3d1d77c 100644 (file)
@@ -114,13 +114,13 @@ def Builtin_ArrayAttr : Builtin_Attr<"Array"> {
 
   public:
     template <typename AttrTy>
-    iterator_range<attr_value_iterator<AttrTy>> getAsRange() {
+    iterator_range<attr_value_iterator<AttrTy>> getAsRange() const {
       return llvm::make_range(attr_value_iterator<AttrTy>(begin()),
                               attr_value_iterator<AttrTy>(end()));
     }
     template <typename AttrTy,
               typename UnderlyingTy = typename AttrTy::ValueType>
-    auto getAsValueRange() {
+    auto getAsValueRange() const {
       return llvm::map_range(getAsRange<AttrTy>(), [](AttrTy attr) {
         return static_cast<UnderlyingTy>(attr.getValue());
       });
@@ -345,9 +345,9 @@ def Builtin_DictionaryAttr : Builtin_Attr<"Dictionary"> {
 
     /// Return the specified attribute if present and is an instance of
     /// `AttrClass`, null otherwise.
-    template<typename AttrClass>
-    AttrClass getAs(StringRef name) {
-      return get(name).dyn_cast_or_null<AttrClass>();
+    template<typename AttrClass, typename NameClass>
+    AttrClass getAs(NameClass name) const {
+      return get(name).template dyn_cast_or_null<AttrClass>();
     }
 
   private: