| //===-- mlir-c/BuiltinAttributes.h - C API for Builtin Attributes -*- C -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM |
| // Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This header declares the C interface to MLIR Builtin attributes. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef MLIR_C_BUILTINATTRIBUTES_H |
| #define MLIR_C_BUILTINATTRIBUTES_H |
| |
| #include "mlir-c/AffineMap.h" |
| #include "mlir-c/IR.h" |
| #include "mlir-c/Support.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| //===----------------------------------------------------------------------===// |
| // Affine map attribute. |
| //===----------------------------------------------------------------------===// |
| |
| /// Checks whether the given attribute is an affine map attribute. |
| MLIR_CAPI_EXPORTED bool mlirAttributeIsAAffineMap(MlirAttribute attr); |
| |
| /** Creates an affine map attribute wrapping the given map. The attribute |
| * belongs to the same context as the affine map. */ |
| MLIR_CAPI_EXPORTED MlirAttribute mlirAffineMapAttrGet(MlirAffineMap map); |
| |
| /// Returns the affine map wrapped in the given affine map attribute. |
| MLIR_CAPI_EXPORTED MlirAffineMap mlirAffineMapAttrGetValue(MlirAttribute attr); |
| |
| //===----------------------------------------------------------------------===// |
| // Array attribute. |
| //===----------------------------------------------------------------------===// |
| |
| /// Checks whether the given attribute is an array attribute. |
| MLIR_CAPI_EXPORTED bool mlirAttributeIsAArray(MlirAttribute attr); |
| |
| /** Creates an array element containing the given list of elements in the given |
| * context. */ |
| MLIR_CAPI_EXPORTED MlirAttribute mlirArrayAttrGet( |
| MlirContext ctx, intptr_t numElements, MlirAttribute const *elements); |
| |
| /// Returns the number of elements stored in the given array attribute. |
| MLIR_CAPI_EXPORTED intptr_t mlirArrayAttrGetNumElements(MlirAttribute attr); |
| |
| /// Returns pos-th element stored in the given array attribute. |
| MLIR_CAPI_EXPORTED MlirAttribute mlirArrayAttrGetElement(MlirAttribute attr, |
| intptr_t pos); |
| |
| //===----------------------------------------------------------------------===// |
| // Dictionary attribute. |
| //===----------------------------------------------------------------------===// |
| |
| /// Checks whether the given attribute is a dictionary attribute. |
| MLIR_CAPI_EXPORTED bool mlirAttributeIsADictionary(MlirAttribute attr); |
| |
| /** Creates a dictionary attribute containing the given list of elements in the |
| * provided context. */ |
| MLIR_CAPI_EXPORTED MlirAttribute mlirDictionaryAttrGet( |
| MlirContext ctx, intptr_t numElements, MlirNamedAttribute const *elements); |
| |
| /// Returns the number of attributes contained in a dictionary attribute. |
| MLIR_CAPI_EXPORTED intptr_t |
| mlirDictionaryAttrGetNumElements(MlirAttribute attr); |
| |
| /// Returns pos-th element of the given dictionary attribute. |
| MLIR_CAPI_EXPORTED MlirNamedAttribute |
| mlirDictionaryAttrGetElement(MlirAttribute attr, intptr_t pos); |
| |
| /** Returns the dictionary attribute element with the given name or NULL if the |
| * given name does not exist in the dictionary. */ |
| MLIR_CAPI_EXPORTED MlirAttribute |
| mlirDictionaryAttrGetElementByName(MlirAttribute attr, MlirStringRef name); |
| |
| //===----------------------------------------------------------------------===// |
| // Floating point attribute. |
| //===----------------------------------------------------------------------===// |
| |
| /* TODO: add support for APFloat and APInt to LLVM IR C API, then expose the |
| * relevant functions here. */ |
| |
| /// Checks whether the given attribute is a floating point attribute. |
| MLIR_CAPI_EXPORTED bool mlirAttributeIsAFloat(MlirAttribute attr); |
| |
| /** Creates a floating point attribute in the given context with the given |
| * double value and double-precision FP semantics. */ |
| MLIR_CAPI_EXPORTED MlirAttribute mlirFloatAttrDoubleGet(MlirContext ctx, |
| MlirType type, |
| double value); |
| |
| /** Same as "mlirFloatAttrDoubleGet", but if the type is not valid for a |
| * construction of a FloatAttr, returns a null MlirAttribute. */ |
| MLIR_CAPI_EXPORTED MlirAttribute |
| mlirFloatAttrDoubleGetChecked(MlirType type, double value, MlirLocation loc); |
| |
| /** Returns the value stored in the given floating point attribute, interpreting |
| * the value as double. */ |
| MLIR_CAPI_EXPORTED double mlirFloatAttrGetValueDouble(MlirAttribute attr); |
| |
| //===----------------------------------------------------------------------===// |
| // Integer attribute. |
| //===----------------------------------------------------------------------===// |
| |
| /* TODO: add support for APFloat and APInt to LLVM IR C API, then expose the |
| * relevant functions here. */ |
| |
| /// Checks whether the given attribute is an integer attribute. |
| MLIR_CAPI_EXPORTED bool mlirAttributeIsAInteger(MlirAttribute attr); |
| |
| /** Creates an integer attribute of the given type with the given integer |
| * value. */ |
| MLIR_CAPI_EXPORTED MlirAttribute mlirIntegerAttrGet(MlirType type, |
| int64_t value); |
| |
| /** Returns the value stored in the given integer attribute, assuming the value |
| * fits into a 64-bit integer. */ |
| MLIR_CAPI_EXPORTED int64_t mlirIntegerAttrGetValueInt(MlirAttribute attr); |
| |
| //===----------------------------------------------------------------------===// |
| // Bool attribute. |
| //===----------------------------------------------------------------------===// |
| |
| /// Checks whether the given attribute is a bool attribute. |
| MLIR_CAPI_EXPORTED bool mlirAttributeIsABool(MlirAttribute attr); |
| |
| /// Creates a bool attribute in the given context with the given value. |
| MLIR_CAPI_EXPORTED MlirAttribute mlirBoolAttrGet(MlirContext ctx, int value); |
| |
| /// Returns the value stored in the given bool attribute. |
| MLIR_CAPI_EXPORTED bool mlirBoolAttrGetValue(MlirAttribute attr); |
| |
| //===----------------------------------------------------------------------===// |
| // Integer set attribute. |
| //===----------------------------------------------------------------------===// |
| |
| /// Checks whether the given attribute is an integer set attribute. |
| MLIR_CAPI_EXPORTED bool mlirAttributeIsAIntegerSet(MlirAttribute attr); |
| |
| //===----------------------------------------------------------------------===// |
| // Opaque attribute. |
| //===----------------------------------------------------------------------===// |
| |
| /// Checks whether the given attribute is an opaque attribute. |
| MLIR_CAPI_EXPORTED bool mlirAttributeIsAOpaque(MlirAttribute attr); |
| |
| /** Creates an opaque attribute in the given context associated with the dialect |
| * identified by its namespace. The attribute contains opaque byte data of the |
| * specified length (data need not be null-terminated). */ |
| MLIR_CAPI_EXPORTED MlirAttribute |
| mlirOpaqueAttrGet(MlirContext ctx, MlirStringRef dialectNamespace, |
| intptr_t dataLength, const char *data, MlirType type); |
| |
| /** Returns the namespace of the dialect with which the given opaque attribute |
| * is associated. The namespace string is owned by the context. */ |
| MLIR_CAPI_EXPORTED MlirStringRef |
| mlirOpaqueAttrGetDialectNamespace(MlirAttribute attr); |
| |
| /** Returns the raw data as a string reference. The data remains live as long as |
| * the context in which the attribute lives. */ |
| MLIR_CAPI_EXPORTED MlirStringRef mlirOpaqueAttrGetData(MlirAttribute attr); |
| |
| //===----------------------------------------------------------------------===// |
| // String attribute. |
| //===----------------------------------------------------------------------===// |
| |
| /// Checks whether the given attribute is a string attribute. |
| MLIR_CAPI_EXPORTED bool mlirAttributeIsAString(MlirAttribute attr); |
| |
| /** Creates a string attribute in the given context containing the given string. |
| */ |
| MLIR_CAPI_EXPORTED MlirAttribute mlirStringAttrGet(MlirContext ctx, |
| MlirStringRef str); |
| |
| /** Creates a string attribute in the given context containing the given string. |
| * Additionally, the attribute has the given type. */ |
| MLIR_CAPI_EXPORTED MlirAttribute mlirStringAttrTypedGet(MlirType type, |
| MlirStringRef str); |
| |
| /** Returns the attribute values as a string reference. The data remains live as |
| * long as the context in which the attribute lives. */ |
| MLIR_CAPI_EXPORTED MlirStringRef mlirStringAttrGetValue(MlirAttribute attr); |
| |
| //===----------------------------------------------------------------------===// |
| // SymbolRef attribute. |
| //===----------------------------------------------------------------------===// |
| |
| /// Checks whether the given attribute is a symbol reference attribute. |
| MLIR_CAPI_EXPORTED bool mlirAttributeIsASymbolRef(MlirAttribute attr); |
| |
| /** Creates a symbol reference attribute in the given context referencing a |
| * symbol identified by the given string inside a list of nested references. |
| * Each of the references in the list must not be nested. */ |
| MLIR_CAPI_EXPORTED MlirAttribute |
| mlirSymbolRefAttrGet(MlirContext ctx, MlirStringRef symbol, |
| intptr_t numReferences, MlirAttribute const *references); |
| |
| /** Returns the string reference to the root referenced symbol. The data remains |
| * live as long as the context in which the attribute lives. */ |
| MLIR_CAPI_EXPORTED MlirStringRef |
| mlirSymbolRefAttrGetRootReference(MlirAttribute attr); |
| |
| /** Returns the string reference to the leaf referenced symbol. The data remains |
| * live as long as the context in which the attribute lives. */ |
| MLIR_CAPI_EXPORTED MlirStringRef |
| mlirSymbolRefAttrGetLeafReference(MlirAttribute attr); |
| |
| /** Returns the number of references nested in the given symbol reference |
| * attribute. */ |
| MLIR_CAPI_EXPORTED intptr_t |
| mlirSymbolRefAttrGetNumNestedReferences(MlirAttribute attr); |
| |
| /// Returns pos-th reference nested in the given symbol reference attribute. |
| MLIR_CAPI_EXPORTED MlirAttribute |
| mlirSymbolRefAttrGetNestedReference(MlirAttribute attr, intptr_t pos); |
| |
| //===----------------------------------------------------------------------===// |
| // Flat SymbolRef attribute. |
| //===----------------------------------------------------------------------===// |
| |
| /// Checks whether the given attribute is a flat symbol reference attribute. |
| MLIR_CAPI_EXPORTED bool mlirAttributeIsAFlatSymbolRef(MlirAttribute attr); |
| |
| /** Creates a flat symbol reference attribute in the given context referencing a |
| * symbol identified by the given string. */ |
| MLIR_CAPI_EXPORTED MlirAttribute mlirFlatSymbolRefAttrGet(MlirContext ctx, |
| MlirStringRef symbol); |
| |
| /** Returns the referenced symbol as a string reference. The data remains live |
| * as long as the context in which the attribute lives. */ |
| MLIR_CAPI_EXPORTED MlirStringRef |
| mlirFlatSymbolRefAttrGetValue(MlirAttribute attr); |
| |
| //===----------------------------------------------------------------------===// |
| // Type attribute. |
| //===----------------------------------------------------------------------===// |
| |
| /// Checks whether the given attribute is a type attribute. |
| MLIR_CAPI_EXPORTED bool mlirAttributeIsAType(MlirAttribute attr); |
| |
| /** Creates a type attribute wrapping the given type in the same context as the |
| * type. */ |
| MLIR_CAPI_EXPORTED MlirAttribute mlirTypeAttrGet(MlirType type); |
| |
| /// Returns the type stored in the given type attribute. |
| MLIR_CAPI_EXPORTED MlirType mlirTypeAttrGetValue(MlirAttribute attr); |
| |
| //===----------------------------------------------------------------------===// |
| // Unit attribute. |
| //===----------------------------------------------------------------------===// |
| |
| /// Checks whether the given attribute is a unit attribute. |
| MLIR_CAPI_EXPORTED bool mlirAttributeIsAUnit(MlirAttribute attr); |
| |
| /// Creates a unit attribute in the given context. |
| MLIR_CAPI_EXPORTED MlirAttribute mlirUnitAttrGet(MlirContext ctx); |
| |
| //===----------------------------------------------------------------------===// |
| // Elements attributes. |
| //===----------------------------------------------------------------------===// |
| |
| /// Checks whether the given attribute is an elements attribute. |
| MLIR_CAPI_EXPORTED bool mlirAttributeIsAElements(MlirAttribute attr); |
| |
| /// Returns the element at the given rank-dimensional index. |
| MLIR_CAPI_EXPORTED MlirAttribute mlirElementsAttrGetValue(MlirAttribute attr, |
| intptr_t rank, |
| uint64_t *idxs); |
| |
| /** Checks whether the given rank-dimensional index is valid in the given |
| * elements attribute. */ |
| MLIR_CAPI_EXPORTED bool |
| mlirElementsAttrIsValidIndex(MlirAttribute attr, intptr_t rank, uint64_t *idxs); |
| |
| /** Gets the total number of elements in the given elements attribute. In order |
| * to iterate over the attribute, obtain its type, which must be a statically |
| * shaped type and use its sizes to build a multi-dimensional index. */ |
| MLIR_CAPI_EXPORTED int64_t mlirElementsAttrGetNumElements(MlirAttribute attr); |
| |
| //===----------------------------------------------------------------------===// |
| // Dense elements attribute. |
| //===----------------------------------------------------------------------===// |
| |
| // TODO: decide on the interface and add support for complex elements. |
| /* TODO: add support for APFloat and APInt to LLVM IR C API, then expose the |
| * relevant functions here. */ |
| |
| /// Checks whether the given attribute is a dense elements attribute. |
| MLIR_CAPI_EXPORTED bool mlirAttributeIsADenseElements(MlirAttribute attr); |
| MLIR_CAPI_EXPORTED bool mlirAttributeIsADenseIntElements(MlirAttribute attr); |
| MLIR_CAPI_EXPORTED bool mlirAttributeIsADenseFPElements(MlirAttribute attr); |
| |
| /** Creates a dense elements attribute with the given Shaped type and elements |
| * in the same context as the type. */ |
| MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrGet( |
| MlirType shapedType, intptr_t numElements, MlirAttribute const *elements); |
| |
| /** Creates a dense elements attribute with the given Shaped type containing a |
| * single replicated element (splat). */ |
| MLIR_CAPI_EXPORTED MlirAttribute |
| mlirDenseElementsAttrSplatGet(MlirType shapedType, MlirAttribute element); |
| MLIR_CAPI_EXPORTED MlirAttribute |
| mlirDenseElementsAttrBoolSplatGet(MlirType shapedType, bool element); |
| MLIR_CAPI_EXPORTED MlirAttribute |
| mlirDenseElementsAttrUInt32SplatGet(MlirType shapedType, uint32_t element); |
| MLIR_CAPI_EXPORTED MlirAttribute |
| mlirDenseElementsAttrInt32SplatGet(MlirType shapedType, int32_t element); |
| MLIR_CAPI_EXPORTED MlirAttribute |
| mlirDenseElementsAttrUInt64SplatGet(MlirType shapedType, uint64_t element); |
| MLIR_CAPI_EXPORTED MlirAttribute |
| mlirDenseElementsAttrInt64SplatGet(MlirType shapedType, int64_t element); |
| MLIR_CAPI_EXPORTED MlirAttribute |
| mlirDenseElementsAttrFloatSplatGet(MlirType shapedType, float element); |
| MLIR_CAPI_EXPORTED MlirAttribute |
| mlirDenseElementsAttrDoubleSplatGet(MlirType shapedType, double element); |
| |
| /** Creates a dense elements attribute with the given shaped type from elements |
| * of a specific type. Expects the element type of the shaped type to match the |
| * data element type. */ |
| MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrBoolGet( |
| MlirType shapedType, intptr_t numElements, const int *elements); |
| MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrUInt32Get( |
| MlirType shapedType, intptr_t numElements, const uint32_t *elements); |
| MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrInt32Get( |
| MlirType shapedType, intptr_t numElements, const int32_t *elements); |
| MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrUInt64Get( |
| MlirType shapedType, intptr_t numElements, const uint64_t *elements); |
| MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrInt64Get( |
| MlirType shapedType, intptr_t numElements, const int64_t *elements); |
| MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrFloatGet( |
| MlirType shapedType, intptr_t numElements, const float *elements); |
| MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrDoubleGet( |
| MlirType shapedType, intptr_t numElements, const double *elements); |
| |
| /** Creates a dense elements attribute with the given shaped type from string |
| * elements. */ |
| MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrStringGet( |
| MlirType shapedType, intptr_t numElements, MlirStringRef *strs); |
| |
| /** Creates a dense elements attribute that has the same data as the given dense |
| * elements attribute and a different shaped type. The new type must have the |
| * same total number of elements. */ |
| MLIR_CAPI_EXPORTED MlirAttribute |
| mlirDenseElementsAttrReshapeGet(MlirAttribute attr, MlirType shapedType); |
| |
| /** Checks whether the given dense elements attribute contains a single |
| * replicated value (splat). */ |
| MLIR_CAPI_EXPORTED bool mlirDenseElementsAttrIsSplat(MlirAttribute attr); |
| |
| /** Returns the single replicated value (splat) of a specific type contained by |
| * the given dense elements attribute. */ |
| MLIR_CAPI_EXPORTED MlirAttribute |
| mlirDenseElementsAttrGetSplatValue(MlirAttribute attr); |
| MLIR_CAPI_EXPORTED int |
| mlirDenseElementsAttrGetBoolSplatValue(MlirAttribute attr); |
| MLIR_CAPI_EXPORTED int32_t |
| mlirDenseElementsAttrGetInt32SplatValue(MlirAttribute attr); |
| MLIR_CAPI_EXPORTED uint32_t |
| mlirDenseElementsAttrGetUInt32SplatValue(MlirAttribute attr); |
| MLIR_CAPI_EXPORTED int64_t |
| mlirDenseElementsAttrGetInt64SplatValue(MlirAttribute attr); |
| MLIR_CAPI_EXPORTED uint64_t |
| mlirDenseElementsAttrGetUInt64SplatValue(MlirAttribute attr); |
| MLIR_CAPI_EXPORTED float |
| mlirDenseElementsAttrGetFloatSplatValue(MlirAttribute attr); |
| MLIR_CAPI_EXPORTED double |
| mlirDenseElementsAttrGetDoubleSplatValue(MlirAttribute attr); |
| MLIR_CAPI_EXPORTED MlirStringRef |
| mlirDenseElementsAttrGetStringSplatValue(MlirAttribute attr); |
| |
| /** Returns the pos-th value (flat contiguous indexing) of a specific type |
| * contained by the given dense elements attribute. */ |
| MLIR_CAPI_EXPORTED bool mlirDenseElementsAttrGetBoolValue(MlirAttribute attr, |
| intptr_t pos); |
| MLIR_CAPI_EXPORTED int32_t |
| mlirDenseElementsAttrGetInt32Value(MlirAttribute attr, intptr_t pos); |
| MLIR_CAPI_EXPORTED uint32_t |
| mlirDenseElementsAttrGetUInt32Value(MlirAttribute attr, intptr_t pos); |
| MLIR_CAPI_EXPORTED int64_t |
| mlirDenseElementsAttrGetInt64Value(MlirAttribute attr, intptr_t pos); |
| MLIR_CAPI_EXPORTED uint64_t |
| mlirDenseElementsAttrGetUInt64Value(MlirAttribute attr, intptr_t pos); |
| MLIR_CAPI_EXPORTED float mlirDenseElementsAttrGetFloatValue(MlirAttribute attr, |
| intptr_t pos); |
| MLIR_CAPI_EXPORTED double |
| mlirDenseElementsAttrGetDoubleValue(MlirAttribute attr, intptr_t pos); |
| MLIR_CAPI_EXPORTED MlirStringRef |
| mlirDenseElementsAttrGetStringValue(MlirAttribute attr, intptr_t pos); |
| |
| /** Returns the raw data of the given dense elements attribute. */ |
| MLIR_CAPI_EXPORTED const void * |
| mlirDenseElementsAttrGetRawData(MlirAttribute attr); |
| |
| //===----------------------------------------------------------------------===// |
| // Opaque elements attribute. |
| //===----------------------------------------------------------------------===// |
| |
| // TODO: expose Dialect to the bindings and implement accessors here. |
| |
| /// Checks whether the given attribute is an opaque elements attribute. |
| MLIR_CAPI_EXPORTED bool mlirAttributeIsAOpaqueElements(MlirAttribute attr); |
| |
| //===----------------------------------------------------------------------===// |
| // Sparse elements attribute. |
| //===----------------------------------------------------------------------===// |
| |
| /// Checks whether the given attribute is a sparse elements attribute. |
| MLIR_CAPI_EXPORTED bool mlirAttributeIsASparseElements(MlirAttribute attr); |
| |
| /** Creates a sparse elements attribute of the given shape from a list of |
| * indices and a list of associated values. Both lists are expected to be dense |
| * elements attributes with the same number of elements. The list of indices is |
| * expected to contain 64-bit integers. The attribute is created in the same |
| * context as the type. */ |
| MLIR_CAPI_EXPORTED MlirAttribute mlirSparseElementsAttribute( |
| MlirType shapedType, MlirAttribute denseIndices, MlirAttribute denseValues); |
| |
| /** Returns the dense elements attribute containing 64-bit integer indices of |
| * non-null elements in the given sparse elements attribute. */ |
| MLIR_CAPI_EXPORTED MlirAttribute |
| mlirSparseElementsAttrGetIndices(MlirAttribute attr); |
| |
| /** Returns the dense elements attribute containing the non-null elements in the |
| * given sparse elements attribute. */ |
| MLIR_CAPI_EXPORTED MlirAttribute |
| mlirSparseElementsAttrGetValues(MlirAttribute attr); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif // MLIR_C_BUILTINATTRIBUTES_H |