xref: /llvm-project/mlir/lib/IR/Attributes.cpp (revision 98de5dfe6a8cbb70f21de545acec4710a77294ed)
1792d1c25SRiver Riddle //===- Attributes.cpp - MLIR Affine Expr Classes --------------------------===//
2792d1c25SRiver Riddle //
330857107SMehdi Amini // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
456222a06SMehdi Amini // See https://llvm.org/LICENSE.txt for license information.
556222a06SMehdi Amini // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6792d1c25SRiver Riddle //
756222a06SMehdi Amini //===----------------------------------------------------------------------===//
8792d1c25SRiver Riddle 
9792d1c25SRiver Riddle #include "mlir/IR/Attributes.h"
102e6cd60dSTatiana Shpeisman #include "mlir/IR/Dialect.h"
11792d1c25SRiver Riddle 
12792d1c25SRiver Riddle using namespace mlir;
13792d1c25SRiver Riddle using namespace mlir::detail;
14792d1c25SRiver Riddle 
15b91aea15SRiver Riddle //===----------------------------------------------------------------------===//
1603d136cfSRiver Riddle // AbstractAttribute
1703d136cfSRiver Riddle //===----------------------------------------------------------------------===//
1803d136cfSRiver Riddle 
1903d136cfSRiver Riddle void AbstractAttribute::walkImmediateSubElements(
2003d136cfSRiver Riddle     Attribute attr, function_ref<void(Attribute)> walkAttrsFn,
2103d136cfSRiver Riddle     function_ref<void(Type)> walkTypesFn) const {
2203d136cfSRiver Riddle   walkImmediateSubElementsFn(attr, walkAttrsFn, walkTypesFn);
2303d136cfSRiver Riddle }
2403d136cfSRiver Riddle 
2503d136cfSRiver Riddle Attribute
2603d136cfSRiver Riddle AbstractAttribute::replaceImmediateSubElements(Attribute attr,
2703d136cfSRiver Riddle                                                ArrayRef<Attribute> replAttrs,
2803d136cfSRiver Riddle                                                ArrayRef<Type> replTypes) const {
2903d136cfSRiver Riddle   return replaceImmediateSubElementsFn(attr, replAttrs, replTypes);
3003d136cfSRiver Riddle }
3103d136cfSRiver Riddle 
3203d136cfSRiver Riddle //===----------------------------------------------------------------------===//
33b91aea15SRiver Riddle // Attribute
34b91aea15SRiver Riddle //===----------------------------------------------------------------------===//
35b91aea15SRiver Riddle 
36983e0eeaSRiver Riddle /// Return the context this attribute belongs to.
37fc5cf50eSRiver Riddle MLIRContext *Attribute::getContext() const { return getDialect().getContext(); }
38983e0eeaSRiver Riddle 
3967653d98SRiver Riddle //===----------------------------------------------------------------------===//
40c7cae0e4SRiver Riddle // NamedAttribute
418d5bd823SRiver Riddle //===----------------------------------------------------------------------===//
428d5bd823SRiver Riddle 
430c7890c8SRiver Riddle NamedAttribute::NamedAttribute(StringAttr name, Attribute value)
440c7890c8SRiver Riddle     : name(name), value(value) {
450c7890c8SRiver Riddle   assert(name && value && "expected valid attribute name and value");
46a8919c41SAdrian Kuegel   assert(!name.empty() && "expected valid attribute name");
475eae715aSJacques Pienaar }
480c7890c8SRiver Riddle 
49*98de5dfeSJakub Kuderski NamedAttribute::NamedAttribute(StringRef name, Attribute value) : value(value) {
50*98de5dfeSJakub Kuderski   assert(value && "expected valid attribute value");
51*98de5dfeSJakub Kuderski   assert(!name.empty() && "expected valid attribute name");
52*98de5dfeSJakub Kuderski   this->name = StringAttr::get(value.getContext(), name);
53*98de5dfeSJakub Kuderski }
54*98de5dfeSJakub Kuderski 
55c1fa60b4STres Popp StringAttr NamedAttribute::getName() const {
56c1fa60b4STres Popp   return llvm::cast<StringAttr>(name);
57c1fa60b4STres Popp }
580c7890c8SRiver Riddle 
590c7890c8SRiver Riddle Dialect *NamedAttribute::getNameDialect() const {
600c7890c8SRiver Riddle   return getName().getReferencedDialect();
610c7890c8SRiver Riddle }
620c7890c8SRiver Riddle 
630c7890c8SRiver Riddle void NamedAttribute::setName(StringAttr newName) {
640c7890c8SRiver Riddle   assert(name && "expected valid attribute name");
650c7890c8SRiver Riddle   name = newName;
660c7890c8SRiver Riddle }
670c7890c8SRiver Riddle 
680c7890c8SRiver Riddle bool NamedAttribute::operator<(const NamedAttribute &rhs) const {
690c7890c8SRiver Riddle   return getName().compare(rhs.getName()) < 0;
700c7890c8SRiver Riddle }
710c7890c8SRiver Riddle 
720c7890c8SRiver Riddle bool NamedAttribute::operator<(StringRef rhs) const {
730c7890c8SRiver Riddle   return getName().getValue().compare(rhs) < 0;
745eae715aSJacques Pienaar }
75