diff --git a/mlir/include/mlir/IR/BuiltinAttributes.h b/mlir/include/mlir/IR/BuiltinAttributes.h --- a/mlir/include/mlir/IR/BuiltinAttributes.h +++ b/mlir/include/mlir/IR/BuiltinAttributes.h @@ -10,6 +10,7 @@ #define MLIR_IR_BUILTINATTRIBUTES_H #include "mlir/IR/Attributes.h" +#include "mlir/IR/Identifier.h" #include "llvm/ADT/APFloat.h" #include "llvm/ADT/Sequence.h" #include diff --git a/mlir/include/mlir/IR/BuiltinAttributes.td b/mlir/include/mlir/IR/BuiltinAttributes.td --- a/mlir/include/mlir/IR/BuiltinAttributes.td +++ b/mlir/include/mlir/IR/BuiltinAttributes.td @@ -114,13 +114,13 @@ public: template - iterator_range> getAsRange() { + iterator_range> getAsRange() const { return llvm::make_range(attr_value_iterator(begin()), attr_value_iterator(end())); } template - auto getAsValueRange() { + auto getAsValueRange() const { return llvm::map_range(getAsRange(), [](AttrTy attr) { return static_cast(attr.getValue()); }); @@ -346,7 +346,11 @@ /// Return the specified attribute if present and is an instance of /// `AttrClass`, null otherwise. template - AttrClass getAs(StringRef name) { + AttrClass getAs(StringRef name) const { + return get(name).dyn_cast_or_null(); + } + template + AttrClass getAs(Identifier name) const { return get(name).dyn_cast_or_null(); }