1c7cae0e4SRiver Riddle //===- BuiltinAttributes.cpp - C Interface to MLIR Builtin Attributes -----===// 2c7cae0e4SRiver Riddle // 3c7cae0e4SRiver Riddle // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4c7cae0e4SRiver Riddle // See https://llvm.org/LICENSE.txt for license information. 5c7cae0e4SRiver Riddle // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6c7cae0e4SRiver Riddle // 7c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 8c7cae0e4SRiver Riddle 9c7cae0e4SRiver Riddle #include "mlir-c/BuiltinAttributes.h" 10fb5a64f0SJacques Pienaar #include "mlir-c/Support.h" 11c7cae0e4SRiver Riddle #include "mlir/CAPI/AffineMap.h" 12c7cae0e4SRiver Riddle #include "mlir/CAPI/IR.h" 13334873feSAmy Wang #include "mlir/CAPI/IntegerSet.h" 14c7cae0e4SRiver Riddle #include "mlir/CAPI/Support.h" 15fb5a64f0SJacques Pienaar #include "mlir/IR/AsmState.h" 16c7cae0e4SRiver Riddle #include "mlir/IR/Attributes.h" 17fb5a64f0SJacques Pienaar #include "mlir/IR/BuiltinAttributes.h" 18c7cae0e4SRiver Riddle #include "mlir/IR/BuiltinTypes.h" 19c7cae0e4SRiver Riddle 20c7cae0e4SRiver Riddle using namespace mlir; 21c7cae0e4SRiver Riddle 227714b405SAart Bik MlirAttribute mlirAttributeGetNull() { return {nullptr}; } 237714b405SAart Bik 24c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 257bfdac0eSAndrew Young // Location attribute. 267bfdac0eSAndrew Young //===----------------------------------------------------------------------===// 277bfdac0eSAndrew Young 287bfdac0eSAndrew Young bool mlirAttributeIsALocation(MlirAttribute attr) { 29c1fa60b4STres Popp return llvm::isa<LocationAttr>(unwrap(attr)); 307bfdac0eSAndrew Young } 317bfdac0eSAndrew Young 327bfdac0eSAndrew Young //===----------------------------------------------------------------------===// 33c7cae0e4SRiver Riddle // Affine map attribute. 34c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 35c7cae0e4SRiver Riddle 36c7cae0e4SRiver Riddle bool mlirAttributeIsAAffineMap(MlirAttribute attr) { 37c1fa60b4STres Popp return llvm::isa<AffineMapAttr>(unwrap(attr)); 38c7cae0e4SRiver Riddle } 39c7cae0e4SRiver Riddle 40c7cae0e4SRiver Riddle MlirAttribute mlirAffineMapAttrGet(MlirAffineMap map) { 41c7cae0e4SRiver Riddle return wrap(AffineMapAttr::get(unwrap(map))); 42c7cae0e4SRiver Riddle } 43c7cae0e4SRiver Riddle 44c7cae0e4SRiver Riddle MlirAffineMap mlirAffineMapAttrGetValue(MlirAttribute attr) { 45c1fa60b4STres Popp return wrap(llvm::cast<AffineMapAttr>(unwrap(attr)).getValue()); 46c7cae0e4SRiver Riddle } 47c7cae0e4SRiver Riddle 489566ee28Smax MlirTypeID mlirAffineMapAttrGetTypeID(void) { 499566ee28Smax return wrap(AffineMapAttr::getTypeID()); 509566ee28Smax } 519566ee28Smax 52c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 53c7cae0e4SRiver Riddle // Array attribute. 54c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 55c7cae0e4SRiver Riddle 56c7cae0e4SRiver Riddle bool mlirAttributeIsAArray(MlirAttribute attr) { 57c1fa60b4STres Popp return llvm::isa<ArrayAttr>(unwrap(attr)); 58c7cae0e4SRiver Riddle } 59c7cae0e4SRiver Riddle 60c7cae0e4SRiver Riddle MlirAttribute mlirArrayAttrGet(MlirContext ctx, intptr_t numElements, 61c7cae0e4SRiver Riddle MlirAttribute const *elements) { 62c7cae0e4SRiver Riddle SmallVector<Attribute, 8> attrs; 63c2c83e97STres Popp return wrap( 64c2c83e97STres Popp ArrayAttr::get(unwrap(ctx), unwrapList(static_cast<size_t>(numElements), 65c2c83e97STres Popp elements, attrs))); 66c7cae0e4SRiver Riddle } 67c7cae0e4SRiver Riddle 68c7cae0e4SRiver Riddle intptr_t mlirArrayAttrGetNumElements(MlirAttribute attr) { 69c1fa60b4STres Popp return static_cast<intptr_t>(llvm::cast<ArrayAttr>(unwrap(attr)).size()); 70c7cae0e4SRiver Riddle } 71c7cae0e4SRiver Riddle 72c7cae0e4SRiver Riddle MlirAttribute mlirArrayAttrGetElement(MlirAttribute attr, intptr_t pos) { 73c1fa60b4STres Popp return wrap(llvm::cast<ArrayAttr>(unwrap(attr)).getValue()[pos]); 74c7cae0e4SRiver Riddle } 75c7cae0e4SRiver Riddle 769566ee28Smax MlirTypeID mlirArrayAttrGetTypeID(void) { return wrap(ArrayAttr::getTypeID()); } 779566ee28Smax 78c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 79c7cae0e4SRiver Riddle // Dictionary attribute. 80c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 81c7cae0e4SRiver Riddle 82c7cae0e4SRiver Riddle bool mlirAttributeIsADictionary(MlirAttribute attr) { 83c1fa60b4STres Popp return llvm::isa<DictionaryAttr>(unwrap(attr)); 84c7cae0e4SRiver Riddle } 85c7cae0e4SRiver Riddle 86c7cae0e4SRiver Riddle MlirAttribute mlirDictionaryAttrGet(MlirContext ctx, intptr_t numElements, 87c7cae0e4SRiver Riddle MlirNamedAttribute const *elements) { 88c7cae0e4SRiver Riddle SmallVector<NamedAttribute, 8> attributes; 89c7cae0e4SRiver Riddle attributes.reserve(numElements); 90c7cae0e4SRiver Riddle for (intptr_t i = 0; i < numElements; ++i) 9192a79dbeSChris Lattner attributes.emplace_back(unwrap(elements[i].name), 92c7cae0e4SRiver Riddle unwrap(elements[i].attribute)); 93c2c83e97STres Popp return wrap(DictionaryAttr::get(unwrap(ctx), attributes)); 94c7cae0e4SRiver Riddle } 95c7cae0e4SRiver Riddle 96c7cae0e4SRiver Riddle intptr_t mlirDictionaryAttrGetNumElements(MlirAttribute attr) { 97c1fa60b4STres Popp return static_cast<intptr_t>(llvm::cast<DictionaryAttr>(unwrap(attr)).size()); 98c7cae0e4SRiver Riddle } 99c7cae0e4SRiver Riddle 100c7cae0e4SRiver Riddle MlirNamedAttribute mlirDictionaryAttrGetElement(MlirAttribute attr, 101c7cae0e4SRiver Riddle intptr_t pos) { 102c7cae0e4SRiver Riddle NamedAttribute attribute = 103c1fa60b4STres Popp llvm::cast<DictionaryAttr>(unwrap(attr)).getValue()[pos]; 1040c7890c8SRiver Riddle return {wrap(attribute.getName()), wrap(attribute.getValue())}; 105c7cae0e4SRiver Riddle } 106c7cae0e4SRiver Riddle 107c7cae0e4SRiver Riddle MlirAttribute mlirDictionaryAttrGetElementByName(MlirAttribute attr, 108c7cae0e4SRiver Riddle MlirStringRef name) { 109c1fa60b4STres Popp return wrap(llvm::cast<DictionaryAttr>(unwrap(attr)).get(unwrap(name))); 110c7cae0e4SRiver Riddle } 111c7cae0e4SRiver Riddle 1129566ee28Smax MlirTypeID mlirDictionaryAttrGetTypeID(void) { 1139566ee28Smax return wrap(DictionaryAttr::getTypeID()); 1149566ee28Smax } 1159566ee28Smax 116c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 117c7cae0e4SRiver Riddle // Floating point attribute. 118c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 119c7cae0e4SRiver Riddle 120c7cae0e4SRiver Riddle bool mlirAttributeIsAFloat(MlirAttribute attr) { 121c1fa60b4STres Popp return llvm::isa<FloatAttr>(unwrap(attr)); 122c7cae0e4SRiver Riddle } 123c7cae0e4SRiver Riddle 124c7cae0e4SRiver Riddle MlirAttribute mlirFloatAttrDoubleGet(MlirContext ctx, MlirType type, 125c7cae0e4SRiver Riddle double value) { 126c7cae0e4SRiver Riddle return wrap(FloatAttr::get(unwrap(type), value)); 127c7cae0e4SRiver Riddle } 128c7cae0e4SRiver Riddle 12906e25d56SRiver Riddle MlirAttribute mlirFloatAttrDoubleGetChecked(MlirLocation loc, MlirType type, 13006e25d56SRiver Riddle double value) { 13106e25d56SRiver Riddle return wrap(FloatAttr::getChecked(unwrap(loc), unwrap(type), value)); 132c7cae0e4SRiver Riddle } 133c7cae0e4SRiver Riddle 134c7cae0e4SRiver Riddle double mlirFloatAttrGetValueDouble(MlirAttribute attr) { 135c1fa60b4STres Popp return llvm::cast<FloatAttr>(unwrap(attr)).getValueAsDouble(); 136c7cae0e4SRiver Riddle } 137c7cae0e4SRiver Riddle 1389566ee28Smax MlirTypeID mlirFloatAttrGetTypeID(void) { return wrap(FloatAttr::getTypeID()); } 1399566ee28Smax 140c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 141c7cae0e4SRiver Riddle // Integer attribute. 142c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 143c7cae0e4SRiver Riddle 144c7cae0e4SRiver Riddle bool mlirAttributeIsAInteger(MlirAttribute attr) { 145c1fa60b4STres Popp return llvm::isa<IntegerAttr>(unwrap(attr)); 146c7cae0e4SRiver Riddle } 147c7cae0e4SRiver Riddle 148c7cae0e4SRiver Riddle MlirAttribute mlirIntegerAttrGet(MlirType type, int64_t value) { 149c7cae0e4SRiver Riddle return wrap(IntegerAttr::get(unwrap(type), value)); 150c7cae0e4SRiver Riddle } 151c7cae0e4SRiver Riddle 152c7cae0e4SRiver Riddle int64_t mlirIntegerAttrGetValueInt(MlirAttribute attr) { 153c1fa60b4STres Popp return llvm::cast<IntegerAttr>(unwrap(attr)).getInt(); 154c7cae0e4SRiver Riddle } 155c7cae0e4SRiver Riddle 156e9db306dSrkayaith int64_t mlirIntegerAttrGetValueSInt(MlirAttribute attr) { 157c1fa60b4STres Popp return llvm::cast<IntegerAttr>(unwrap(attr)).getSInt(); 158e9db306dSrkayaith } 159e9db306dSrkayaith 160e9db306dSrkayaith uint64_t mlirIntegerAttrGetValueUInt(MlirAttribute attr) { 161c1fa60b4STres Popp return llvm::cast<IntegerAttr>(unwrap(attr)).getUInt(); 162e9db306dSrkayaith } 163e9db306dSrkayaith 1649566ee28Smax MlirTypeID mlirIntegerAttrGetTypeID(void) { 1659566ee28Smax return wrap(IntegerAttr::getTypeID()); 1669566ee28Smax } 1679566ee28Smax 168c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 169c7cae0e4SRiver Riddle // Bool attribute. 170c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 171c7cae0e4SRiver Riddle 172c7cae0e4SRiver Riddle bool mlirAttributeIsABool(MlirAttribute attr) { 173c1fa60b4STres Popp return llvm::isa<BoolAttr>(unwrap(attr)); 174c7cae0e4SRiver Riddle } 175c7cae0e4SRiver Riddle 176c7cae0e4SRiver Riddle MlirAttribute mlirBoolAttrGet(MlirContext ctx, int value) { 177c2c83e97STres Popp return wrap(BoolAttr::get(unwrap(ctx), value)); 178c7cae0e4SRiver Riddle } 179c7cae0e4SRiver Riddle 180c7cae0e4SRiver Riddle bool mlirBoolAttrGetValue(MlirAttribute attr) { 181c1fa60b4STres Popp return llvm::cast<BoolAttr>(unwrap(attr)).getValue(); 182c7cae0e4SRiver Riddle } 183c7cae0e4SRiver Riddle 184c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 185c7cae0e4SRiver Riddle // Integer set attribute. 186c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 187c7cae0e4SRiver Riddle 188c7cae0e4SRiver Riddle bool mlirAttributeIsAIntegerSet(MlirAttribute attr) { 189c1fa60b4STres Popp return llvm::isa<IntegerSetAttr>(unwrap(attr)); 190c7cae0e4SRiver Riddle } 191c7cae0e4SRiver Riddle 1929566ee28Smax MlirTypeID mlirIntegerSetAttrGetTypeID(void) { 1939566ee28Smax return wrap(IntegerSetAttr::getTypeID()); 1949566ee28Smax } 1959566ee28Smax 196334873feSAmy Wang MlirAttribute mlirIntegerSetAttrGet(MlirIntegerSet set) { 197334873feSAmy Wang return wrap(IntegerSetAttr::get(unwrap(set))); 198334873feSAmy Wang } 199334873feSAmy Wang 200334873feSAmy Wang MlirIntegerSet mlirIntegerSetAttrGetValue(MlirAttribute attr) { 201334873feSAmy Wang return wrap(llvm::cast<IntegerSetAttr>(unwrap(attr)).getValue()); 202334873feSAmy Wang } 203334873feSAmy Wang 204c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 205c7cae0e4SRiver Riddle // Opaque attribute. 206c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 207c7cae0e4SRiver Riddle 208c7cae0e4SRiver Riddle bool mlirAttributeIsAOpaque(MlirAttribute attr) { 209c1fa60b4STres Popp return llvm::isa<OpaqueAttr>(unwrap(attr)); 210c7cae0e4SRiver Riddle } 211c7cae0e4SRiver Riddle 212c7cae0e4SRiver Riddle MlirAttribute mlirOpaqueAttrGet(MlirContext ctx, MlirStringRef dialectNamespace, 213c7cae0e4SRiver Riddle intptr_t dataLength, const char *data, 214c7cae0e4SRiver Riddle MlirType type) { 215e6260ad0SRiver Riddle return wrap( 216195730a6SRiver Riddle OpaqueAttr::get(StringAttr::get(unwrap(ctx), unwrap(dialectNamespace)), 217c2c83e97STres Popp StringRef(data, dataLength), unwrap(type))); 218c7cae0e4SRiver Riddle } 219c7cae0e4SRiver Riddle 220c7cae0e4SRiver Riddle MlirStringRef mlirOpaqueAttrGetDialectNamespace(MlirAttribute attr) { 221c1fa60b4STres Popp return wrap( 222c1fa60b4STres Popp llvm::cast<OpaqueAttr>(unwrap(attr)).getDialectNamespace().strref()); 223c7cae0e4SRiver Riddle } 224c7cae0e4SRiver Riddle 225c7cae0e4SRiver Riddle MlirStringRef mlirOpaqueAttrGetData(MlirAttribute attr) { 226c1fa60b4STres Popp return wrap(llvm::cast<OpaqueAttr>(unwrap(attr)).getAttrData()); 227c7cae0e4SRiver Riddle } 228c7cae0e4SRiver Riddle 2299566ee28Smax MlirTypeID mlirOpaqueAttrGetTypeID(void) { 2309566ee28Smax return wrap(OpaqueAttr::getTypeID()); 2319566ee28Smax } 2329566ee28Smax 233c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 234c7cae0e4SRiver Riddle // String attribute. 235c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 236c7cae0e4SRiver Riddle 237c7cae0e4SRiver Riddle bool mlirAttributeIsAString(MlirAttribute attr) { 238c1fa60b4STres Popp return llvm::isa<StringAttr>(unwrap(attr)); 239c7cae0e4SRiver Riddle } 240c7cae0e4SRiver Riddle 241c7cae0e4SRiver Riddle MlirAttribute mlirStringAttrGet(MlirContext ctx, MlirStringRef str) { 242120591e1SRiver Riddle return wrap((Attribute)StringAttr::get(unwrap(ctx), unwrap(str))); 243c7cae0e4SRiver Riddle } 244c7cae0e4SRiver Riddle 245c7cae0e4SRiver Riddle MlirAttribute mlirStringAttrTypedGet(MlirType type, MlirStringRef str) { 246120591e1SRiver Riddle return wrap((Attribute)StringAttr::get(unwrap(str), unwrap(type))); 247c7cae0e4SRiver Riddle } 248c7cae0e4SRiver Riddle 249c7cae0e4SRiver Riddle MlirStringRef mlirStringAttrGetValue(MlirAttribute attr) { 250c1fa60b4STres Popp return wrap(llvm::cast<StringAttr>(unwrap(attr)).getValue()); 251c7cae0e4SRiver Riddle } 252c7cae0e4SRiver Riddle 2539566ee28Smax MlirTypeID mlirStringAttrGetTypeID(void) { 2549566ee28Smax return wrap(StringAttr::getTypeID()); 2559566ee28Smax } 2569566ee28Smax 257c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 258c7cae0e4SRiver Riddle // SymbolRef attribute. 259c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 260c7cae0e4SRiver Riddle 261c7cae0e4SRiver Riddle bool mlirAttributeIsASymbolRef(MlirAttribute attr) { 262c1fa60b4STres Popp return llvm::isa<SymbolRefAttr>(unwrap(attr)); 263c7cae0e4SRiver Riddle } 264c7cae0e4SRiver Riddle 265c7cae0e4SRiver Riddle MlirAttribute mlirSymbolRefAttrGet(MlirContext ctx, MlirStringRef symbol, 266c7cae0e4SRiver Riddle intptr_t numReferences, 267c7cae0e4SRiver Riddle MlirAttribute const *references) { 268c7cae0e4SRiver Riddle SmallVector<FlatSymbolRefAttr, 4> refs; 269c7cae0e4SRiver Riddle refs.reserve(numReferences); 270c7cae0e4SRiver Riddle for (intptr_t i = 0; i < numReferences; ++i) 271c1fa60b4STres Popp refs.push_back(llvm::cast<FlatSymbolRefAttr>(unwrap(references[i]))); 27241d4aa7dSChris Lattner auto symbolAttr = StringAttr::get(unwrap(ctx), unwrap(symbol)); 27341d4aa7dSChris Lattner return wrap(SymbolRefAttr::get(symbolAttr, refs)); 274c7cae0e4SRiver Riddle } 275c7cae0e4SRiver Riddle 276c7cae0e4SRiver Riddle MlirStringRef mlirSymbolRefAttrGetRootReference(MlirAttribute attr) { 277c1fa60b4STres Popp return wrap( 278c1fa60b4STres Popp llvm::cast<SymbolRefAttr>(unwrap(attr)).getRootReference().getValue()); 279c7cae0e4SRiver Riddle } 280c7cae0e4SRiver Riddle 281c7cae0e4SRiver Riddle MlirStringRef mlirSymbolRefAttrGetLeafReference(MlirAttribute attr) { 282c1fa60b4STres Popp return wrap( 283c1fa60b4STres Popp llvm::cast<SymbolRefAttr>(unwrap(attr)).getLeafReference().getValue()); 284c7cae0e4SRiver Riddle } 285c7cae0e4SRiver Riddle 286c7cae0e4SRiver Riddle intptr_t mlirSymbolRefAttrGetNumNestedReferences(MlirAttribute attr) { 287c7cae0e4SRiver Riddle return static_cast<intptr_t>( 288c1fa60b4STres Popp llvm::cast<SymbolRefAttr>(unwrap(attr)).getNestedReferences().size()); 289c7cae0e4SRiver Riddle } 290c7cae0e4SRiver Riddle 291c7cae0e4SRiver Riddle MlirAttribute mlirSymbolRefAttrGetNestedReference(MlirAttribute attr, 292c7cae0e4SRiver Riddle intptr_t pos) { 293c1fa60b4STres Popp return wrap( 294c1fa60b4STres Popp llvm::cast<SymbolRefAttr>(unwrap(attr)).getNestedReferences()[pos]); 295c7cae0e4SRiver Riddle } 296c7cae0e4SRiver Riddle 2979566ee28Smax MlirTypeID mlirSymbolRefAttrGetTypeID(void) { 2989566ee28Smax return wrap(SymbolRefAttr::getTypeID()); 2999566ee28Smax } 3009566ee28Smax 3013714f937SEdgar MlirAttribute mlirDisctinctAttrCreate(MlirAttribute referencedAttr) { 3023714f937SEdgar return wrap(mlir::DistinctAttr::create(unwrap(referencedAttr))); 3033714f937SEdgar } 3043714f937SEdgar 305c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 306c7cae0e4SRiver Riddle // Flat SymbolRef attribute. 307c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 308c7cae0e4SRiver Riddle 309c7cae0e4SRiver Riddle bool mlirAttributeIsAFlatSymbolRef(MlirAttribute attr) { 310c1fa60b4STres Popp return llvm::isa<FlatSymbolRefAttr>(unwrap(attr)); 311c7cae0e4SRiver Riddle } 312c7cae0e4SRiver Riddle 313c7cae0e4SRiver Riddle MlirAttribute mlirFlatSymbolRefAttrGet(MlirContext ctx, MlirStringRef symbol) { 314c2c83e97STres Popp return wrap(FlatSymbolRefAttr::get(unwrap(ctx), unwrap(symbol))); 315c7cae0e4SRiver Riddle } 316c7cae0e4SRiver Riddle 317c7cae0e4SRiver Riddle MlirStringRef mlirFlatSymbolRefAttrGetValue(MlirAttribute attr) { 318c1fa60b4STres Popp return wrap(llvm::cast<FlatSymbolRefAttr>(unwrap(attr)).getValue()); 319c7cae0e4SRiver Riddle } 320c7cae0e4SRiver Riddle 321c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 322c7cae0e4SRiver Riddle // Type attribute. 323c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 324c7cae0e4SRiver Riddle 325c7cae0e4SRiver Riddle bool mlirAttributeIsAType(MlirAttribute attr) { 326c1fa60b4STres Popp return llvm::isa<TypeAttr>(unwrap(attr)); 327c7cae0e4SRiver Riddle } 328c7cae0e4SRiver Riddle 329c7cae0e4SRiver Riddle MlirAttribute mlirTypeAttrGet(MlirType type) { 330c7cae0e4SRiver Riddle return wrap(TypeAttr::get(unwrap(type))); 331c7cae0e4SRiver Riddle } 332c7cae0e4SRiver Riddle 333c7cae0e4SRiver Riddle MlirType mlirTypeAttrGetValue(MlirAttribute attr) { 334c1fa60b4STres Popp return wrap(llvm::cast<TypeAttr>(unwrap(attr)).getValue()); 335c7cae0e4SRiver Riddle } 336c7cae0e4SRiver Riddle 3379566ee28Smax MlirTypeID mlirTypeAttrGetTypeID(void) { return wrap(TypeAttr::getTypeID()); } 3389566ee28Smax 339c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 340c7cae0e4SRiver Riddle // Unit attribute. 341c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 342c7cae0e4SRiver Riddle 343c7cae0e4SRiver Riddle bool mlirAttributeIsAUnit(MlirAttribute attr) { 344c1fa60b4STres Popp return llvm::isa<UnitAttr>(unwrap(attr)); 345c7cae0e4SRiver Riddle } 346c7cae0e4SRiver Riddle 347c7cae0e4SRiver Riddle MlirAttribute mlirUnitAttrGet(MlirContext ctx) { 348c7cae0e4SRiver Riddle return wrap(UnitAttr::get(unwrap(ctx))); 349c7cae0e4SRiver Riddle } 350c7cae0e4SRiver Riddle 3519566ee28Smax MlirTypeID mlirUnitAttrGetTypeID(void) { return wrap(UnitAttr::getTypeID()); } 3529566ee28Smax 353c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 354c7cae0e4SRiver Riddle // Elements attributes. 355c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 356c7cae0e4SRiver Riddle 357c7cae0e4SRiver Riddle bool mlirAttributeIsAElements(MlirAttribute attr) { 358c1fa60b4STres Popp return llvm::isa<ElementsAttr>(unwrap(attr)); 359c7cae0e4SRiver Riddle } 360c7cae0e4SRiver Riddle 361c7cae0e4SRiver Riddle MlirAttribute mlirElementsAttrGetValue(MlirAttribute attr, intptr_t rank, 362c7cae0e4SRiver Riddle uint64_t *idxs) { 363c1fa60b4STres Popp return wrap(llvm::cast<ElementsAttr>(unwrap(attr)) 364984b800aSserge-sans-paille .getValues<Attribute>()[llvm::ArrayRef(idxs, rank)]); 365c7cae0e4SRiver Riddle } 366c7cae0e4SRiver Riddle 367c7cae0e4SRiver Riddle bool mlirElementsAttrIsValidIndex(MlirAttribute attr, intptr_t rank, 368c7cae0e4SRiver Riddle uint64_t *idxs) { 369c1fa60b4STres Popp return llvm::cast<ElementsAttr>(unwrap(attr)) 370c1fa60b4STres Popp .isValidIndex(llvm::ArrayRef(idxs, rank)); 371c7cae0e4SRiver Riddle } 372c7cae0e4SRiver Riddle 373c7cae0e4SRiver Riddle int64_t mlirElementsAttrGetNumElements(MlirAttribute attr) { 374c1fa60b4STres Popp return llvm::cast<ElementsAttr>(unwrap(attr)).getNumElements(); 375c7cae0e4SRiver Riddle } 376c7cae0e4SRiver Riddle 377c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 378619fd8c2SJeff Niu // Dense array attribute. 379619fd8c2SJeff Niu //===----------------------------------------------------------------------===// 380619fd8c2SJeff Niu 3819566ee28Smax MlirTypeID mlirDenseArrayAttrGetTypeID() { 3829566ee28Smax return wrap(DenseArrayAttr::getTypeID()); 3839566ee28Smax } 3849566ee28Smax 385619fd8c2SJeff Niu //===----------------------------------------------------------------------===// 386619fd8c2SJeff Niu // IsA support. 3879566ee28Smax //===----------------------------------------------------------------------===// 388619fd8c2SJeff Niu 389619fd8c2SJeff Niu bool mlirAttributeIsADenseBoolArray(MlirAttribute attr) { 390c1fa60b4STres Popp return llvm::isa<DenseBoolArrayAttr>(unwrap(attr)); 391619fd8c2SJeff Niu } 392619fd8c2SJeff Niu bool mlirAttributeIsADenseI8Array(MlirAttribute attr) { 393c1fa60b4STres Popp return llvm::isa<DenseI8ArrayAttr>(unwrap(attr)); 394619fd8c2SJeff Niu } 395619fd8c2SJeff Niu bool mlirAttributeIsADenseI16Array(MlirAttribute attr) { 396c1fa60b4STres Popp return llvm::isa<DenseI16ArrayAttr>(unwrap(attr)); 397619fd8c2SJeff Niu } 398619fd8c2SJeff Niu bool mlirAttributeIsADenseI32Array(MlirAttribute attr) { 399c1fa60b4STres Popp return llvm::isa<DenseI32ArrayAttr>(unwrap(attr)); 400619fd8c2SJeff Niu } 401619fd8c2SJeff Niu bool mlirAttributeIsADenseI64Array(MlirAttribute attr) { 402c1fa60b4STres Popp return llvm::isa<DenseI64ArrayAttr>(unwrap(attr)); 403619fd8c2SJeff Niu } 404619fd8c2SJeff Niu bool mlirAttributeIsADenseF32Array(MlirAttribute attr) { 405c1fa60b4STres Popp return llvm::isa<DenseF32ArrayAttr>(unwrap(attr)); 406619fd8c2SJeff Niu } 407619fd8c2SJeff Niu bool mlirAttributeIsADenseF64Array(MlirAttribute attr) { 408c1fa60b4STres Popp return llvm::isa<DenseF64ArrayAttr>(unwrap(attr)); 409619fd8c2SJeff Niu } 410619fd8c2SJeff Niu 411619fd8c2SJeff Niu //===----------------------------------------------------------------------===// 412619fd8c2SJeff Niu // Constructors. 4139566ee28Smax //===----------------------------------------------------------------------===// 414619fd8c2SJeff Niu 415619fd8c2SJeff Niu MlirAttribute mlirDenseBoolArrayGet(MlirContext ctx, intptr_t size, 416619fd8c2SJeff Niu int const *values) { 417619fd8c2SJeff Niu SmallVector<bool, 4> elements(values, values + size); 418619fd8c2SJeff Niu return wrap(DenseBoolArrayAttr::get(unwrap(ctx), elements)); 419619fd8c2SJeff Niu } 420619fd8c2SJeff Niu MlirAttribute mlirDenseI8ArrayGet(MlirContext ctx, intptr_t size, 421619fd8c2SJeff Niu int8_t const *values) { 422619fd8c2SJeff Niu return wrap( 423619fd8c2SJeff Niu DenseI8ArrayAttr::get(unwrap(ctx), ArrayRef<int8_t>(values, size))); 424619fd8c2SJeff Niu } 425619fd8c2SJeff Niu MlirAttribute mlirDenseI16ArrayGet(MlirContext ctx, intptr_t size, 426619fd8c2SJeff Niu int16_t const *values) { 427619fd8c2SJeff Niu return wrap( 428619fd8c2SJeff Niu DenseI16ArrayAttr::get(unwrap(ctx), ArrayRef<int16_t>(values, size))); 429619fd8c2SJeff Niu } 430619fd8c2SJeff Niu MlirAttribute mlirDenseI32ArrayGet(MlirContext ctx, intptr_t size, 431619fd8c2SJeff Niu int32_t const *values) { 432619fd8c2SJeff Niu return wrap( 433619fd8c2SJeff Niu DenseI32ArrayAttr::get(unwrap(ctx), ArrayRef<int32_t>(values, size))); 434619fd8c2SJeff Niu } 435619fd8c2SJeff Niu MlirAttribute mlirDenseI64ArrayGet(MlirContext ctx, intptr_t size, 436619fd8c2SJeff Niu int64_t const *values) { 437619fd8c2SJeff Niu return wrap( 438619fd8c2SJeff Niu DenseI64ArrayAttr::get(unwrap(ctx), ArrayRef<int64_t>(values, size))); 439619fd8c2SJeff Niu } 440619fd8c2SJeff Niu MlirAttribute mlirDenseF32ArrayGet(MlirContext ctx, intptr_t size, 441619fd8c2SJeff Niu float const *values) { 442619fd8c2SJeff Niu return wrap( 443619fd8c2SJeff Niu DenseF32ArrayAttr::get(unwrap(ctx), ArrayRef<float>(values, size))); 444619fd8c2SJeff Niu } 445619fd8c2SJeff Niu MlirAttribute mlirDenseF64ArrayGet(MlirContext ctx, intptr_t size, 446619fd8c2SJeff Niu double const *values) { 447619fd8c2SJeff Niu return wrap( 448619fd8c2SJeff Niu DenseF64ArrayAttr::get(unwrap(ctx), ArrayRef<double>(values, size))); 449619fd8c2SJeff Niu } 450619fd8c2SJeff Niu 451619fd8c2SJeff Niu //===----------------------------------------------------------------------===// 452619fd8c2SJeff Niu // Accessors. 4539566ee28Smax //===----------------------------------------------------------------------===// 454619fd8c2SJeff Niu 455619fd8c2SJeff Niu intptr_t mlirDenseArrayGetNumElements(MlirAttribute attr) { 456c1fa60b4STres Popp return llvm::cast<DenseArrayAttr>(unwrap(attr)).size(); 457619fd8c2SJeff Niu } 458619fd8c2SJeff Niu 459619fd8c2SJeff Niu //===----------------------------------------------------------------------===// 460619fd8c2SJeff Niu // Indexed accessors. 4619566ee28Smax //===----------------------------------------------------------------------===// 462619fd8c2SJeff Niu 463619fd8c2SJeff Niu bool mlirDenseBoolArrayGetElement(MlirAttribute attr, intptr_t pos) { 464c1fa60b4STres Popp return llvm::cast<DenseBoolArrayAttr>(unwrap(attr))[pos]; 465619fd8c2SJeff Niu } 466619fd8c2SJeff Niu int8_t mlirDenseI8ArrayGetElement(MlirAttribute attr, intptr_t pos) { 467c1fa60b4STres Popp return llvm::cast<DenseI8ArrayAttr>(unwrap(attr))[pos]; 468619fd8c2SJeff Niu } 469619fd8c2SJeff Niu int16_t mlirDenseI16ArrayGetElement(MlirAttribute attr, intptr_t pos) { 470c1fa60b4STres Popp return llvm::cast<DenseI16ArrayAttr>(unwrap(attr))[pos]; 471619fd8c2SJeff Niu } 472619fd8c2SJeff Niu int32_t mlirDenseI32ArrayGetElement(MlirAttribute attr, intptr_t pos) { 473c1fa60b4STres Popp return llvm::cast<DenseI32ArrayAttr>(unwrap(attr))[pos]; 474619fd8c2SJeff Niu } 475619fd8c2SJeff Niu int64_t mlirDenseI64ArrayGetElement(MlirAttribute attr, intptr_t pos) { 476c1fa60b4STres Popp return llvm::cast<DenseI64ArrayAttr>(unwrap(attr))[pos]; 477619fd8c2SJeff Niu } 478619fd8c2SJeff Niu float mlirDenseF32ArrayGetElement(MlirAttribute attr, intptr_t pos) { 479c1fa60b4STres Popp return llvm::cast<DenseF32ArrayAttr>(unwrap(attr))[pos]; 480619fd8c2SJeff Niu } 481619fd8c2SJeff Niu double mlirDenseF64ArrayGetElement(MlirAttribute attr, intptr_t pos) { 482c1fa60b4STres Popp return llvm::cast<DenseF64ArrayAttr>(unwrap(attr))[pos]; 483619fd8c2SJeff Niu } 484619fd8c2SJeff Niu 485619fd8c2SJeff Niu //===----------------------------------------------------------------------===// 486c7cae0e4SRiver Riddle // Dense elements attribute. 487c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 488c7cae0e4SRiver Riddle 489c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 490c7cae0e4SRiver Riddle // IsA support. 4919566ee28Smax //===----------------------------------------------------------------------===// 492c7cae0e4SRiver Riddle 493c7cae0e4SRiver Riddle bool mlirAttributeIsADenseElements(MlirAttribute attr) { 494c1fa60b4STres Popp return llvm::isa<DenseElementsAttr>(unwrap(attr)); 495c7cae0e4SRiver Riddle } 4969566ee28Smax 497c7cae0e4SRiver Riddle bool mlirAttributeIsADenseIntElements(MlirAttribute attr) { 498c1fa60b4STres Popp return llvm::isa<DenseIntElementsAttr>(unwrap(attr)); 499c7cae0e4SRiver Riddle } 5009566ee28Smax 501c7cae0e4SRiver Riddle bool mlirAttributeIsADenseFPElements(MlirAttribute attr) { 502c1fa60b4STres Popp return llvm::isa<DenseFPElementsAttr>(unwrap(attr)); 503c7cae0e4SRiver Riddle } 504c7cae0e4SRiver Riddle 5059566ee28Smax MlirTypeID mlirDenseIntOrFPElementsAttrGetTypeID(void) { 5069566ee28Smax return wrap(DenseIntOrFPElementsAttr::getTypeID()); 5079566ee28Smax } 5089566ee28Smax 509c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 510c7cae0e4SRiver Riddle // Constructors. 5119566ee28Smax //===----------------------------------------------------------------------===// 512c7cae0e4SRiver Riddle 513c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrGet(MlirType shapedType, 514c7cae0e4SRiver Riddle intptr_t numElements, 515c7cae0e4SRiver Riddle MlirAttribute const *elements) { 516c7cae0e4SRiver Riddle SmallVector<Attribute, 8> attributes; 517c7cae0e4SRiver Riddle return wrap( 518c1fa60b4STres Popp DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)), 519c7cae0e4SRiver Riddle unwrapList(numElements, elements, attributes))); 520c7cae0e4SRiver Riddle } 521c7cae0e4SRiver Riddle 5225d6d30edSStella Laurenzo MlirAttribute mlirDenseElementsAttrRawBufferGet(MlirType shapedType, 5235d6d30edSStella Laurenzo size_t rawBufferSize, 5245d6d30edSStella Laurenzo const void *rawBuffer) { 525c1fa60b4STres Popp auto shapedTypeCpp = llvm::cast<ShapedType>(unwrap(shapedType)); 5265d6d30edSStella Laurenzo ArrayRef<char> rawBufferCpp(static_cast<const char *>(rawBuffer), 5275d6d30edSStella Laurenzo rawBufferSize); 5285d6d30edSStella Laurenzo bool isSplat = false; 5295d6d30edSStella Laurenzo if (!DenseElementsAttr::isValidRawBuffer(shapedTypeCpp, rawBufferCpp, 530f21896f2SChris Lattner isSplat)) 5315d6d30edSStella Laurenzo return mlirAttributeGetNull(); 532f21896f2SChris Lattner return wrap(DenseElementsAttr::getFromRawBuffer(shapedTypeCpp, rawBufferCpp)); 5335d6d30edSStella Laurenzo } 5345d6d30edSStella Laurenzo 535c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrSplatGet(MlirType shapedType, 536c7cae0e4SRiver Riddle MlirAttribute element) { 537c1fa60b4STres Popp return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)), 538c7cae0e4SRiver Riddle unwrap(element))); 539c7cae0e4SRiver Riddle } 540c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrBoolSplatGet(MlirType shapedType, 541c7cae0e4SRiver Riddle bool element) { 542c1fa60b4STres Popp return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)), 543c1fa60b4STres Popp element)); 544c7cae0e4SRiver Riddle } 54535454268SSean Silva MlirAttribute mlirDenseElementsAttrUInt8SplatGet(MlirType shapedType, 54635454268SSean Silva uint8_t element) { 547c1fa60b4STres Popp return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)), 548c1fa60b4STres Popp element)); 54935454268SSean Silva } 55035454268SSean Silva MlirAttribute mlirDenseElementsAttrInt8SplatGet(MlirType shapedType, 55135454268SSean Silva int8_t element) { 552c1fa60b4STres Popp return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)), 553c1fa60b4STres Popp element)); 55435454268SSean Silva } 555c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrUInt32SplatGet(MlirType shapedType, 556c7cae0e4SRiver Riddle uint32_t element) { 557c1fa60b4STres Popp return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)), 558c1fa60b4STres Popp element)); 559c7cae0e4SRiver Riddle } 560c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrInt32SplatGet(MlirType shapedType, 561c7cae0e4SRiver Riddle int32_t element) { 562c1fa60b4STres Popp return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)), 563c1fa60b4STres Popp element)); 564c7cae0e4SRiver Riddle } 565c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrUInt64SplatGet(MlirType shapedType, 566c7cae0e4SRiver Riddle uint64_t element) { 567c1fa60b4STres Popp return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)), 568c1fa60b4STres Popp element)); 569c7cae0e4SRiver Riddle } 570c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrInt64SplatGet(MlirType shapedType, 571c7cae0e4SRiver Riddle int64_t element) { 572c1fa60b4STres Popp return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)), 573c1fa60b4STres Popp element)); 574c7cae0e4SRiver Riddle } 575c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrFloatSplatGet(MlirType shapedType, 576c7cae0e4SRiver Riddle float element) { 577c1fa60b4STres Popp return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)), 578c1fa60b4STres Popp element)); 579c7cae0e4SRiver Riddle } 580c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrDoubleSplatGet(MlirType shapedType, 581c7cae0e4SRiver Riddle double element) { 582c1fa60b4STres Popp return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)), 583c1fa60b4STres Popp element)); 584c7cae0e4SRiver Riddle } 585c7cae0e4SRiver Riddle 586c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrBoolGet(MlirType shapedType, 587c7cae0e4SRiver Riddle intptr_t numElements, 588c7cae0e4SRiver Riddle const int *elements) { 589c7cae0e4SRiver Riddle SmallVector<bool, 8> values(elements, elements + numElements); 590c1fa60b4STres Popp return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)), 591c1fa60b4STres Popp values)); 592c7cae0e4SRiver Riddle } 593c7cae0e4SRiver Riddle 594c7cae0e4SRiver Riddle /// Creates a dense attribute with elements of the type deduced by templates. 595c7cae0e4SRiver Riddle template <typename T> 596c7cae0e4SRiver Riddle static MlirAttribute getDenseAttribute(MlirType shapedType, 597c7cae0e4SRiver Riddle intptr_t numElements, 598c7cae0e4SRiver Riddle const T *elements) { 599c1fa60b4STres Popp return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)), 600984b800aSserge-sans-paille llvm::ArrayRef(elements, numElements))); 601c7cae0e4SRiver Riddle } 602c7cae0e4SRiver Riddle 60335454268SSean Silva MlirAttribute mlirDenseElementsAttrUInt8Get(MlirType shapedType, 60435454268SSean Silva intptr_t numElements, 60535454268SSean Silva const uint8_t *elements) { 60635454268SSean Silva return getDenseAttribute(shapedType, numElements, elements); 60735454268SSean Silva } 60835454268SSean Silva MlirAttribute mlirDenseElementsAttrInt8Get(MlirType shapedType, 60935454268SSean Silva intptr_t numElements, 61035454268SSean Silva const int8_t *elements) { 61135454268SSean Silva return getDenseAttribute(shapedType, numElements, elements); 61235454268SSean Silva } 613308d8b8cSRahul Kayaith MlirAttribute mlirDenseElementsAttrUInt16Get(MlirType shapedType, 614308d8b8cSRahul Kayaith intptr_t numElements, 615308d8b8cSRahul Kayaith const uint16_t *elements) { 616308d8b8cSRahul Kayaith return getDenseAttribute(shapedType, numElements, elements); 617308d8b8cSRahul Kayaith } 618308d8b8cSRahul Kayaith MlirAttribute mlirDenseElementsAttrInt16Get(MlirType shapedType, 619308d8b8cSRahul Kayaith intptr_t numElements, 620308d8b8cSRahul Kayaith const int16_t *elements) { 621308d8b8cSRahul Kayaith return getDenseAttribute(shapedType, numElements, elements); 622308d8b8cSRahul Kayaith } 623c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrUInt32Get(MlirType shapedType, 624c7cae0e4SRiver Riddle intptr_t numElements, 625c7cae0e4SRiver Riddle const uint32_t *elements) { 626c7cae0e4SRiver Riddle return getDenseAttribute(shapedType, numElements, elements); 627c7cae0e4SRiver Riddle } 628c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrInt32Get(MlirType shapedType, 629c7cae0e4SRiver Riddle intptr_t numElements, 630c7cae0e4SRiver Riddle const int32_t *elements) { 631c7cae0e4SRiver Riddle return getDenseAttribute(shapedType, numElements, elements); 632c7cae0e4SRiver Riddle } 633c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrUInt64Get(MlirType shapedType, 634c7cae0e4SRiver Riddle intptr_t numElements, 635c7cae0e4SRiver Riddle const uint64_t *elements) { 636c7cae0e4SRiver Riddle return getDenseAttribute(shapedType, numElements, elements); 637c7cae0e4SRiver Riddle } 638c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrInt64Get(MlirType shapedType, 639c7cae0e4SRiver Riddle intptr_t numElements, 640c7cae0e4SRiver Riddle const int64_t *elements) { 641c7cae0e4SRiver Riddle return getDenseAttribute(shapedType, numElements, elements); 642c7cae0e4SRiver Riddle } 643c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrFloatGet(MlirType shapedType, 644c7cae0e4SRiver Riddle intptr_t numElements, 645c7cae0e4SRiver Riddle const float *elements) { 646c7cae0e4SRiver Riddle return getDenseAttribute(shapedType, numElements, elements); 647c7cae0e4SRiver Riddle } 648c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrDoubleGet(MlirType shapedType, 649c7cae0e4SRiver Riddle intptr_t numElements, 650c7cae0e4SRiver Riddle const double *elements) { 651c7cae0e4SRiver Riddle return getDenseAttribute(shapedType, numElements, elements); 652c7cae0e4SRiver Riddle } 65325c218beSAshay Rane MlirAttribute mlirDenseElementsAttrBFloat16Get(MlirType shapedType, 65425c218beSAshay Rane intptr_t numElements, 65525c218beSAshay Rane const uint16_t *elements) { 65625c218beSAshay Rane size_t bufferSize = numElements * 2; 65725c218beSAshay Rane const void *buffer = static_cast<const void *>(elements); 65825c218beSAshay Rane return mlirDenseElementsAttrRawBufferGet(shapedType, bufferSize, buffer); 65925c218beSAshay Rane } 6605b0d6bf2STanyo Kwok MlirAttribute mlirDenseElementsAttrFloat16Get(MlirType shapedType, 6615b0d6bf2STanyo Kwok intptr_t numElements, 6625b0d6bf2STanyo Kwok const uint16_t *elements) { 6635b0d6bf2STanyo Kwok size_t bufferSize = numElements * 2; 6645b0d6bf2STanyo Kwok const void *buffer = static_cast<const void *>(elements); 6655b0d6bf2STanyo Kwok return mlirDenseElementsAttrRawBufferGet(shapedType, bufferSize, buffer); 6665b0d6bf2STanyo Kwok } 667c7cae0e4SRiver Riddle 668c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrStringGet(MlirType shapedType, 669c7cae0e4SRiver Riddle intptr_t numElements, 670c7cae0e4SRiver Riddle MlirStringRef *strs) { 671c7cae0e4SRiver Riddle SmallVector<StringRef, 8> values; 672c7cae0e4SRiver Riddle values.reserve(numElements); 673c7cae0e4SRiver Riddle for (intptr_t i = 0; i < numElements; ++i) 674c7cae0e4SRiver Riddle values.push_back(unwrap(strs[i])); 675c7cae0e4SRiver Riddle 676c1fa60b4STres Popp return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)), 677c1fa60b4STres Popp values)); 678c7cae0e4SRiver Riddle } 679c7cae0e4SRiver Riddle 680c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrReshapeGet(MlirAttribute attr, 681c7cae0e4SRiver Riddle MlirType shapedType) { 682c1fa60b4STres Popp return wrap(llvm::cast<DenseElementsAttr>(unwrap(attr)) 683c1fa60b4STres Popp .reshape(llvm::cast<ShapedType>(unwrap(shapedType)))); 684c7cae0e4SRiver Riddle } 685c7cae0e4SRiver Riddle 686c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 687c7cae0e4SRiver Riddle // Splat accessors. 6889566ee28Smax //===----------------------------------------------------------------------===// 689c7cae0e4SRiver Riddle 690c7cae0e4SRiver Riddle bool mlirDenseElementsAttrIsSplat(MlirAttribute attr) { 691c1fa60b4STres Popp return llvm::cast<DenseElementsAttr>(unwrap(attr)).isSplat(); 692c7cae0e4SRiver Riddle } 693c7cae0e4SRiver Riddle 694c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrGetSplatValue(MlirAttribute attr) { 695ae40d625SRiver Riddle return wrap( 696c1fa60b4STres Popp llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<Attribute>()); 697c7cae0e4SRiver Riddle } 698c7cae0e4SRiver Riddle int mlirDenseElementsAttrGetBoolSplatValue(MlirAttribute attr) { 699c1fa60b4STres Popp return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<bool>(); 700c7cae0e4SRiver Riddle } 70135454268SSean Silva int8_t mlirDenseElementsAttrGetInt8SplatValue(MlirAttribute attr) { 702c1fa60b4STres Popp return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<int8_t>(); 70335454268SSean Silva } 70435454268SSean Silva uint8_t mlirDenseElementsAttrGetUInt8SplatValue(MlirAttribute attr) { 705c1fa60b4STres Popp return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<uint8_t>(); 70635454268SSean Silva } 707c7cae0e4SRiver Riddle int32_t mlirDenseElementsAttrGetInt32SplatValue(MlirAttribute attr) { 708c1fa60b4STres Popp return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<int32_t>(); 709c7cae0e4SRiver Riddle } 710c7cae0e4SRiver Riddle uint32_t mlirDenseElementsAttrGetUInt32SplatValue(MlirAttribute attr) { 711c1fa60b4STres Popp return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<uint32_t>(); 712c7cae0e4SRiver Riddle } 713c7cae0e4SRiver Riddle int64_t mlirDenseElementsAttrGetInt64SplatValue(MlirAttribute attr) { 714c1fa60b4STres Popp return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<int64_t>(); 715c7cae0e4SRiver Riddle } 716c7cae0e4SRiver Riddle uint64_t mlirDenseElementsAttrGetUInt64SplatValue(MlirAttribute attr) { 717c1fa60b4STres Popp return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<uint64_t>(); 718c7cae0e4SRiver Riddle } 719c7cae0e4SRiver Riddle float mlirDenseElementsAttrGetFloatSplatValue(MlirAttribute attr) { 720c1fa60b4STres Popp return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<float>(); 721c7cae0e4SRiver Riddle } 722c7cae0e4SRiver Riddle double mlirDenseElementsAttrGetDoubleSplatValue(MlirAttribute attr) { 723c1fa60b4STres Popp return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<double>(); 724c7cae0e4SRiver Riddle } 725c7cae0e4SRiver Riddle MlirStringRef mlirDenseElementsAttrGetStringSplatValue(MlirAttribute attr) { 726c7cae0e4SRiver Riddle return wrap( 727c1fa60b4STres Popp llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<StringRef>()); 728c7cae0e4SRiver Riddle } 729c7cae0e4SRiver Riddle 730c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 731c7cae0e4SRiver Riddle // Indexed accessors. 7329566ee28Smax //===----------------------------------------------------------------------===// 733c7cae0e4SRiver Riddle 734c7cae0e4SRiver Riddle bool mlirDenseElementsAttrGetBoolValue(MlirAttribute attr, intptr_t pos) { 735c1fa60b4STres Popp return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<bool>()[pos]; 736c7cae0e4SRiver Riddle } 73735454268SSean Silva int8_t mlirDenseElementsAttrGetInt8Value(MlirAttribute attr, intptr_t pos) { 738c1fa60b4STres Popp return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<int8_t>()[pos]; 73935454268SSean Silva } 74035454268SSean Silva uint8_t mlirDenseElementsAttrGetUInt8Value(MlirAttribute attr, intptr_t pos) { 741c1fa60b4STres Popp return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<uint8_t>()[pos]; 74235454268SSean Silva } 743308d8b8cSRahul Kayaith int16_t mlirDenseElementsAttrGetInt16Value(MlirAttribute attr, intptr_t pos) { 744c1fa60b4STres Popp return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<int16_t>()[pos]; 745308d8b8cSRahul Kayaith } 746308d8b8cSRahul Kayaith uint16_t mlirDenseElementsAttrGetUInt16Value(MlirAttribute attr, intptr_t pos) { 747c1fa60b4STres Popp return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<uint16_t>()[pos]; 748308d8b8cSRahul Kayaith } 749c7cae0e4SRiver Riddle int32_t mlirDenseElementsAttrGetInt32Value(MlirAttribute attr, intptr_t pos) { 750c1fa60b4STres Popp return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<int32_t>()[pos]; 751c7cae0e4SRiver Riddle } 752c7cae0e4SRiver Riddle uint32_t mlirDenseElementsAttrGetUInt32Value(MlirAttribute attr, intptr_t pos) { 753c1fa60b4STres Popp return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<uint32_t>()[pos]; 754c7cae0e4SRiver Riddle } 755c7cae0e4SRiver Riddle int64_t mlirDenseElementsAttrGetInt64Value(MlirAttribute attr, intptr_t pos) { 756c1fa60b4STres Popp return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<int64_t>()[pos]; 757c7cae0e4SRiver Riddle } 758c7cae0e4SRiver Riddle uint64_t mlirDenseElementsAttrGetUInt64Value(MlirAttribute attr, intptr_t pos) { 759c1fa60b4STres Popp return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<uint64_t>()[pos]; 760c7cae0e4SRiver Riddle } 761*5d3ae516SMatthias Gehre uint64_t mlirDenseElementsAttrGetIndexValue(MlirAttribute attr, intptr_t pos) { 762*5d3ae516SMatthias Gehre return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<uint64_t>()[pos]; 763*5d3ae516SMatthias Gehre } 764c7cae0e4SRiver Riddle float mlirDenseElementsAttrGetFloatValue(MlirAttribute attr, intptr_t pos) { 765c1fa60b4STres Popp return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<float>()[pos]; 766c7cae0e4SRiver Riddle } 767c7cae0e4SRiver Riddle double mlirDenseElementsAttrGetDoubleValue(MlirAttribute attr, intptr_t pos) { 768c1fa60b4STres Popp return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<double>()[pos]; 769c7cae0e4SRiver Riddle } 770c7cae0e4SRiver Riddle MlirStringRef mlirDenseElementsAttrGetStringValue(MlirAttribute attr, 771c7cae0e4SRiver Riddle intptr_t pos) { 772c7cae0e4SRiver Riddle return wrap( 773c1fa60b4STres Popp llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<StringRef>()[pos]); 774c7cae0e4SRiver Riddle } 775c7cae0e4SRiver Riddle 776c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 777c7cae0e4SRiver Riddle // Raw data accessors. 7789566ee28Smax //===----------------------------------------------------------------------===// 779c7cae0e4SRiver Riddle 780c7cae0e4SRiver Riddle const void *mlirDenseElementsAttrGetRawData(MlirAttribute attr) { 781c7cae0e4SRiver Riddle return static_cast<const void *>( 782c1fa60b4STres Popp llvm::cast<DenseElementsAttr>(unwrap(attr)).getRawData().data()); 783c7cae0e4SRiver Riddle } 784c7cae0e4SRiver Riddle 785c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 786fb5a64f0SJacques Pienaar // Resource blob attributes. 787fb5a64f0SJacques Pienaar //===----------------------------------------------------------------------===// 788fb5a64f0SJacques Pienaar 789f66cd9e9SStella Laurenzo bool mlirAttributeIsADenseResourceElements(MlirAttribute attr) { 790f66cd9e9SStella Laurenzo return llvm::isa<DenseResourceElementsAttr>(unwrap(attr)); 791f66cd9e9SStella Laurenzo } 792f66cd9e9SStella Laurenzo 793f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseResourceElementsAttrGet( 794f66cd9e9SStella Laurenzo MlirType shapedType, MlirStringRef name, void *data, size_t dataLength, 795f66cd9e9SStella Laurenzo size_t dataAlignment, bool dataIsMutable, 796f66cd9e9SStella Laurenzo void (*deleter)(void *userData, const void *data, size_t size, 797f66cd9e9SStella Laurenzo size_t align), 798f66cd9e9SStella Laurenzo void *userData) { 799f66cd9e9SStella Laurenzo AsmResourceBlob::DeleterFn cppDeleter = {}; 800f66cd9e9SStella Laurenzo if (deleter) { 801f66cd9e9SStella Laurenzo cppDeleter = [deleter, userData](void *data, size_t size, size_t align) { 802f66cd9e9SStella Laurenzo deleter(userData, data, size, align); 803f66cd9e9SStella Laurenzo }; 804f66cd9e9SStella Laurenzo } 805f66cd9e9SStella Laurenzo AsmResourceBlob blob( 806f66cd9e9SStella Laurenzo llvm::ArrayRef(static_cast<const char *>(data), dataLength), 807f66cd9e9SStella Laurenzo dataAlignment, std::move(cppDeleter), dataIsMutable); 808f66cd9e9SStella Laurenzo return wrap( 809f66cd9e9SStella Laurenzo DenseResourceElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)), 810f66cd9e9SStella Laurenzo unwrap(name), std::move(blob))); 811f66cd9e9SStella Laurenzo } 812f66cd9e9SStella Laurenzo 813fb5a64f0SJacques Pienaar template <typename U, typename T> 814fb5a64f0SJacques Pienaar static MlirAttribute getDenseResource(MlirType shapedType, MlirStringRef name, 815fb5a64f0SJacques Pienaar intptr_t numElements, const T *elements) { 816c1fa60b4STres Popp return wrap(U::get(llvm::cast<ShapedType>(unwrap(shapedType)), unwrap(name), 817fb5a64f0SJacques Pienaar UnmanagedAsmResourceBlob::allocateInferAlign( 818984b800aSserge-sans-paille llvm::ArrayRef(elements, numElements)))); 819fb5a64f0SJacques Pienaar } 820fb5a64f0SJacques Pienaar 821f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseBoolResourceElementsAttrGet( 822fb5a64f0SJacques Pienaar MlirType shapedType, MlirStringRef name, intptr_t numElements, 823fb5a64f0SJacques Pienaar const int *elements) { 824fb5a64f0SJacques Pienaar return getDenseResource<DenseBoolResourceElementsAttr>(shapedType, name, 825fb5a64f0SJacques Pienaar numElements, elements); 826fb5a64f0SJacques Pienaar } 827f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseUInt8ResourceElementsAttrGet( 828fb5a64f0SJacques Pienaar MlirType shapedType, MlirStringRef name, intptr_t numElements, 829fb5a64f0SJacques Pienaar const uint8_t *elements) { 830fb5a64f0SJacques Pienaar return getDenseResource<DenseUI8ResourceElementsAttr>(shapedType, name, 831fb5a64f0SJacques Pienaar numElements, elements); 832fb5a64f0SJacques Pienaar } 833f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseUInt16ResourceElementsAttrGet( 834f66cd9e9SStella Laurenzo MlirType shapedType, MlirStringRef name, intptr_t numElements, 835fb5a64f0SJacques Pienaar const uint16_t *elements) { 836fb5a64f0SJacques Pienaar return getDenseResource<DenseUI16ResourceElementsAttr>(shapedType, name, 837fb5a64f0SJacques Pienaar numElements, elements); 838fb5a64f0SJacques Pienaar } 839f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseUInt32ResourceElementsAttrGet( 840f66cd9e9SStella Laurenzo MlirType shapedType, MlirStringRef name, intptr_t numElements, 841fb5a64f0SJacques Pienaar const uint32_t *elements) { 842fb5a64f0SJacques Pienaar return getDenseResource<DenseUI32ResourceElementsAttr>(shapedType, name, 843fb5a64f0SJacques Pienaar numElements, elements); 844fb5a64f0SJacques Pienaar } 845f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseUInt64ResourceElementsAttrGet( 846f66cd9e9SStella Laurenzo MlirType shapedType, MlirStringRef name, intptr_t numElements, 847fb5a64f0SJacques Pienaar const uint64_t *elements) { 848fb5a64f0SJacques Pienaar return getDenseResource<DenseUI64ResourceElementsAttr>(shapedType, name, 849fb5a64f0SJacques Pienaar numElements, elements); 850fb5a64f0SJacques Pienaar } 851f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseInt8ResourceElementsAttrGet( 852fb5a64f0SJacques Pienaar MlirType shapedType, MlirStringRef name, intptr_t numElements, 853fb5a64f0SJacques Pienaar const int8_t *elements) { 854fb5a64f0SJacques Pienaar return getDenseResource<DenseUI8ResourceElementsAttr>(shapedType, name, 855fb5a64f0SJacques Pienaar numElements, elements); 856fb5a64f0SJacques Pienaar } 857f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseInt16ResourceElementsAttrGet( 858fb5a64f0SJacques Pienaar MlirType shapedType, MlirStringRef name, intptr_t numElements, 859fb5a64f0SJacques Pienaar const int16_t *elements) { 860fb5a64f0SJacques Pienaar return getDenseResource<DenseUI16ResourceElementsAttr>(shapedType, name, 861fb5a64f0SJacques Pienaar numElements, elements); 862fb5a64f0SJacques Pienaar } 863f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseInt32ResourceElementsAttrGet( 864fb5a64f0SJacques Pienaar MlirType shapedType, MlirStringRef name, intptr_t numElements, 865fb5a64f0SJacques Pienaar const int32_t *elements) { 866fb5a64f0SJacques Pienaar return getDenseResource<DenseUI32ResourceElementsAttr>(shapedType, name, 867fb5a64f0SJacques Pienaar numElements, elements); 868fb5a64f0SJacques Pienaar } 869f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseInt64ResourceElementsAttrGet( 870fb5a64f0SJacques Pienaar MlirType shapedType, MlirStringRef name, intptr_t numElements, 871fb5a64f0SJacques Pienaar const int64_t *elements) { 872fb5a64f0SJacques Pienaar return getDenseResource<DenseUI64ResourceElementsAttr>(shapedType, name, 873fb5a64f0SJacques Pienaar numElements, elements); 874fb5a64f0SJacques Pienaar } 875f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseFloatResourceElementsAttrGet( 876fb5a64f0SJacques Pienaar MlirType shapedType, MlirStringRef name, intptr_t numElements, 877fb5a64f0SJacques Pienaar const float *elements) { 878fb5a64f0SJacques Pienaar return getDenseResource<DenseF32ResourceElementsAttr>(shapedType, name, 879fb5a64f0SJacques Pienaar numElements, elements); 880fb5a64f0SJacques Pienaar } 881f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseDoubleResourceElementsAttrGet( 882f66cd9e9SStella Laurenzo MlirType shapedType, MlirStringRef name, intptr_t numElements, 883fb5a64f0SJacques Pienaar const double *elements) { 884fb5a64f0SJacques Pienaar return getDenseResource<DenseF64ResourceElementsAttr>(shapedType, name, 885fb5a64f0SJacques Pienaar numElements, elements); 886fb5a64f0SJacques Pienaar } 887fb5a64f0SJacques Pienaar template <typename U, typename T> 888fb5a64f0SJacques Pienaar static T getDenseResourceVal(MlirAttribute attr, intptr_t pos) { 889c1fa60b4STres Popp return (*llvm::cast<U>(unwrap(attr)).tryGetAsArrayRef())[pos]; 890fb5a64f0SJacques Pienaar } 891fb5a64f0SJacques Pienaar 892f66cd9e9SStella Laurenzo bool mlirDenseBoolResourceElementsAttrGetValue(MlirAttribute attr, 893f66cd9e9SStella Laurenzo intptr_t pos) { 894fb5a64f0SJacques Pienaar return getDenseResourceVal<DenseBoolResourceElementsAttr, uint8_t>(attr, pos); 895fb5a64f0SJacques Pienaar } 896f66cd9e9SStella Laurenzo uint8_t mlirDenseUInt8ResourceElementsAttrGetValue(MlirAttribute attr, 897f66cd9e9SStella Laurenzo intptr_t pos) { 898fb5a64f0SJacques Pienaar return getDenseResourceVal<DenseUI8ResourceElementsAttr, uint8_t>(attr, pos); 899fb5a64f0SJacques Pienaar } 900f66cd9e9SStella Laurenzo uint16_t mlirDenseUInt16ResourceElementsAttrGetValue(MlirAttribute attr, 901f66cd9e9SStella Laurenzo intptr_t pos) { 902fb5a64f0SJacques Pienaar return getDenseResourceVal<DenseUI16ResourceElementsAttr, uint16_t>(attr, 903fb5a64f0SJacques Pienaar pos); 904fb5a64f0SJacques Pienaar } 905f66cd9e9SStella Laurenzo uint32_t mlirDenseUInt32ResourceElementsAttrGetValue(MlirAttribute attr, 906f66cd9e9SStella Laurenzo intptr_t pos) { 907fb5a64f0SJacques Pienaar return getDenseResourceVal<DenseUI32ResourceElementsAttr, uint32_t>(attr, 908fb5a64f0SJacques Pienaar pos); 909fb5a64f0SJacques Pienaar } 910f66cd9e9SStella Laurenzo uint64_t mlirDenseUInt64ResourceElementsAttrGetValue(MlirAttribute attr, 911f66cd9e9SStella Laurenzo intptr_t pos) { 912fb5a64f0SJacques Pienaar return getDenseResourceVal<DenseUI64ResourceElementsAttr, uint64_t>(attr, 913fb5a64f0SJacques Pienaar pos); 914fb5a64f0SJacques Pienaar } 915f66cd9e9SStella Laurenzo int8_t mlirDenseInt8ResourceElementsAttrGetValue(MlirAttribute attr, 916f66cd9e9SStella Laurenzo intptr_t pos) { 917fb5a64f0SJacques Pienaar return getDenseResourceVal<DenseUI8ResourceElementsAttr, int8_t>(attr, pos); 918fb5a64f0SJacques Pienaar } 919f66cd9e9SStella Laurenzo int16_t mlirDenseInt16ResourceElementsAttrGetValue(MlirAttribute attr, 920f66cd9e9SStella Laurenzo intptr_t pos) { 921fb5a64f0SJacques Pienaar return getDenseResourceVal<DenseUI16ResourceElementsAttr, int16_t>(attr, pos); 922fb5a64f0SJacques Pienaar } 923f66cd9e9SStella Laurenzo int32_t mlirDenseInt32ResourceElementsAttrGetValue(MlirAttribute attr, 924f66cd9e9SStella Laurenzo intptr_t pos) { 925fb5a64f0SJacques Pienaar return getDenseResourceVal<DenseUI32ResourceElementsAttr, int32_t>(attr, pos); 926fb5a64f0SJacques Pienaar } 927f66cd9e9SStella Laurenzo int64_t mlirDenseInt64ResourceElementsAttrGetValue(MlirAttribute attr, 928f66cd9e9SStella Laurenzo intptr_t pos) { 929fb5a64f0SJacques Pienaar return getDenseResourceVal<DenseUI64ResourceElementsAttr, int64_t>(attr, pos); 930fb5a64f0SJacques Pienaar } 931f66cd9e9SStella Laurenzo float mlirDenseFloatResourceElementsAttrGetValue(MlirAttribute attr, 932f66cd9e9SStella Laurenzo intptr_t pos) { 933fb5a64f0SJacques Pienaar return getDenseResourceVal<DenseF32ResourceElementsAttr, float>(attr, pos); 934fb5a64f0SJacques Pienaar } 935f66cd9e9SStella Laurenzo double mlirDenseDoubleResourceElementsAttrGetValue(MlirAttribute attr, 936f66cd9e9SStella Laurenzo intptr_t pos) { 937fb5a64f0SJacques Pienaar return getDenseResourceVal<DenseF64ResourceElementsAttr, double>(attr, pos); 938fb5a64f0SJacques Pienaar } 939fb5a64f0SJacques Pienaar 940fb5a64f0SJacques Pienaar //===----------------------------------------------------------------------===// 941c7cae0e4SRiver Riddle // Sparse elements attribute. 942c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===// 943c7cae0e4SRiver Riddle 944c7cae0e4SRiver Riddle bool mlirAttributeIsASparseElements(MlirAttribute attr) { 945c1fa60b4STres Popp return llvm::isa<SparseElementsAttr>(unwrap(attr)); 946c7cae0e4SRiver Riddle } 947c7cae0e4SRiver Riddle 948c7cae0e4SRiver Riddle MlirAttribute mlirSparseElementsAttribute(MlirType shapedType, 949c7cae0e4SRiver Riddle MlirAttribute denseIndices, 950c7cae0e4SRiver Riddle MlirAttribute denseValues) { 951c1fa60b4STres Popp return wrap(SparseElementsAttr::get( 952c1fa60b4STres Popp llvm::cast<ShapedType>(unwrap(shapedType)), 953c1fa60b4STres Popp llvm::cast<DenseElementsAttr>(unwrap(denseIndices)), 954c1fa60b4STres Popp llvm::cast<DenseElementsAttr>(unwrap(denseValues)))); 955c7cae0e4SRiver Riddle } 956c7cae0e4SRiver Riddle 957c7cae0e4SRiver Riddle MlirAttribute mlirSparseElementsAttrGetIndices(MlirAttribute attr) { 958c1fa60b4STres Popp return wrap(llvm::cast<SparseElementsAttr>(unwrap(attr)).getIndices()); 959c7cae0e4SRiver Riddle } 960c7cae0e4SRiver Riddle 961c7cae0e4SRiver Riddle MlirAttribute mlirSparseElementsAttrGetValues(MlirAttribute attr) { 962c1fa60b4STres Popp return wrap(llvm::cast<SparseElementsAttr>(unwrap(attr)).getValues()); 963c7cae0e4SRiver Riddle } 9640aced4e0SDenys Shabalin 9659566ee28Smax MlirTypeID mlirSparseElementsAttrGetTypeID(void) { 9669566ee28Smax return wrap(SparseElementsAttr::getTypeID()); 9679566ee28Smax } 9689566ee28Smax 9690aced4e0SDenys Shabalin //===----------------------------------------------------------------------===// 9700aced4e0SDenys Shabalin // Strided layout attribute. 9710aced4e0SDenys Shabalin //===----------------------------------------------------------------------===// 9720aced4e0SDenys Shabalin 9730aced4e0SDenys Shabalin bool mlirAttributeIsAStridedLayout(MlirAttribute attr) { 974c1fa60b4STres Popp return llvm::isa<StridedLayoutAttr>(unwrap(attr)); 9750aced4e0SDenys Shabalin } 9760aced4e0SDenys Shabalin 9770aced4e0SDenys Shabalin MlirAttribute mlirStridedLayoutAttrGet(MlirContext ctx, int64_t offset, 978ac2e2d65SDenys Shabalin intptr_t numStrides, 979ac2e2d65SDenys Shabalin const int64_t *strides) { 9800aced4e0SDenys Shabalin return wrap(StridedLayoutAttr::get(unwrap(ctx), offset, 9810aced4e0SDenys Shabalin ArrayRef<int64_t>(strides, numStrides))); 9820aced4e0SDenys Shabalin } 9830aced4e0SDenys Shabalin 9840aced4e0SDenys Shabalin int64_t mlirStridedLayoutAttrGetOffset(MlirAttribute attr) { 985c1fa60b4STres Popp return llvm::cast<StridedLayoutAttr>(unwrap(attr)).getOffset(); 9860aced4e0SDenys Shabalin } 9870aced4e0SDenys Shabalin 9880aced4e0SDenys Shabalin intptr_t mlirStridedLayoutAttrGetNumStrides(MlirAttribute attr) { 9890aced4e0SDenys Shabalin return static_cast<intptr_t>( 990c1fa60b4STres Popp llvm::cast<StridedLayoutAttr>(unwrap(attr)).getStrides().size()); 9910aced4e0SDenys Shabalin } 9920aced4e0SDenys Shabalin 9930aced4e0SDenys Shabalin int64_t mlirStridedLayoutAttrGetStride(MlirAttribute attr, intptr_t pos) { 994c1fa60b4STres Popp return llvm::cast<StridedLayoutAttr>(unwrap(attr)).getStrides()[pos]; 9950aced4e0SDenys Shabalin } 9969566ee28Smax 9979566ee28Smax MlirTypeID mlirStridedLayoutAttrGetTypeID(void) { 9989566ee28Smax return wrap(StridedLayoutAttr::getTypeID()); 9999566ee28Smax } 1000