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