1 //===-- mlir-c/BuiltinTypes.h - C API for MLIR Builtin types ------*- C -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM 4 // Exceptions. 5 // See https://llvm.org/LICENSE.txt for license information. 6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef MLIR_C_BUILTINTYPES_H 11 #define MLIR_C_BUILTINTYPES_H 12 13 #include "mlir-c/AffineMap.h" 14 #include "mlir-c/IR.h" 15 #include <stdint.h> 16 17 #ifdef __cplusplus 18 extern "C" { 19 #endif 20 21 //===----------------------------------------------------------------------===// 22 // Integer types. 23 //===----------------------------------------------------------------------===// 24 25 /// Returns the typeID of an Integer type. 26 MLIR_CAPI_EXPORTED MlirTypeID mlirIntegerTypeGetTypeID(void); 27 28 /// Checks whether the given type is an integer type. 29 MLIR_CAPI_EXPORTED bool mlirTypeIsAInteger(MlirType type); 30 31 /// Creates a signless integer type of the given bitwidth in the context. The 32 /// type is owned by the context. 33 MLIR_CAPI_EXPORTED MlirType mlirIntegerTypeGet(MlirContext ctx, 34 unsigned bitwidth); 35 36 /// Creates a signed integer type of the given bitwidth in the context. The type 37 /// is owned by the context. 38 MLIR_CAPI_EXPORTED MlirType mlirIntegerTypeSignedGet(MlirContext ctx, 39 unsigned bitwidth); 40 41 /// Creates an unsigned integer type of the given bitwidth in the context. The 42 /// type is owned by the context. 43 MLIR_CAPI_EXPORTED MlirType mlirIntegerTypeUnsignedGet(MlirContext ctx, 44 unsigned bitwidth); 45 46 /// Returns the bitwidth of an integer type. 47 MLIR_CAPI_EXPORTED unsigned mlirIntegerTypeGetWidth(MlirType type); 48 49 /// Checks whether the given integer type is signless. 50 MLIR_CAPI_EXPORTED bool mlirIntegerTypeIsSignless(MlirType type); 51 52 /// Checks whether the given integer type is signed. 53 MLIR_CAPI_EXPORTED bool mlirIntegerTypeIsSigned(MlirType type); 54 55 /// Checks whether the given integer type is unsigned. 56 MLIR_CAPI_EXPORTED bool mlirIntegerTypeIsUnsigned(MlirType type); 57 58 //===----------------------------------------------------------------------===// 59 // Index type. 60 //===----------------------------------------------------------------------===// 61 62 /// Returns the typeID of an Index type. 63 MLIR_CAPI_EXPORTED MlirTypeID mlirIndexTypeGetTypeID(void); 64 65 /// Checks whether the given type is an index type. 66 MLIR_CAPI_EXPORTED bool mlirTypeIsAIndex(MlirType type); 67 68 /// Creates an index type in the given context. The type is owned by the 69 /// context. 70 MLIR_CAPI_EXPORTED MlirType mlirIndexTypeGet(MlirContext ctx); 71 72 //===----------------------------------------------------------------------===// 73 // Floating-point types. 74 //===----------------------------------------------------------------------===// 75 76 /// Checks whether the given type is a floating-point type. 77 MLIR_CAPI_EXPORTED bool mlirTypeIsAFloat(MlirType type); 78 79 /// Returns the bitwidth of a floating-point type. 80 MLIR_CAPI_EXPORTED unsigned mlirFloatTypeGetWidth(MlirType type); 81 82 /// Returns the typeID of an Float4E2M1FN type. 83 MLIR_CAPI_EXPORTED MlirTypeID mlirFloat4E2M1FNTypeGetTypeID(void); 84 85 /// Checks whether the given type is an f4E2M1FN type. 86 MLIR_CAPI_EXPORTED bool mlirTypeIsAFloat4E2M1FN(MlirType type); 87 88 /// Creates an f4E2M1FN type in the given context. The type is owned by the 89 /// context. 90 MLIR_CAPI_EXPORTED MlirType mlirFloat4E2M1FNTypeGet(MlirContext ctx); 91 92 /// Returns the typeID of an Float6E2M3FN type. 93 MLIR_CAPI_EXPORTED MlirTypeID mlirFloat6E2M3FNTypeGetTypeID(void); 94 95 /// Checks whether the given type is an f6E2M3FN type. 96 MLIR_CAPI_EXPORTED bool mlirTypeIsAFloat6E2M3FN(MlirType type); 97 98 /// Creates an f6E2M3FN type in the given context. The type is owned by the 99 /// context. 100 MLIR_CAPI_EXPORTED MlirType mlirFloat6E2M3FNTypeGet(MlirContext ctx); 101 102 /// Returns the typeID of an Float6E3M2FN type. 103 MLIR_CAPI_EXPORTED MlirTypeID mlirFloat6E3M2FNTypeGetTypeID(void); 104 105 /// Checks whether the given type is an f6E3M2FN type. 106 MLIR_CAPI_EXPORTED bool mlirTypeIsAFloat6E3M2FN(MlirType type); 107 108 /// Creates an f6E3M2FN type in the given context. The type is owned by the 109 /// context. 110 MLIR_CAPI_EXPORTED MlirType mlirFloat6E3M2FNTypeGet(MlirContext ctx); 111 112 /// Returns the typeID of an Float8E5M2 type. 113 MLIR_CAPI_EXPORTED MlirTypeID mlirFloat8E5M2TypeGetTypeID(void); 114 115 /// Checks whether the given type is an f8E5M2 type. 116 MLIR_CAPI_EXPORTED bool mlirTypeIsAFloat8E5M2(MlirType type); 117 118 /// Creates an f8E5M2 type in the given context. The type is owned by the 119 /// context. 120 MLIR_CAPI_EXPORTED MlirType mlirFloat8E5M2TypeGet(MlirContext ctx); 121 122 /// Returns the typeID of an Float8E4M3 type. 123 MLIR_CAPI_EXPORTED MlirTypeID mlirFloat8E4M3TypeGetTypeID(void); 124 125 /// Checks whether the given type is an f8E4M3 type. 126 MLIR_CAPI_EXPORTED bool mlirTypeIsAFloat8E4M3(MlirType type); 127 128 /// Creates an f8E4M3 type in the given context. The type is owned by the 129 /// context. 130 MLIR_CAPI_EXPORTED MlirType mlirFloat8E4M3TypeGet(MlirContext ctx); 131 132 /// Returns the typeID of an Float8E4M3FN type. 133 MLIR_CAPI_EXPORTED MlirTypeID mlirFloat8E4M3FNTypeGetTypeID(void); 134 135 /// Checks whether the given type is an f8E4M3FN type. 136 MLIR_CAPI_EXPORTED bool mlirTypeIsAFloat8E4M3FN(MlirType type); 137 138 /// Creates an f8E4M3FN type in the given context. The type is owned by the 139 /// context. 140 MLIR_CAPI_EXPORTED MlirType mlirFloat8E4M3FNTypeGet(MlirContext ctx); 141 142 /// Returns the typeID of an Float8E5M2FNUZ type. 143 MLIR_CAPI_EXPORTED MlirTypeID mlirFloat8E5M2FNUZTypeGetTypeID(void); 144 145 /// Checks whether the given type is an f8E5M2FNUZ type. 146 MLIR_CAPI_EXPORTED bool mlirTypeIsAFloat8E5M2FNUZ(MlirType type); 147 148 /// Creates an f8E5M2FNUZ type in the given context. The type is owned by the 149 /// context. 150 MLIR_CAPI_EXPORTED MlirType mlirFloat8E5M2FNUZTypeGet(MlirContext ctx); 151 152 /// Returns the typeID of an Float8E4M3FNUZ type. 153 MLIR_CAPI_EXPORTED MlirTypeID mlirFloat8E4M3FNUZTypeGetTypeID(void); 154 155 /// Checks whether the given type is an f8E4M3FNUZ type. 156 MLIR_CAPI_EXPORTED bool mlirTypeIsAFloat8E4M3FNUZ(MlirType type); 157 158 /// Creates an f8E4M3FNUZ type in the given context. The type is owned by the 159 /// context. 160 MLIR_CAPI_EXPORTED MlirType mlirFloat8E4M3FNUZTypeGet(MlirContext ctx); 161 162 /// Returns the typeID of an Float8E4M3B11FNUZ type. 163 MLIR_CAPI_EXPORTED MlirTypeID mlirFloat8E4M3B11FNUZTypeGetTypeID(void); 164 165 /// Checks whether the given type is an f8E4M3B11FNUZ type. 166 MLIR_CAPI_EXPORTED bool mlirTypeIsAFloat8E4M3B11FNUZ(MlirType type); 167 168 /// Creates an f8E4M3B11FNUZ type in the given context. The type is owned by the 169 /// context. 170 MLIR_CAPI_EXPORTED MlirType mlirFloat8E4M3B11FNUZTypeGet(MlirContext ctx); 171 172 /// Returns the typeID of an Float8E3M4 type. 173 MLIR_CAPI_EXPORTED MlirTypeID mlirFloat8E3M4TypeGetTypeID(void); 174 175 /// Checks whether the given type is an f8E3M4 type. 176 MLIR_CAPI_EXPORTED bool mlirTypeIsAFloat8E3M4(MlirType type); 177 178 /// Creates an f8E3M4 type in the given context. The type is owned by the 179 /// context. 180 MLIR_CAPI_EXPORTED MlirType mlirFloat8E3M4TypeGet(MlirContext ctx); 181 182 /// Returns the typeID of an Float8E8M0FNU type. 183 MLIR_CAPI_EXPORTED MlirTypeID mlirFloat8E8M0FNUTypeGetTypeID(void); 184 185 /// Checks whether the given type is an f8E8M0FNU type. 186 MLIR_CAPI_EXPORTED bool mlirTypeIsAFloat8E8M0FNU(MlirType type); 187 188 /// Creates an f8E8M0FNU type in the given context. The type is owned by the 189 /// context. 190 MLIR_CAPI_EXPORTED MlirType mlirFloat8E8M0FNUTypeGet(MlirContext ctx); 191 192 /// Returns the typeID of an BFloat16 type. 193 MLIR_CAPI_EXPORTED MlirTypeID mlirBFloat16TypeGetTypeID(void); 194 195 /// Checks whether the given type is a bf16 type. 196 MLIR_CAPI_EXPORTED bool mlirTypeIsABF16(MlirType type); 197 198 /// Creates a bf16 type in the given context. The type is owned by the 199 /// context. 200 MLIR_CAPI_EXPORTED MlirType mlirBF16TypeGet(MlirContext ctx); 201 202 /// Returns the typeID of an Float16 type. 203 MLIR_CAPI_EXPORTED MlirTypeID mlirFloat16TypeGetTypeID(void); 204 205 /// Checks whether the given type is an f16 type. 206 MLIR_CAPI_EXPORTED bool mlirTypeIsAF16(MlirType type); 207 208 /// Creates an f16 type in the given context. The type is owned by the 209 /// context. 210 MLIR_CAPI_EXPORTED MlirType mlirF16TypeGet(MlirContext ctx); 211 212 /// Returns the typeID of an Float32 type. 213 MLIR_CAPI_EXPORTED MlirTypeID mlirFloat32TypeGetTypeID(void); 214 215 /// Checks whether the given type is an f32 type. 216 MLIR_CAPI_EXPORTED bool mlirTypeIsAF32(MlirType type); 217 218 /// Creates an f32 type in the given context. The type is owned by the 219 /// context. 220 MLIR_CAPI_EXPORTED MlirType mlirF32TypeGet(MlirContext ctx); 221 222 /// Returns the typeID of an Float64 type. 223 MLIR_CAPI_EXPORTED MlirTypeID mlirFloat64TypeGetTypeID(void); 224 225 /// Checks whether the given type is an f64 type. 226 MLIR_CAPI_EXPORTED bool mlirTypeIsAF64(MlirType type); 227 228 /// Creates a f64 type in the given context. The type is owned by the 229 /// context. 230 MLIR_CAPI_EXPORTED MlirType mlirF64TypeGet(MlirContext ctx); 231 232 /// Returns the typeID of a TF32 type. 233 MLIR_CAPI_EXPORTED MlirTypeID mlirFloatTF32TypeGetTypeID(void); 234 235 /// Checks whether the given type is an TF32 type. 236 MLIR_CAPI_EXPORTED bool mlirTypeIsATF32(MlirType type); 237 238 /// Creates a TF32 type in the given context. The type is owned by the 239 /// context. 240 MLIR_CAPI_EXPORTED MlirType mlirTF32TypeGet(MlirContext ctx); 241 242 //===----------------------------------------------------------------------===// 243 // None type. 244 //===----------------------------------------------------------------------===// 245 246 /// Returns the typeID of an None type. 247 MLIR_CAPI_EXPORTED MlirTypeID mlirNoneTypeGetTypeID(void); 248 249 /// Checks whether the given type is a None type. 250 MLIR_CAPI_EXPORTED bool mlirTypeIsANone(MlirType type); 251 252 /// Creates a None type in the given context. The type is owned by the 253 /// context. 254 MLIR_CAPI_EXPORTED MlirType mlirNoneTypeGet(MlirContext ctx); 255 256 //===----------------------------------------------------------------------===// 257 // Complex type. 258 //===----------------------------------------------------------------------===// 259 260 /// Returns the typeID of an Complex type. 261 MLIR_CAPI_EXPORTED MlirTypeID mlirComplexTypeGetTypeID(void); 262 263 /// Checks whether the given type is a Complex type. 264 MLIR_CAPI_EXPORTED bool mlirTypeIsAComplex(MlirType type); 265 266 /// Creates a complex type with the given element type in the same context as 267 /// the element type. The type is owned by the context. 268 MLIR_CAPI_EXPORTED MlirType mlirComplexTypeGet(MlirType elementType); 269 270 /// Returns the element type of the given complex type. 271 MLIR_CAPI_EXPORTED MlirType mlirComplexTypeGetElementType(MlirType type); 272 273 //===----------------------------------------------------------------------===// 274 // Shaped type. 275 //===----------------------------------------------------------------------===// 276 277 /// Checks whether the given type is a Shaped type. 278 MLIR_CAPI_EXPORTED bool mlirTypeIsAShaped(MlirType type); 279 280 /// Returns the element type of the shaped type. 281 MLIR_CAPI_EXPORTED MlirType mlirShapedTypeGetElementType(MlirType type); 282 283 /// Checks whether the given shaped type is ranked. 284 MLIR_CAPI_EXPORTED bool mlirShapedTypeHasRank(MlirType type); 285 286 /// Returns the rank of the given ranked shaped type. 287 MLIR_CAPI_EXPORTED int64_t mlirShapedTypeGetRank(MlirType type); 288 289 /// Checks whether the given shaped type has a static shape. 290 MLIR_CAPI_EXPORTED bool mlirShapedTypeHasStaticShape(MlirType type); 291 292 /// Checks wither the dim-th dimension of the given shaped type is dynamic. 293 MLIR_CAPI_EXPORTED bool mlirShapedTypeIsDynamicDim(MlirType type, intptr_t dim); 294 295 /// Returns the dim-th dimension of the given ranked shaped type. 296 MLIR_CAPI_EXPORTED int64_t mlirShapedTypeGetDimSize(MlirType type, 297 intptr_t dim); 298 299 /// Checks whether the given value is used as a placeholder for dynamic sizes 300 /// in shaped types. 301 MLIR_CAPI_EXPORTED bool mlirShapedTypeIsDynamicSize(int64_t size); 302 303 /// Returns the value indicating a dynamic size in a shaped type. Prefer 304 /// mlirShapedTypeIsDynamicSize to direct comparisons with this value. 305 MLIR_CAPI_EXPORTED int64_t mlirShapedTypeGetDynamicSize(void); 306 307 /// Checks whether the given value is used as a placeholder for dynamic strides 308 /// and offsets in shaped types. 309 MLIR_CAPI_EXPORTED bool mlirShapedTypeIsDynamicStrideOrOffset(int64_t val); 310 311 /// Returns the value indicating a dynamic stride or offset in a shaped type. 312 /// Prefer mlirShapedTypeGetDynamicStrideOrOffset to direct comparisons with 313 /// this value. 314 MLIR_CAPI_EXPORTED int64_t mlirShapedTypeGetDynamicStrideOrOffset(void); 315 316 //===----------------------------------------------------------------------===// 317 // Vector type. 318 //===----------------------------------------------------------------------===// 319 320 /// Returns the typeID of an Vector type. 321 MLIR_CAPI_EXPORTED MlirTypeID mlirVectorTypeGetTypeID(void); 322 323 /// Checks whether the given type is a Vector type. 324 MLIR_CAPI_EXPORTED bool mlirTypeIsAVector(MlirType type); 325 326 /// Creates a vector type of the shape identified by its rank and dimensions, 327 /// with the given element type in the same context as the element type. The 328 /// type is owned by the context. 329 MLIR_CAPI_EXPORTED MlirType mlirVectorTypeGet(intptr_t rank, 330 const int64_t *shape, 331 MlirType elementType); 332 333 /// Same as "mlirVectorTypeGet" but returns a nullptr wrapping MlirType on 334 /// illegal arguments, emitting appropriate diagnostics. 335 MLIR_CAPI_EXPORTED MlirType mlirVectorTypeGetChecked(MlirLocation loc, 336 intptr_t rank, 337 const int64_t *shape, 338 MlirType elementType); 339 340 /// Creates a scalable vector type with the shape identified by its rank and 341 /// dimensions. A subset of dimensions may be marked as scalable via the 342 /// corresponding flag list, which is expected to have as many entries as the 343 /// rank of the vector. The vector is created in the same context as the element 344 /// type. 345 MLIR_CAPI_EXPORTED MlirType mlirVectorTypeGetScalable(intptr_t rank, 346 const int64_t *shape, 347 const bool *scalable, 348 MlirType elementType); 349 350 /// Same as "mlirVectorTypeGetScalable" but returns a nullptr wrapping MlirType 351 /// on illegal arguments, emitting appropriate diagnostics. 352 MLIR_CAPI_EXPORTED 353 MlirType mlirVectorTypeGetScalableChecked(MlirLocation loc, intptr_t rank, 354 const int64_t *shape, 355 const bool *scalable, 356 MlirType elementType); 357 358 /// Checks whether the given vector type is scalable, i.e., has at least one 359 /// scalable dimension. 360 MLIR_CAPI_EXPORTED bool mlirVectorTypeIsScalable(MlirType type); 361 362 /// Checks whether the "dim"-th dimension of the given vector is scalable. 363 MLIR_CAPI_EXPORTED bool mlirVectorTypeIsDimScalable(MlirType type, 364 intptr_t dim); 365 366 //===----------------------------------------------------------------------===// 367 // Ranked / Unranked Tensor type. 368 //===----------------------------------------------------------------------===// 369 370 /// Checks whether the given type is a Tensor type. 371 MLIR_CAPI_EXPORTED bool mlirTypeIsATensor(MlirType type); 372 373 /// Returns the typeID of an RankedTensor type. 374 MLIR_CAPI_EXPORTED MlirTypeID mlirRankedTensorTypeGetTypeID(void); 375 376 /// Checks whether the given type is a ranked tensor type. 377 MLIR_CAPI_EXPORTED bool mlirTypeIsARankedTensor(MlirType type); 378 379 /// Returns the typeID of an UnrankedTensor type. 380 MLIR_CAPI_EXPORTED MlirTypeID mlirUnrankedTensorTypeGetTypeID(void); 381 382 /// Checks whether the given type is an unranked tensor type. 383 MLIR_CAPI_EXPORTED bool mlirTypeIsAUnrankedTensor(MlirType type); 384 385 /// Creates a tensor type of a fixed rank with the given shape, element type, 386 /// and optional encoding in the same context as the element type. The type is 387 /// owned by the context. Tensor types without any specific encoding field 388 /// should assign mlirAttributeGetNull() to this parameter. 389 MLIR_CAPI_EXPORTED MlirType mlirRankedTensorTypeGet(intptr_t rank, 390 const int64_t *shape, 391 MlirType elementType, 392 MlirAttribute encoding); 393 394 /// Same as "mlirRankedTensorTypeGet" but returns a nullptr wrapping MlirType on 395 /// illegal arguments, emitting appropriate diagnostics. 396 MLIR_CAPI_EXPORTED MlirType mlirRankedTensorTypeGetChecked( 397 MlirLocation loc, intptr_t rank, const int64_t *shape, MlirType elementType, 398 MlirAttribute encoding); 399 400 /// Gets the 'encoding' attribute from the ranked tensor type, returning a null 401 /// attribute if none. 402 MLIR_CAPI_EXPORTED MlirAttribute mlirRankedTensorTypeGetEncoding(MlirType type); 403 404 /// Creates an unranked tensor type with the given element type in the same 405 /// context as the element type. The type is owned by the context. 406 MLIR_CAPI_EXPORTED MlirType mlirUnrankedTensorTypeGet(MlirType elementType); 407 408 /// Same as "mlirUnrankedTensorTypeGet" but returns a nullptr wrapping MlirType 409 /// on illegal arguments, emitting appropriate diagnostics. 410 MLIR_CAPI_EXPORTED MlirType 411 mlirUnrankedTensorTypeGetChecked(MlirLocation loc, MlirType elementType); 412 413 //===----------------------------------------------------------------------===// 414 // Ranked / Unranked MemRef type. 415 //===----------------------------------------------------------------------===// 416 417 /// Returns the typeID of an MemRef type. 418 MLIR_CAPI_EXPORTED MlirTypeID mlirMemRefTypeGetTypeID(void); 419 420 /// Checks whether the given type is a MemRef type. 421 MLIR_CAPI_EXPORTED bool mlirTypeIsAMemRef(MlirType type); 422 423 /// Returns the typeID of an UnrankedMemRef type. 424 MLIR_CAPI_EXPORTED MlirTypeID mlirUnrankedMemRefTypeGetTypeID(void); 425 426 /// Checks whether the given type is an UnrankedMemRef type. 427 MLIR_CAPI_EXPORTED bool mlirTypeIsAUnrankedMemRef(MlirType type); 428 429 /// Creates a MemRef type with the given rank and shape, a potentially empty 430 /// list of affine layout maps, the given memory space and element type, in the 431 /// same context as element type. The type is owned by the context. 432 MLIR_CAPI_EXPORTED MlirType mlirMemRefTypeGet(MlirType elementType, 433 intptr_t rank, 434 const int64_t *shape, 435 MlirAttribute layout, 436 MlirAttribute memorySpace); 437 438 /// Same as "mlirMemRefTypeGet" but returns a nullptr-wrapping MlirType o 439 /// illegal arguments, emitting appropriate diagnostics. 440 MLIR_CAPI_EXPORTED MlirType mlirMemRefTypeGetChecked( 441 MlirLocation loc, MlirType elementType, intptr_t rank, const int64_t *shape, 442 MlirAttribute layout, MlirAttribute memorySpace); 443 444 /// Creates a MemRef type with the given rank, shape, memory space and element 445 /// type in the same context as the element type. The type has no affine maps, 446 /// i.e. represents a default row-major contiguous memref. The type is owned by 447 /// the context. 448 MLIR_CAPI_EXPORTED MlirType 449 mlirMemRefTypeContiguousGet(MlirType elementType, intptr_t rank, 450 const int64_t *shape, MlirAttribute memorySpace); 451 452 /// Same as "mlirMemRefTypeContiguousGet" but returns a nullptr wrapping 453 /// MlirType on illegal arguments, emitting appropriate diagnostics. 454 MLIR_CAPI_EXPORTED MlirType mlirMemRefTypeContiguousGetChecked( 455 MlirLocation loc, MlirType elementType, intptr_t rank, const int64_t *shape, 456 MlirAttribute memorySpace); 457 458 /// Creates an Unranked MemRef type with the given element type and in the given 459 /// memory space. The type is owned by the context of element type. 460 MLIR_CAPI_EXPORTED MlirType 461 mlirUnrankedMemRefTypeGet(MlirType elementType, MlirAttribute memorySpace); 462 463 /// Same as "mlirUnrankedMemRefTypeGet" but returns a nullptr wrapping 464 /// MlirType on illegal arguments, emitting appropriate diagnostics. 465 MLIR_CAPI_EXPORTED MlirType mlirUnrankedMemRefTypeGetChecked( 466 MlirLocation loc, MlirType elementType, MlirAttribute memorySpace); 467 468 /// Returns the layout of the given MemRef type. 469 MLIR_CAPI_EXPORTED MlirAttribute mlirMemRefTypeGetLayout(MlirType type); 470 471 /// Returns the affine map of the given MemRef type. 472 MLIR_CAPI_EXPORTED MlirAffineMap mlirMemRefTypeGetAffineMap(MlirType type); 473 474 /// Returns the memory space of the given MemRef type. 475 MLIR_CAPI_EXPORTED MlirAttribute mlirMemRefTypeGetMemorySpace(MlirType type); 476 477 /// Returns the strides of the MemRef if the layout map is in strided form. 478 /// Both strides and offset are out params. strides must point to pre-allocated 479 /// memory of length equal to the rank of the memref. 480 MLIR_CAPI_EXPORTED MlirLogicalResult mlirMemRefTypeGetStridesAndOffset( 481 MlirType type, int64_t *strides, int64_t *offset); 482 483 /// Returns the memory spcae of the given Unranked MemRef type. 484 MLIR_CAPI_EXPORTED MlirAttribute 485 mlirUnrankedMemrefGetMemorySpace(MlirType type); 486 487 //===----------------------------------------------------------------------===// 488 // Tuple type. 489 //===----------------------------------------------------------------------===// 490 491 /// Returns the typeID of an Tuple type. 492 MLIR_CAPI_EXPORTED MlirTypeID mlirTupleTypeGetTypeID(void); 493 494 /// Checks whether the given type is a tuple type. 495 MLIR_CAPI_EXPORTED bool mlirTypeIsATuple(MlirType type); 496 497 /// Creates a tuple type that consists of the given list of elemental types. The 498 /// type is owned by the context. 499 MLIR_CAPI_EXPORTED MlirType mlirTupleTypeGet(MlirContext ctx, 500 intptr_t numElements, 501 MlirType const *elements); 502 503 /// Returns the number of types contained in a tuple. 504 MLIR_CAPI_EXPORTED intptr_t mlirTupleTypeGetNumTypes(MlirType type); 505 506 /// Returns the pos-th type in the tuple type. 507 MLIR_CAPI_EXPORTED MlirType mlirTupleTypeGetType(MlirType type, intptr_t pos); 508 509 //===----------------------------------------------------------------------===// 510 // Function type. 511 //===----------------------------------------------------------------------===// 512 513 /// Returns the typeID of an Function type. 514 MLIR_CAPI_EXPORTED MlirTypeID mlirFunctionTypeGetTypeID(void); 515 516 /// Checks whether the given type is a function type. 517 MLIR_CAPI_EXPORTED bool mlirTypeIsAFunction(MlirType type); 518 519 /// Creates a function type, mapping a list of input types to result types. 520 MLIR_CAPI_EXPORTED MlirType mlirFunctionTypeGet(MlirContext ctx, 521 intptr_t numInputs, 522 MlirType const *inputs, 523 intptr_t numResults, 524 MlirType const *results); 525 526 /// Returns the number of input types. 527 MLIR_CAPI_EXPORTED intptr_t mlirFunctionTypeGetNumInputs(MlirType type); 528 529 /// Returns the number of result types. 530 MLIR_CAPI_EXPORTED intptr_t mlirFunctionTypeGetNumResults(MlirType type); 531 532 /// Returns the pos-th input type. 533 MLIR_CAPI_EXPORTED MlirType mlirFunctionTypeGetInput(MlirType type, 534 intptr_t pos); 535 536 /// Returns the pos-th result type. 537 MLIR_CAPI_EXPORTED MlirType mlirFunctionTypeGetResult(MlirType type, 538 intptr_t pos); 539 540 //===----------------------------------------------------------------------===// 541 // Opaque type. 542 //===----------------------------------------------------------------------===// 543 544 /// Returns the typeID of an Opaque type. 545 MLIR_CAPI_EXPORTED MlirTypeID mlirOpaqueTypeGetTypeID(void); 546 547 /// Checks whether the given type is an opaque type. 548 MLIR_CAPI_EXPORTED bool mlirTypeIsAOpaque(MlirType type); 549 550 /// Creates an opaque type in the given context associated with the dialect 551 /// identified by its namespace. The type contains opaque byte data of the 552 /// specified length (data need not be null-terminated). 553 MLIR_CAPI_EXPORTED MlirType mlirOpaqueTypeGet(MlirContext ctx, 554 MlirStringRef dialectNamespace, 555 MlirStringRef typeData); 556 557 /// Returns the namespace of the dialect with which the given opaque type 558 /// is associated. The namespace string is owned by the context. 559 MLIR_CAPI_EXPORTED MlirStringRef 560 mlirOpaqueTypeGetDialectNamespace(MlirType type); 561 562 /// Returns the raw data as a string reference. The data remains live as long as 563 /// the context in which the type lives. 564 MLIR_CAPI_EXPORTED MlirStringRef mlirOpaqueTypeGetData(MlirType type); 565 566 #ifdef __cplusplus 567 } 568 #endif 569 570 #endif // MLIR_C_BUILTINTYPES_H 571