MLIR  20.0.0git
BuiltinTypes.cpp
Go to the documentation of this file.
1 //===- BuiltinTypes.cpp - C Interface to MLIR Builtin Types ---------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "mlir-c/BuiltinTypes.h"
10 #include "mlir-c/AffineMap.h"
11 #include "mlir-c/IR.h"
12 #include "mlir-c/Support.h"
13 #include "mlir/CAPI/AffineMap.h"
14 #include "mlir/CAPI/IR.h"
15 #include "mlir/CAPI/Support.h"
16 #include "mlir/IR/AffineMap.h"
17 #include "mlir/IR/BuiltinTypes.h"
18 #include "mlir/IR/Types.h"
19 
20 #include <algorithm>
21 
22 using namespace mlir;
23 
24 //===----------------------------------------------------------------------===//
25 // Integer types.
26 //===----------------------------------------------------------------------===//
27 
28 MlirTypeID mlirIntegerTypeGetTypeID() { return wrap(IntegerType::getTypeID()); }
29 
30 bool mlirTypeIsAInteger(MlirType type) {
31  return llvm::isa<IntegerType>(unwrap(type));
32 }
33 
34 MlirType mlirIntegerTypeGet(MlirContext ctx, unsigned bitwidth) {
35  return wrap(IntegerType::get(unwrap(ctx), bitwidth));
36 }
37 
38 MlirType mlirIntegerTypeSignedGet(MlirContext ctx, unsigned bitwidth) {
39  return wrap(IntegerType::get(unwrap(ctx), bitwidth, IntegerType::Signed));
40 }
41 
42 MlirType mlirIntegerTypeUnsignedGet(MlirContext ctx, unsigned bitwidth) {
43  return wrap(IntegerType::get(unwrap(ctx), bitwidth, IntegerType::Unsigned));
44 }
45 
46 unsigned mlirIntegerTypeGetWidth(MlirType type) {
47  return llvm::cast<IntegerType>(unwrap(type)).getWidth();
48 }
49 
50 bool mlirIntegerTypeIsSignless(MlirType type) {
51  return llvm::cast<IntegerType>(unwrap(type)).isSignless();
52 }
53 
54 bool mlirIntegerTypeIsSigned(MlirType type) {
55  return llvm::cast<IntegerType>(unwrap(type)).isSigned();
56 }
57 
58 bool mlirIntegerTypeIsUnsigned(MlirType type) {
59  return llvm::cast<IntegerType>(unwrap(type)).isUnsigned();
60 }
61 
62 //===----------------------------------------------------------------------===//
63 // Index type.
64 //===----------------------------------------------------------------------===//
65 
66 MlirTypeID mlirIndexTypeGetTypeID() { return wrap(IndexType::getTypeID()); }
67 
68 bool mlirTypeIsAIndex(MlirType type) {
69  return llvm::isa<IndexType>(unwrap(type));
70 }
71 
72 MlirType mlirIndexTypeGet(MlirContext ctx) {
73  return wrap(IndexType::get(unwrap(ctx)));
74 }
75 
76 //===----------------------------------------------------------------------===//
77 // Floating-point types.
78 //===----------------------------------------------------------------------===//
79 
80 bool mlirTypeIsAFloat(MlirType type) {
81  return llvm::isa<FloatType>(unwrap(type));
82 }
83 
84 unsigned mlirFloatTypeGetWidth(MlirType type) {
85  return llvm::cast<FloatType>(unwrap(type)).getWidth();
86 }
87 
89  return wrap(Float4E2M1FNType::getTypeID());
90 }
91 
92 bool mlirTypeIsAFloat4E2M1FN(MlirType type) {
93  return unwrap(type).isFloat4E2M1FN();
94 }
95 
96 MlirType mlirFloat4E2M1FNTypeGet(MlirContext ctx) {
98 }
99 
101  return wrap(Float6E2M3FNType::getTypeID());
102 }
103 
104 bool mlirTypeIsAFloat6E2M3FN(MlirType type) {
105  return unwrap(type).isFloat6E2M3FN();
106 }
107 
108 MlirType mlirFloat6E2M3FNTypeGet(MlirContext ctx) {
109  return wrap(FloatType::getFloat6E2M3FN(unwrap(ctx)));
110 }
111 
113  return wrap(Float6E3M2FNType::getTypeID());
114 }
115 
116 bool mlirTypeIsAFloat6E3M2FN(MlirType type) {
117  return unwrap(type).isFloat6E3M2FN();
118 }
119 
120 MlirType mlirFloat6E3M2FNTypeGet(MlirContext ctx) {
121  return wrap(FloatType::getFloat6E3M2FN(unwrap(ctx)));
122 }
123 
125  return wrap(Float8E5M2Type::getTypeID());
126 }
127 
128 bool mlirTypeIsAFloat8E5M2(MlirType type) {
129  return unwrap(type).isFloat8E5M2();
130 }
131 
132 MlirType mlirFloat8E5M2TypeGet(MlirContext ctx) {
133  return wrap(FloatType::getFloat8E5M2(unwrap(ctx)));
134 }
135 
137  return wrap(Float8E4M3Type::getTypeID());
138 }
139 
140 bool mlirTypeIsAFloat8E4M3(MlirType type) {
141  return unwrap(type).isFloat8E4M3();
142 }
143 
144 MlirType mlirFloat8E4M3TypeGet(MlirContext ctx) {
145  return wrap(FloatType::getFloat8E4M3(unwrap(ctx)));
146 }
147 
149  return wrap(Float8E4M3FNType::getTypeID());
150 }
151 
152 bool mlirTypeIsAFloat8E4M3FN(MlirType type) {
153  return unwrap(type).isFloat8E4M3FN();
154 }
155 
156 MlirType mlirFloat8E4M3FNTypeGet(MlirContext ctx) {
157  return wrap(FloatType::getFloat8E4M3FN(unwrap(ctx)));
158 }
159 
161  return wrap(Float8E5M2FNUZType::getTypeID());
162 }
163 
164 bool mlirTypeIsAFloat8E5M2FNUZ(MlirType type) {
165  return unwrap(type).isFloat8E5M2FNUZ();
166 }
167 
168 MlirType mlirFloat8E5M2FNUZTypeGet(MlirContext ctx) {
170 }
171 
173  return wrap(Float8E4M3FNUZType::getTypeID());
174 }
175 
176 bool mlirTypeIsAFloat8E4M3FNUZ(MlirType type) {
177  return unwrap(type).isFloat8E4M3FNUZ();
178 }
179 
180 MlirType mlirFloat8E4M3FNUZTypeGet(MlirContext ctx) {
182 }
183 
185  return wrap(Float8E4M3B11FNUZType::getTypeID());
186 }
187 
188 bool mlirTypeIsAFloat8E4M3B11FNUZ(MlirType type) {
189  return unwrap(type).isFloat8E4M3B11FNUZ();
190 }
191 
192 MlirType mlirFloat8E4M3B11FNUZTypeGet(MlirContext ctx) {
194 }
195 
197  return wrap(Float8E3M4Type::getTypeID());
198 }
199 
200 bool mlirTypeIsAFloat8E3M4(MlirType type) {
201  return unwrap(type).isFloat8E3M4();
202 }
203 
204 MlirType mlirFloat8E3M4TypeGet(MlirContext ctx) {
205  return wrap(FloatType::getFloat8E3M4(unwrap(ctx)));
206 }
207 
209  return wrap(Float8E8M0FNUType::getTypeID());
210 }
211 
212 bool mlirTypeIsAFloat8E8M0FNU(MlirType type) {
213  return unwrap(type).isFloat8E8M0FNU();
214 }
215 
216 MlirType mlirFloat8E8M0FNUTypeGet(MlirContext ctx) {
218 }
219 
221  return wrap(BFloat16Type::getTypeID());
222 }
223 
224 bool mlirTypeIsABF16(MlirType type) { return unwrap(type).isBF16(); }
225 
226 MlirType mlirBF16TypeGet(MlirContext ctx) {
227  return wrap(FloatType::getBF16(unwrap(ctx)));
228 }
229 
230 MlirTypeID mlirFloat16TypeGetTypeID() { return wrap(Float16Type::getTypeID()); }
231 
232 bool mlirTypeIsAF16(MlirType type) { return unwrap(type).isF16(); }
233 
234 MlirType mlirF16TypeGet(MlirContext ctx) {
235  return wrap(FloatType::getF16(unwrap(ctx)));
236 }
237 
239  return wrap(FloatTF32Type::getTypeID());
240 }
241 
242 bool mlirTypeIsATF32(MlirType type) { return unwrap(type).isTF32(); }
243 
244 MlirType mlirTF32TypeGet(MlirContext ctx) {
245  return wrap(FloatType::getTF32(unwrap(ctx)));
246 }
247 
248 MlirTypeID mlirFloat32TypeGetTypeID() { return wrap(Float32Type::getTypeID()); }
249 
250 bool mlirTypeIsAF32(MlirType type) { return unwrap(type).isF32(); }
251 
252 MlirType mlirF32TypeGet(MlirContext ctx) {
253  return wrap(FloatType::getF32(unwrap(ctx)));
254 }
255 
256 MlirTypeID mlirFloat64TypeGetTypeID() { return wrap(Float64Type::getTypeID()); }
257 
258 bool mlirTypeIsAF64(MlirType type) { return unwrap(type).isF64(); }
259 
260 MlirType mlirF64TypeGet(MlirContext ctx) {
261  return wrap(FloatType::getF64(unwrap(ctx)));
262 }
263 
264 //===----------------------------------------------------------------------===//
265 // None type.
266 //===----------------------------------------------------------------------===//
267 
268 MlirTypeID mlirNoneTypeGetTypeID() { return wrap(NoneType::getTypeID()); }
269 
270 bool mlirTypeIsANone(MlirType type) {
271  return llvm::isa<NoneType>(unwrap(type));
272 }
273 
274 MlirType mlirNoneTypeGet(MlirContext ctx) {
275  return wrap(NoneType::get(unwrap(ctx)));
276 }
277 
278 //===----------------------------------------------------------------------===//
279 // Complex type.
280 //===----------------------------------------------------------------------===//
281 
282 MlirTypeID mlirComplexTypeGetTypeID() { return wrap(ComplexType::getTypeID()); }
283 
284 bool mlirTypeIsAComplex(MlirType type) {
285  return llvm::isa<ComplexType>(unwrap(type));
286 }
287 
288 MlirType mlirComplexTypeGet(MlirType elementType) {
289  return wrap(ComplexType::get(unwrap(elementType)));
290 }
291 
292 MlirType mlirComplexTypeGetElementType(MlirType type) {
293  return wrap(llvm::cast<ComplexType>(unwrap(type)).getElementType());
294 }
295 
296 //===----------------------------------------------------------------------===//
297 // Shaped type.
298 //===----------------------------------------------------------------------===//
299 
300 bool mlirTypeIsAShaped(MlirType type) {
301  return llvm::isa<ShapedType>(unwrap(type));
302 }
303 
304 MlirType mlirShapedTypeGetElementType(MlirType type) {
305  return wrap(llvm::cast<ShapedType>(unwrap(type)).getElementType());
306 }
307 
308 bool mlirShapedTypeHasRank(MlirType type) {
309  return llvm::cast<ShapedType>(unwrap(type)).hasRank();
310 }
311 
312 int64_t mlirShapedTypeGetRank(MlirType type) {
313  return llvm::cast<ShapedType>(unwrap(type)).getRank();
314 }
315 
316 bool mlirShapedTypeHasStaticShape(MlirType type) {
317  return llvm::cast<ShapedType>(unwrap(type)).hasStaticShape();
318 }
319 
320 bool mlirShapedTypeIsDynamicDim(MlirType type, intptr_t dim) {
321  return llvm::cast<ShapedType>(unwrap(type))
322  .isDynamicDim(static_cast<unsigned>(dim));
323 }
324 
325 int64_t mlirShapedTypeGetDimSize(MlirType type, intptr_t dim) {
326  return llvm::cast<ShapedType>(unwrap(type))
327  .getDimSize(static_cast<unsigned>(dim));
328 }
329 
330 int64_t mlirShapedTypeGetDynamicSize() { return ShapedType::kDynamic; }
331 
332 bool mlirShapedTypeIsDynamicSize(int64_t size) {
333  return ShapedType::isDynamic(size);
334 }
335 
337  return ShapedType::isDynamic(val);
338 }
339 
341  return ShapedType::kDynamic;
342 }
343 
344 //===----------------------------------------------------------------------===//
345 // Vector type.
346 //===----------------------------------------------------------------------===//
347 
348 MlirTypeID mlirVectorTypeGetTypeID() { return wrap(VectorType::getTypeID()); }
349 
350 bool mlirTypeIsAVector(MlirType type) {
351  return llvm::isa<VectorType>(unwrap(type));
352 }
353 
354 MlirType mlirVectorTypeGet(intptr_t rank, const int64_t *shape,
355  MlirType elementType) {
356  return wrap(VectorType::get(llvm::ArrayRef(shape, static_cast<size_t>(rank)),
357  unwrap(elementType)));
358 }
359 
360 MlirType mlirVectorTypeGetChecked(MlirLocation loc, intptr_t rank,
361  const int64_t *shape, MlirType elementType) {
362  return wrap(VectorType::getChecked(
363  unwrap(loc), llvm::ArrayRef(shape, static_cast<size_t>(rank)),
364  unwrap(elementType)));
365 }
366 
367 MlirType mlirVectorTypeGetScalable(intptr_t rank, const int64_t *shape,
368  const bool *scalable, MlirType elementType) {
369  return wrap(VectorType::get(
370  llvm::ArrayRef(shape, static_cast<size_t>(rank)), unwrap(elementType),
371  llvm::ArrayRef(scalable, static_cast<size_t>(rank))));
372 }
373 
374 MlirType mlirVectorTypeGetScalableChecked(MlirLocation loc, intptr_t rank,
375  const int64_t *shape,
376  const bool *scalable,
377  MlirType elementType) {
378  return wrap(VectorType::getChecked(
379  unwrap(loc), llvm::ArrayRef(shape, static_cast<size_t>(rank)),
380  unwrap(elementType),
381  llvm::ArrayRef(scalable, static_cast<size_t>(rank))));
382 }
383 
384 bool mlirVectorTypeIsScalable(MlirType type) {
385  return cast<VectorType>(unwrap(type)).isScalable();
386 }
387 
388 bool mlirVectorTypeIsDimScalable(MlirType type, intptr_t dim) {
389  return cast<VectorType>(unwrap(type)).getScalableDims()[dim];
390 }
391 
392 //===----------------------------------------------------------------------===//
393 // Ranked / Unranked tensor type.
394 //===----------------------------------------------------------------------===//
395 
396 bool mlirTypeIsATensor(MlirType type) {
397  return llvm::isa<TensorType>(unwrap(type));
398 }
399 
401  return wrap(RankedTensorType::getTypeID());
402 }
403 
404 bool mlirTypeIsARankedTensor(MlirType type) {
405  return llvm::isa<RankedTensorType>(unwrap(type));
406 }
407 
409  return wrap(UnrankedTensorType::getTypeID());
410 }
411 
412 bool mlirTypeIsAUnrankedTensor(MlirType type) {
413  return llvm::isa<UnrankedTensorType>(unwrap(type));
414 }
415 
416 MlirType mlirRankedTensorTypeGet(intptr_t rank, const int64_t *shape,
417  MlirType elementType, MlirAttribute encoding) {
418  return wrap(
419  RankedTensorType::get(llvm::ArrayRef(shape, static_cast<size_t>(rank)),
420  unwrap(elementType), unwrap(encoding)));
421 }
422 
423 MlirType mlirRankedTensorTypeGetChecked(MlirLocation loc, intptr_t rank,
424  const int64_t *shape,
425  MlirType elementType,
426  MlirAttribute encoding) {
427  return wrap(RankedTensorType::getChecked(
428  unwrap(loc), llvm::ArrayRef(shape, static_cast<size_t>(rank)),
429  unwrap(elementType), unwrap(encoding)));
430 }
431 
432 MlirAttribute mlirRankedTensorTypeGetEncoding(MlirType type) {
433  return wrap(llvm::cast<RankedTensorType>(unwrap(type)).getEncoding());
434 }
435 
436 MlirType mlirUnrankedTensorTypeGet(MlirType elementType) {
437  return wrap(UnrankedTensorType::get(unwrap(elementType)));
438 }
439 
440 MlirType mlirUnrankedTensorTypeGetChecked(MlirLocation loc,
441  MlirType elementType) {
442  return wrap(UnrankedTensorType::getChecked(unwrap(loc), unwrap(elementType)));
443 }
444 
445 MlirType mlirUnrankedTensorTypeGetElementType(MlirType type) {
446  return wrap(llvm::cast<UnrankedTensorType>(unwrap(type)).getElementType());
447 }
448 
449 //===----------------------------------------------------------------------===//
450 // Ranked / Unranked MemRef type.
451 //===----------------------------------------------------------------------===//
452 
453 MlirTypeID mlirMemRefTypeGetTypeID() { return wrap(MemRefType::getTypeID()); }
454 
455 bool mlirTypeIsAMemRef(MlirType type) {
456  return llvm::isa<MemRefType>(unwrap(type));
457 }
458 
459 MlirType mlirMemRefTypeGet(MlirType elementType, intptr_t rank,
460  const int64_t *shape, MlirAttribute layout,
461  MlirAttribute memorySpace) {
462  return wrap(MemRefType::get(
463  llvm::ArrayRef(shape, static_cast<size_t>(rank)), unwrap(elementType),
464  mlirAttributeIsNull(layout)
465  ? MemRefLayoutAttrInterface()
466  : llvm::cast<MemRefLayoutAttrInterface>(unwrap(layout)),
467  unwrap(memorySpace)));
468 }
469 
470 MlirType mlirMemRefTypeGetChecked(MlirLocation loc, MlirType elementType,
471  intptr_t rank, const int64_t *shape,
472  MlirAttribute layout,
473  MlirAttribute memorySpace) {
474  return wrap(MemRefType::getChecked(
475  unwrap(loc), llvm::ArrayRef(shape, static_cast<size_t>(rank)),
476  unwrap(elementType),
477  mlirAttributeIsNull(layout)
478  ? MemRefLayoutAttrInterface()
479  : llvm::cast<MemRefLayoutAttrInterface>(unwrap(layout)),
480  unwrap(memorySpace)));
481 }
482 
483 MlirType mlirMemRefTypeContiguousGet(MlirType elementType, intptr_t rank,
484  const int64_t *shape,
485  MlirAttribute memorySpace) {
486  return wrap(MemRefType::get(llvm::ArrayRef(shape, static_cast<size_t>(rank)),
487  unwrap(elementType), MemRefLayoutAttrInterface(),
488  unwrap(memorySpace)));
489 }
490 
491 MlirType mlirMemRefTypeContiguousGetChecked(MlirLocation loc,
492  MlirType elementType, intptr_t rank,
493  const int64_t *shape,
494  MlirAttribute memorySpace) {
495  return wrap(MemRefType::getChecked(
496  unwrap(loc), llvm::ArrayRef(shape, static_cast<size_t>(rank)),
497  unwrap(elementType), MemRefLayoutAttrInterface(), unwrap(memorySpace)));
498 }
499 
500 MlirAttribute mlirMemRefTypeGetLayout(MlirType type) {
501  return wrap(llvm::cast<MemRefType>(unwrap(type)).getLayout());
502 }
503 
504 MlirAffineMap mlirMemRefTypeGetAffineMap(MlirType type) {
505  return wrap(llvm::cast<MemRefType>(unwrap(type)).getLayout().getAffineMap());
506 }
507 
508 MlirAttribute mlirMemRefTypeGetMemorySpace(MlirType type) {
509  return wrap(llvm::cast<MemRefType>(unwrap(type)).getMemorySpace());
510 }
511 
513  int64_t *strides,
514  int64_t *offset) {
515  MemRefType memrefType = llvm::cast<MemRefType>(unwrap(type));
516  SmallVector<int64_t> strides_;
517  if (failed(getStridesAndOffset(memrefType, strides_, *offset)))
518  return mlirLogicalResultFailure();
519 
520  (void)std::copy(strides_.begin(), strides_.end(), strides);
521  return mlirLogicalResultSuccess();
522 }
523 
525  return wrap(UnrankedMemRefType::getTypeID());
526 }
527 
528 bool mlirTypeIsAUnrankedMemRef(MlirType type) {
529  return llvm::isa<UnrankedMemRefType>(unwrap(type));
530 }
531 
532 MlirType mlirUnrankedMemRefTypeGet(MlirType elementType,
533  MlirAttribute memorySpace) {
534  return wrap(
535  UnrankedMemRefType::get(unwrap(elementType), unwrap(memorySpace)));
536 }
537 
538 MlirType mlirUnrankedMemRefTypeGetChecked(MlirLocation loc,
539  MlirType elementType,
540  MlirAttribute memorySpace) {
541  return wrap(UnrankedMemRefType::getChecked(unwrap(loc), unwrap(elementType),
542  unwrap(memorySpace)));
543 }
544 
545 MlirAttribute mlirUnrankedMemrefGetMemorySpace(MlirType type) {
546  return wrap(llvm::cast<UnrankedMemRefType>(unwrap(type)).getMemorySpace());
547 }
548 
549 //===----------------------------------------------------------------------===//
550 // Tuple type.
551 //===----------------------------------------------------------------------===//
552 
553 MlirTypeID mlirTupleTypeGetTypeID() { return wrap(TupleType::getTypeID()); }
554 
555 bool mlirTypeIsATuple(MlirType type) {
556  return llvm::isa<TupleType>(unwrap(type));
557 }
558 
559 MlirType mlirTupleTypeGet(MlirContext ctx, intptr_t numElements,
560  MlirType const *elements) {
561  SmallVector<Type, 4> types;
562  ArrayRef<Type> typeRef = unwrapList(numElements, elements, types);
563  return wrap(TupleType::get(unwrap(ctx), typeRef));
564 }
565 
566 intptr_t mlirTupleTypeGetNumTypes(MlirType type) {
567  return llvm::cast<TupleType>(unwrap(type)).size();
568 }
569 
570 MlirType mlirTupleTypeGetType(MlirType type, intptr_t pos) {
571  return wrap(
572  llvm::cast<TupleType>(unwrap(type)).getType(static_cast<size_t>(pos)));
573 }
574 
575 //===----------------------------------------------------------------------===//
576 // Function type.
577 //===----------------------------------------------------------------------===//
578 
580  return wrap(FunctionType::getTypeID());
581 }
582 
583 bool mlirTypeIsAFunction(MlirType type) {
584  return llvm::isa<FunctionType>(unwrap(type));
585 }
586 
587 MlirType mlirFunctionTypeGet(MlirContext ctx, intptr_t numInputs,
588  MlirType const *inputs, intptr_t numResults,
589  MlirType const *results) {
590  SmallVector<Type, 4> inputsList;
591  SmallVector<Type, 4> resultsList;
592  (void)unwrapList(numInputs, inputs, inputsList);
593  (void)unwrapList(numResults, results, resultsList);
594  return wrap(FunctionType::get(unwrap(ctx), inputsList, resultsList));
595 }
596 
597 intptr_t mlirFunctionTypeGetNumInputs(MlirType type) {
598  return llvm::cast<FunctionType>(unwrap(type)).getNumInputs();
599 }
600 
601 intptr_t mlirFunctionTypeGetNumResults(MlirType type) {
602  return llvm::cast<FunctionType>(unwrap(type)).getNumResults();
603 }
604 
605 MlirType mlirFunctionTypeGetInput(MlirType type, intptr_t pos) {
606  assert(pos >= 0 && "pos in array must be positive");
607  return wrap(llvm::cast<FunctionType>(unwrap(type))
608  .getInput(static_cast<unsigned>(pos)));
609 }
610 
611 MlirType mlirFunctionTypeGetResult(MlirType type, intptr_t pos) {
612  assert(pos >= 0 && "pos in array must be positive");
613  return wrap(llvm::cast<FunctionType>(unwrap(type))
614  .getResult(static_cast<unsigned>(pos)));
615 }
616 
617 //===----------------------------------------------------------------------===//
618 // Opaque type.
619 //===----------------------------------------------------------------------===//
620 
621 MlirTypeID mlirOpaqueTypeGetTypeID() { return wrap(OpaqueType::getTypeID()); }
622 
623 bool mlirTypeIsAOpaque(MlirType type) {
624  return llvm::isa<OpaqueType>(unwrap(type));
625 }
626 
627 MlirType mlirOpaqueTypeGet(MlirContext ctx, MlirStringRef dialectNamespace,
628  MlirStringRef typeData) {
629  return wrap(
630  OpaqueType::get(StringAttr::get(unwrap(ctx), unwrap(dialectNamespace)),
631  unwrap(typeData)));
632 }
633 
635  return wrap(
636  llvm::cast<OpaqueType>(unwrap(type)).getDialectNamespace().strref());
637 }
638 
640  return wrap(llvm::cast<OpaqueType>(unwrap(type)).getTypeData());
641 }
bool mlirTypeIsAF16(MlirType type)
Checks whether the given type is an f16 type.
MlirTypeID mlirFloat6E2M3FNTypeGetTypeID()
Returns the typeID of an Float6E2M3FN type.
bool mlirTypeIsAF64(MlirType type)
Checks whether the given type is an f64 type.
bool mlirTypeIsAFloat8E4M3FNUZ(MlirType type)
Checks whether the given type is an f8E4M3FNUZ type.
bool mlirIntegerTypeIsUnsigned(MlirType type)
Checks whether the given integer type is unsigned.
MlirType mlirF32TypeGet(MlirContext ctx)
Creates an f32 type in the given context.
MlirTypeID mlirIntegerTypeGetTypeID()
Returns the typeID of an Integer type.
MlirLogicalResult mlirMemRefTypeGetStridesAndOffset(MlirType type, int64_t *strides, int64_t *offset)
Returns the strides of the MemRef if the layout map is in strided form.
MlirType mlirVectorTypeGetChecked(MlirLocation loc, intptr_t rank, const int64_t *shape, MlirType elementType)
Same as "mlirVectorTypeGet" but returns a nullptr wrapping MlirType on illegal arguments,...
MlirTypeID mlirBFloat16TypeGetTypeID()
Returns the typeID of an BFloat16 type.
MlirType mlirIntegerTypeGet(MlirContext ctx, unsigned bitwidth)
Creates a signless integer type of the given bitwidth in the context.
intptr_t mlirFunctionTypeGetNumResults(MlirType type)
Returns the number of result types.
unsigned mlirIntegerTypeGetWidth(MlirType type)
Returns the bitwidth of an integer type.
bool mlirTypeIsAUnrankedTensor(MlirType type)
Checks whether the given type is an unranked tensor type.
MlirType mlirFloat8E8M0FNUTypeGet(MlirContext ctx)
Creates an f8E8M0FNU type in the given context.
int64_t mlirShapedTypeGetDynamicStrideOrOffset()
Returns the value indicating a dynamic stride or offset in a shaped type.
MlirType mlirF64TypeGet(MlirContext ctx)
Creates a f64 type in the given context.
MlirAttribute mlirUnrankedMemrefGetMemorySpace(MlirType type)
Returns the memory spcae of the given Unranked MemRef type.
bool mlirTypeIsAFloat8E4M3B11FNUZ(MlirType type)
Checks whether the given type is an f8E4M3B11FNUZ type.
bool mlirTypeIsAFloat8E5M2(MlirType type)
Checks whether the given type is an f8E5M2 type.
MlirTypeID mlirFloatTF32TypeGetTypeID()
Returns the typeID of a TF32 type.
MlirType mlirIntegerTypeSignedGet(MlirContext ctx, unsigned bitwidth)
Creates a signed integer type of the given bitwidth in the context.
MlirType mlirFloat6E2M3FNTypeGet(MlirContext ctx)
Creates an f6E2M3FN type in the given context.
MlirTypeID mlirComplexTypeGetTypeID()
Returns the typeID of an Complex type.
int64_t mlirShapedTypeGetDimSize(MlirType type, intptr_t dim)
Returns the dim-th dimension of the given ranked shaped type.
MlirType mlirMemRefTypeGetChecked(MlirLocation loc, MlirType elementType, intptr_t rank, const int64_t *shape, MlirAttribute layout, MlirAttribute memorySpace)
Same as "mlirMemRefTypeGet" but returns a nullptr-wrapping MlirType o illegal arguments,...
MlirType mlirUnrankedTensorTypeGet(MlirType elementType)
Creates an unranked tensor type with the given element type in the same context as the element type.
MlirStringRef mlirOpaqueTypeGetData(MlirType type)
Returns the raw data as a string reference.
bool mlirTypeIsAF32(MlirType type)
Checks whether the given type is an f32 type.
MlirType mlirUnrankedTensorTypeGetElementType(MlirType type)
MlirTypeID mlirFloat8E3M4TypeGetTypeID()
Returns the typeID of an Float8E3M4 type.
MlirTypeID mlirFloat8E4M3B11FNUZTypeGetTypeID()
Returns the typeID of an Float8E4M3B11FNUZ type.
MlirTypeID mlirFunctionTypeGetTypeID()
Returns the typeID of an Function type.
bool mlirTypeIsAFunction(MlirType type)
Checks whether the given type is a function type.
MlirAffineMap mlirMemRefTypeGetAffineMap(MlirType type)
Returns the affine map of the given MemRef type.
MlirTypeID mlirNoneTypeGetTypeID()
Returns the typeID of an None type.
MlirTypeID mlirUnrankedTensorTypeGetTypeID()
Returns the typeID of an UnrankedTensor type.
MlirTypeID mlirMemRefTypeGetTypeID()
Returns the typeID of an MemRef type.
MlirType mlirUnrankedMemRefTypeGetChecked(MlirLocation loc, MlirType elementType, MlirAttribute memorySpace)
Same as "mlirUnrankedMemRefTypeGet" but returns a nullptr wrapping MlirType on illegal arguments,...
bool mlirTypeIsAMemRef(MlirType type)
Checks whether the given type is a MemRef type.
MlirType mlirFunctionTypeGetResult(MlirType type, intptr_t pos)
Returns the pos-th result type.
MlirType mlirF16TypeGet(MlirContext ctx)
Creates an f16 type in the given context.
bool mlirTypeIsAComplex(MlirType type)
Checks whether the given type is a Complex type.
MlirType mlirNoneTypeGet(MlirContext ctx)
Creates a None type in the given context.
MlirType mlirFloat8E3M4TypeGet(MlirContext ctx)
Creates an f8E3M4 type in the given context.
bool mlirTypeIsATF32(MlirType type)
Checks whether the given type is an TF32 type.
bool mlirShapedTypeHasRank(MlirType type)
Checks whether the given shaped type is ranked.
bool mlirTypeIsAShaped(MlirType type)
Checks whether the given type is a Shaped type.
MlirTypeID mlirIndexTypeGetTypeID()
Returns the typeID of an Index type.
MlirType mlirUnrankedTensorTypeGetChecked(MlirLocation loc, MlirType elementType)
Same as "mlirUnrankedTensorTypeGet" but returns a nullptr wrapping MlirType on illegal arguments,...
bool mlirIntegerTypeIsSignless(MlirType type)
Checks whether the given integer type is signless.
MlirType mlirRankedTensorTypeGet(intptr_t rank, const int64_t *shape, MlirType elementType, MlirAttribute encoding)
Creates a tensor type of a fixed rank with the given shape, element type, and optional encoding in th...
MlirTypeID mlirFloat6E3M2FNTypeGetTypeID()
Returns the typeID of an Float6E3M2FN type.
bool mlirShapedTypeIsDynamicDim(MlirType type, intptr_t dim)
Checks wither the dim-th dimension of the given shaped type is dynamic.
MlirType mlirFloat8E4M3B11FNUZTypeGet(MlirContext ctx)
Creates an f8E4M3B11FNUZ type in the given context.
bool mlirVectorTypeIsScalable(MlirType type)
Checks whether the given vector type is scalable, i.e., has at least one scalable dimension.
MlirType mlirFunctionTypeGet(MlirContext ctx, intptr_t numInputs, MlirType const *inputs, intptr_t numResults, MlirType const *results)
Creates a function type, mapping a list of input types to result types.
bool mlirTypeIsAUnrankedMemRef(MlirType type)
Checks whether the given type is an UnrankedMemRef type.
MlirTypeID mlirFloat8E4M3FNUZTypeGetTypeID()
Returns the typeID of an Float8E4M3FNUZ type.
MlirType mlirIntegerTypeUnsignedGet(MlirContext ctx, unsigned bitwidth)
Creates an unsigned integer type of the given bitwidth in the context.
MlirType mlirShapedTypeGetElementType(MlirType type)
Returns the element type of the shaped type.
int64_t mlirShapedTypeGetDynamicSize()
Returns the value indicating a dynamic size in a shaped type.
MlirTypeID mlirFloat8E4M3FNTypeGetTypeID()
Returns the typeID of an Float8E4M3FN type.
bool mlirTypeIsAVector(MlirType type)
Checks whether the given type is a Vector type.
MlirType mlirFloat8E4M3FNUZTypeGet(MlirContext ctx)
Creates an f8E4M3FNUZ type in the given context.
MlirAttribute mlirMemRefTypeGetLayout(MlirType type)
Returns the layout of the given MemRef type.
MlirTypeID mlirFloat64TypeGetTypeID()
Returns the typeID of an Float64 type.
MlirType mlirFloat8E5M2FNUZTypeGet(MlirContext ctx)
Creates an f8E5M2FNUZ type in the given context.
MlirType mlirVectorTypeGetScalableChecked(MlirLocation loc, intptr_t rank, const int64_t *shape, const bool *scalable, MlirType elementType)
Same as "mlirVectorTypeGetScalable" but returns a nullptr wrapping MlirType on illegal arguments,...
bool mlirShapedTypeIsDynamicStrideOrOffset(int64_t val)
Checks whether the given value is used as a placeholder for dynamic strides and offsets in shaped typ...
MlirType mlirMemRefTypeGet(MlirType elementType, intptr_t rank, const int64_t *shape, MlirAttribute layout, MlirAttribute memorySpace)
Creates a MemRef type with the given rank and shape, a potentially empty list of affine layout maps,...
bool mlirTypeIsABF16(MlirType type)
Checks whether the given type is a bf16 type.
intptr_t mlirTupleTypeGetNumTypes(MlirType type)
Returns the number of types contained in a tuple.
MlirType mlirFloat8E4M3TypeGet(MlirContext ctx)
Creates an f8E4M3 type in the given context.
bool mlirVectorTypeIsDimScalable(MlirType type, intptr_t dim)
Checks whether the "dim"-th dimension of the given vector is scalable.
MlirStringRef mlirOpaqueTypeGetDialectNamespace(MlirType type)
Returns the namespace of the dialect with which the given opaque type is associated.
bool mlirTypeIsAFloat4E2M1FN(MlirType type)
Checks whether the given type is an f4E2M1FN type.
bool mlirTypeIsAFloat(MlirType type)
Checks whether the given type is a floating-point type.
MlirType mlirFunctionTypeGetInput(MlirType type, intptr_t pos)
Returns the pos-th input type.
MlirType mlirMemRefTypeContiguousGetChecked(MlirLocation loc, MlirType elementType, intptr_t rank, const int64_t *shape, MlirAttribute memorySpace)
Same as "mlirMemRefTypeContiguousGet" but returns a nullptr wrapping MlirType on illegal arguments,...
bool mlirTypeIsAInteger(MlirType type)
Checks whether the given type is an integer type.
MlirType mlirFloat6E3M2FNTypeGet(MlirContext ctx)
Creates an f6E3M2FN type in the given context.
MlirTypeID mlirFloat8E4M3TypeGetTypeID()
Returns the typeID of an Float8E4M3 type.
MlirAttribute mlirRankedTensorTypeGetEncoding(MlirType type)
Gets the 'encoding' attribute from the ranked tensor type, returning a null attribute if none.
MlirTypeID mlirFloat8E5M2FNUZTypeGetTypeID()
Returns the typeID of an Float8E5M2FNUZ type.
intptr_t mlirFunctionTypeGetNumInputs(MlirType type)
Returns the number of input types.
bool mlirTypeIsATuple(MlirType type)
Checks whether the given type is a tuple type.
MlirType mlirTupleTypeGet(MlirContext ctx, intptr_t numElements, MlirType const *elements)
Creates a tuple type that consists of the given list of elemental types.
MlirTypeID mlirTupleTypeGetTypeID()
Returns the typeID of an Tuple type.
MlirType mlirVectorTypeGetScalable(intptr_t rank, const int64_t *shape, const bool *scalable, MlirType elementType)
Creates a scalable vector type with the shape identified by its rank and dimensions.
bool mlirTypeIsAFloat8E3M4(MlirType type)
Checks whether the given type is an f8E3M4 type.
MlirTypeID mlirFloat16TypeGetTypeID()
Returns the typeID of an Float16 type.
MlirType mlirComplexTypeGet(MlirType elementType)
Creates a complex type with the given element type in the same context as the element type.
MlirTypeID mlirFloat8E5M2TypeGetTypeID()
Returns the typeID of an Float8E5M2 type.
MlirTypeID mlirFloat32TypeGetTypeID()
Returns the typeID of an Float32 type.
bool mlirTypeIsAFloat8E4M3(MlirType type)
Checks whether the given type is an f8E4M3 type.
int64_t mlirShapedTypeGetRank(MlirType type)
Returns the rank of the given ranked shaped type.
bool mlirTypeIsAFloat8E4M3FN(MlirType type)
Checks whether the given type is an f8E4M3FN type.
bool mlirTypeIsAOpaque(MlirType type)
Checks whether the given type is an opaque type.
bool mlirTypeIsAFloat8E8M0FNU(MlirType type)
Checks whether the given type is an f8E8M0FNU type.
MlirType mlirTupleTypeGetType(MlirType type, intptr_t pos)
Returns the pos-th type in the tuple type.
bool mlirTypeIsATensor(MlirType type)
Checks whether the given type is a Tensor type.
bool mlirIntegerTypeIsSigned(MlirType type)
Checks whether the given integer type is signed.
bool mlirShapedTypeHasStaticShape(MlirType type)
Checks whether the given shaped type has a static shape.
MlirTypeID mlirRankedTensorTypeGetTypeID()
Returns the typeID of an RankedTensor type.
MlirType mlirBF16TypeGet(MlirContext ctx)
Creates a bf16 type in the given context.
MlirType mlirComplexTypeGetElementType(MlirType type)
Returns the element type of the given complex type.
bool mlirTypeIsAFloat6E3M2FN(MlirType type)
Checks whether the given type is an f6E3M2FN type.
bool mlirTypeIsAIndex(MlirType type)
Checks whether the given type is an index type.
bool mlirTypeIsAFloat8E5M2FNUZ(MlirType type)
Checks whether the given type is an f8E5M2FNUZ type.
MlirType mlirOpaqueTypeGet(MlirContext ctx, MlirStringRef dialectNamespace, MlirStringRef typeData)
Creates an opaque type in the given context associated with the dialect identified by its namespace.
MlirAttribute mlirMemRefTypeGetMemorySpace(MlirType type)
Returns the memory space of the given MemRef type.
MlirType mlirRankedTensorTypeGetChecked(MlirLocation loc, intptr_t rank, const int64_t *shape, MlirType elementType, MlirAttribute encoding)
Same as "mlirRankedTensorTypeGet" but returns a nullptr wrapping MlirType on illegal arguments,...
MlirTypeID mlirFloat8E8M0FNUTypeGetTypeID()
Returns the typeID of an Float8E8M0FNU type.
MlirType mlirVectorTypeGet(intptr_t rank, const int64_t *shape, MlirType elementType)
Creates a vector type of the shape identified by its rank and dimensions, with the given element type...
MlirType mlirMemRefTypeContiguousGet(MlirType elementType, intptr_t rank, const int64_t *shape, MlirAttribute memorySpace)
Creates a MemRef type with the given rank, shape, memory space and element type in the same context a...
MlirType mlirFloat4E2M1FNTypeGet(MlirContext ctx)
Creates an f4E2M1FN type in the given context.
MlirType mlirFloat8E4M3FNTypeGet(MlirContext ctx)
Creates an f8E4M3FN type in the given context.
MlirType mlirIndexTypeGet(MlirContext ctx)
Creates an index type in the given context.
MlirTypeID mlirVectorTypeGetTypeID()
Returns the typeID of an Vector type.
bool mlirTypeIsARankedTensor(MlirType type)
Checks whether the given type is a ranked tensor type.
MlirTypeID mlirOpaqueTypeGetTypeID()
Returns the typeID of an Opaque type.
MlirTypeID mlirUnrankedMemRefTypeGetTypeID()
Returns the typeID of an UnrankedMemRef type.
bool mlirShapedTypeIsDynamicSize(int64_t size)
Checks whether the given value is used as a placeholder for dynamic sizes in shaped types.
bool mlirTypeIsANone(MlirType type)
Checks whether the given type is a None type.
MlirType mlirTF32TypeGet(MlirContext ctx)
Creates a TF32 type in the given context.
bool mlirTypeIsAFloat6E2M3FN(MlirType type)
Checks whether the given type is an f6E2M3FN type.
MlirType mlirFloat8E5M2TypeGet(MlirContext ctx)
Creates an f8E5M2 type in the given context.
MlirTypeID mlirFloat4E2M1FNTypeGetTypeID()
Returns the typeID of an Float4E2M1FN type.
unsigned mlirFloatTypeGetWidth(MlirType type)
Returns the bitwidth of a floating-point type.
MlirType mlirUnrankedMemRefTypeGet(MlirType elementType, MlirAttribute memorySpace)
Creates an Unranked MemRef type with the given element type and in the given memory space.
static void copy(Location loc, Value dst, Value src, Value size, OpBuilder &builder)
Copies the given number of bytes from src to dst pointers.
static Type getElementType(Type type, ArrayRef< int32_t > indices, function_ref< InFlightDiagnostic(StringRef)> emitErrorFn)
Walks the given type hierarchy with the given indices, potentially down to component granularity,...
Definition: SPIRVOps.cpp:215
static llvm::ArrayRef< CppTy > unwrapList(size_t size, CTy *first, llvm::SmallVectorImpl< CppTy > &storage)
Definition: Wrap.h:40
static FloatType getF64(MLIRContext *ctx)
Definition: BuiltinTypes.h:488
static FloatType getFloat8E5M2(MLIRContext *ctx)
Definition: BuiltinTypes.h:440
static FloatType getFloat6E3M2FN(MLIRContext *ctx)
Definition: BuiltinTypes.h:436
static FloatType getFloat8E8M0FNU(MLIRContext *ctx)
Definition: BuiltinTypes.h:468
static FloatType getFloat8E4M3FN(MLIRContext *ctx)
Definition: BuiltinTypes.h:448
static FloatType getF16(MLIRContext *ctx)
Definition: BuiltinTypes.h:476
static FloatType getFloat6E2M3FN(MLIRContext *ctx)
Definition: BuiltinTypes.h:432
static FloatType getTF32(MLIRContext *ctx)
Definition: BuiltinTypes.h:480
static FloatType getBF16(MLIRContext *ctx)
Definition: BuiltinTypes.h:472
static FloatType getFloat8E4M3FNUZ(MLIRContext *ctx)
Definition: BuiltinTypes.h:456
static FloatType getFloat8E4M3B11FNUZ(MLIRContext *ctx)
Definition: BuiltinTypes.h:460
static FloatType getFloat8E5M2FNUZ(MLIRContext *ctx)
Definition: BuiltinTypes.h:452
static FloatType getFloat4E2M1FN(MLIRContext *ctx)
Definition: BuiltinTypes.h:428
static FloatType getFloat8E3M4(MLIRContext *ctx)
Definition: BuiltinTypes.h:464
static FloatType getFloat8E4M3(MLIRContext *ctx)
Definition: BuiltinTypes.h:444
static FloatType getF32(MLIRContext *ctx)
Definition: BuiltinTypes.h:484
mlir::Diagnostic & unwrap(MlirDiagnostic diagnostic)
Definition: Diagnostics.h:19
MlirDiagnostic wrap(mlir::Diagnostic &diagnostic)
Definition: Diagnostics.h:24
static bool mlirAttributeIsNull(MlirAttribute attr)
Checks whether an attribute is null.
Definition: IR.h:1043
static MlirLogicalResult mlirLogicalResultFailure(void)
Creates a logical result representing a failure.
Definition: Support.h:138
static MlirLogicalResult mlirLogicalResultSuccess(void)
Creates a logical result representing a success.
Definition: Support.h:132
Include the generated interface declarations.
Type getType(OpFoldResult ofr)
Returns the int type of the integer in ofr.
Definition: Utils.cpp:305
LogicalResult getStridesAndOffset(MemRefType t, SmallVectorImpl< int64_t > &strides, int64_t &offset)
Returns the strides of the MemRef if the layout map is in strided form.
auto get(MLIRContext *context, Ts &&...params)
Helper method that injects context only if needed, this helps unify some of the attribute constructio...
A logical result value, essentially a boolean with named states.
Definition: Support.h:116
A pointer to a sized fragment of a string, not necessarily null-terminated.
Definition: Support.h:73