MLIR  19.0.0git
BuiltinAttributes.cpp
Go to the documentation of this file.
1 //===- BuiltinAttributes.cpp - C Interface to MLIR Builtin Attributes -----===//
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 
10 #include "mlir-c/Support.h"
11 #include "mlir/CAPI/AffineMap.h"
12 #include "mlir/CAPI/IR.h"
13 #include "mlir/CAPI/Support.h"
14 #include "mlir/IR/AsmState.h"
15 #include "mlir/IR/Attributes.h"
17 #include "mlir/IR/BuiltinTypes.h"
18 
19 using namespace mlir;
20 
21 MlirAttribute mlirAttributeGetNull() { return {nullptr}; }
22 
23 //===----------------------------------------------------------------------===//
24 // Location attribute.
25 //===----------------------------------------------------------------------===//
26 
27 bool mlirAttributeIsALocation(MlirAttribute attr) {
28  return llvm::isa<LocationAttr>(unwrap(attr));
29 }
30 
31 //===----------------------------------------------------------------------===//
32 // Affine map attribute.
33 //===----------------------------------------------------------------------===//
34 
35 bool mlirAttributeIsAAffineMap(MlirAttribute attr) {
36  return llvm::isa<AffineMapAttr>(unwrap(attr));
37 }
38 
39 MlirAttribute mlirAffineMapAttrGet(MlirAffineMap map) {
40  return wrap(AffineMapAttr::get(unwrap(map)));
41 }
42 
43 MlirAffineMap mlirAffineMapAttrGetValue(MlirAttribute attr) {
44  return wrap(llvm::cast<AffineMapAttr>(unwrap(attr)).getValue());
45 }
46 
47 MlirTypeID mlirAffineMapAttrGetTypeID(void) {
48  return wrap(AffineMapAttr::getTypeID());
49 }
50 
51 //===----------------------------------------------------------------------===//
52 // Array attribute.
53 //===----------------------------------------------------------------------===//
54 
55 bool mlirAttributeIsAArray(MlirAttribute attr) {
56  return llvm::isa<ArrayAttr>(unwrap(attr));
57 }
58 
59 MlirAttribute mlirArrayAttrGet(MlirContext ctx, intptr_t numElements,
60  MlirAttribute const *elements) {
62  return wrap(
63  ArrayAttr::get(unwrap(ctx), unwrapList(static_cast<size_t>(numElements),
64  elements, attrs)));
65 }
66 
67 intptr_t mlirArrayAttrGetNumElements(MlirAttribute attr) {
68  return static_cast<intptr_t>(llvm::cast<ArrayAttr>(unwrap(attr)).size());
69 }
70 
71 MlirAttribute mlirArrayAttrGetElement(MlirAttribute attr, intptr_t pos) {
72  return wrap(llvm::cast<ArrayAttr>(unwrap(attr)).getValue()[pos]);
73 }
74 
75 MlirTypeID mlirArrayAttrGetTypeID(void) { return wrap(ArrayAttr::getTypeID()); }
76 
77 //===----------------------------------------------------------------------===//
78 // Dictionary attribute.
79 //===----------------------------------------------------------------------===//
80 
81 bool mlirAttributeIsADictionary(MlirAttribute attr) {
82  return llvm::isa<DictionaryAttr>(unwrap(attr));
83 }
84 
85 MlirAttribute mlirDictionaryAttrGet(MlirContext ctx, intptr_t numElements,
86  MlirNamedAttribute const *elements) {
88  attributes.reserve(numElements);
89  for (intptr_t i = 0; i < numElements; ++i)
90  attributes.emplace_back(unwrap(elements[i].name),
91  unwrap(elements[i].attribute));
92  return wrap(DictionaryAttr::get(unwrap(ctx), attributes));
93 }
94 
95 intptr_t mlirDictionaryAttrGetNumElements(MlirAttribute attr) {
96  return static_cast<intptr_t>(llvm::cast<DictionaryAttr>(unwrap(attr)).size());
97 }
98 
100  intptr_t pos) {
101  NamedAttribute attribute =
102  llvm::cast<DictionaryAttr>(unwrap(attr)).getValue()[pos];
103  return {wrap(attribute.getName()), wrap(attribute.getValue())};
104 }
105 
106 MlirAttribute mlirDictionaryAttrGetElementByName(MlirAttribute attr,
107  MlirStringRef name) {
108  return wrap(llvm::cast<DictionaryAttr>(unwrap(attr)).get(unwrap(name)));
109 }
110 
111 MlirTypeID mlirDictionaryAttrGetTypeID(void) {
112  return wrap(DictionaryAttr::getTypeID());
113 }
114 
115 //===----------------------------------------------------------------------===//
116 // Floating point attribute.
117 //===----------------------------------------------------------------------===//
118 
119 bool mlirAttributeIsAFloat(MlirAttribute attr) {
120  return llvm::isa<FloatAttr>(unwrap(attr));
121 }
122 
123 MlirAttribute mlirFloatAttrDoubleGet(MlirContext ctx, MlirType type,
124  double value) {
125  return wrap(FloatAttr::get(unwrap(type), value));
126 }
127 
128 MlirAttribute mlirFloatAttrDoubleGetChecked(MlirLocation loc, MlirType type,
129  double value) {
130  return wrap(FloatAttr::getChecked(unwrap(loc), unwrap(type), value));
131 }
132 
133 double mlirFloatAttrGetValueDouble(MlirAttribute attr) {
134  return llvm::cast<FloatAttr>(unwrap(attr)).getValueAsDouble();
135 }
136 
137 MlirTypeID mlirFloatAttrGetTypeID(void) { return wrap(FloatAttr::getTypeID()); }
138 
139 //===----------------------------------------------------------------------===//
140 // Integer attribute.
141 //===----------------------------------------------------------------------===//
142 
143 bool mlirAttributeIsAInteger(MlirAttribute attr) {
144  return llvm::isa<IntegerAttr>(unwrap(attr));
145 }
146 
147 MlirAttribute mlirIntegerAttrGet(MlirType type, int64_t value) {
148  return wrap(IntegerAttr::get(unwrap(type), value));
149 }
150 
151 int64_t mlirIntegerAttrGetValueInt(MlirAttribute attr) {
152  return llvm::cast<IntegerAttr>(unwrap(attr)).getInt();
153 }
154 
155 int64_t mlirIntegerAttrGetValueSInt(MlirAttribute attr) {
156  return llvm::cast<IntegerAttr>(unwrap(attr)).getSInt();
157 }
158 
159 uint64_t mlirIntegerAttrGetValueUInt(MlirAttribute attr) {
160  return llvm::cast<IntegerAttr>(unwrap(attr)).getUInt();
161 }
162 
163 MlirTypeID mlirIntegerAttrGetTypeID(void) {
164  return wrap(IntegerAttr::getTypeID());
165 }
166 
167 //===----------------------------------------------------------------------===//
168 // Bool attribute.
169 //===----------------------------------------------------------------------===//
170 
171 bool mlirAttributeIsABool(MlirAttribute attr) {
172  return llvm::isa<BoolAttr>(unwrap(attr));
173 }
174 
175 MlirAttribute mlirBoolAttrGet(MlirContext ctx, int value) {
176  return wrap(BoolAttr::get(unwrap(ctx), value));
177 }
178 
179 bool mlirBoolAttrGetValue(MlirAttribute attr) {
180  return llvm::cast<BoolAttr>(unwrap(attr)).getValue();
181 }
182 
183 //===----------------------------------------------------------------------===//
184 // Integer set attribute.
185 //===----------------------------------------------------------------------===//
186 
187 bool mlirAttributeIsAIntegerSet(MlirAttribute attr) {
188  return llvm::isa<IntegerSetAttr>(unwrap(attr));
189 }
190 
191 MlirTypeID mlirIntegerSetAttrGetTypeID(void) {
192  return wrap(IntegerSetAttr::getTypeID());
193 }
194 
195 //===----------------------------------------------------------------------===//
196 // Opaque attribute.
197 //===----------------------------------------------------------------------===//
198 
199 bool mlirAttributeIsAOpaque(MlirAttribute attr) {
200  return llvm::isa<OpaqueAttr>(unwrap(attr));
201 }
202 
203 MlirAttribute mlirOpaqueAttrGet(MlirContext ctx, MlirStringRef dialectNamespace,
204  intptr_t dataLength, const char *data,
205  MlirType type) {
206  return wrap(
207  OpaqueAttr::get(StringAttr::get(unwrap(ctx), unwrap(dialectNamespace)),
208  StringRef(data, dataLength), unwrap(type)));
209 }
210 
212  return wrap(
213  llvm::cast<OpaqueAttr>(unwrap(attr)).getDialectNamespace().strref());
214 }
215 
217  return wrap(llvm::cast<OpaqueAttr>(unwrap(attr)).getAttrData());
218 }
219 
220 MlirTypeID mlirOpaqueAttrGetTypeID(void) {
221  return wrap(OpaqueAttr::getTypeID());
222 }
223 
224 //===----------------------------------------------------------------------===//
225 // String attribute.
226 //===----------------------------------------------------------------------===//
227 
228 bool mlirAttributeIsAString(MlirAttribute attr) {
229  return llvm::isa<StringAttr>(unwrap(attr));
230 }
231 
232 MlirAttribute mlirStringAttrGet(MlirContext ctx, MlirStringRef str) {
233  return wrap((Attribute)StringAttr::get(unwrap(ctx), unwrap(str)));
234 }
235 
236 MlirAttribute mlirStringAttrTypedGet(MlirType type, MlirStringRef str) {
237  return wrap((Attribute)StringAttr::get(unwrap(str), unwrap(type)));
238 }
239 
241  return wrap(llvm::cast<StringAttr>(unwrap(attr)).getValue());
242 }
243 
244 MlirTypeID mlirStringAttrGetTypeID(void) {
245  return wrap(StringAttr::getTypeID());
246 }
247 
248 //===----------------------------------------------------------------------===//
249 // SymbolRef attribute.
250 //===----------------------------------------------------------------------===//
251 
252 bool mlirAttributeIsASymbolRef(MlirAttribute attr) {
253  return llvm::isa<SymbolRefAttr>(unwrap(attr));
254 }
255 
256 MlirAttribute mlirSymbolRefAttrGet(MlirContext ctx, MlirStringRef symbol,
257  intptr_t numReferences,
258  MlirAttribute const *references) {
260  refs.reserve(numReferences);
261  for (intptr_t i = 0; i < numReferences; ++i)
262  refs.push_back(llvm::cast<FlatSymbolRefAttr>(unwrap(references[i])));
263  auto symbolAttr = StringAttr::get(unwrap(ctx), unwrap(symbol));
264  return wrap(SymbolRefAttr::get(symbolAttr, refs));
265 }
266 
268  return wrap(
269  llvm::cast<SymbolRefAttr>(unwrap(attr)).getRootReference().getValue());
270 }
271 
273  return wrap(
274  llvm::cast<SymbolRefAttr>(unwrap(attr)).getLeafReference().getValue());
275 }
276 
277 intptr_t mlirSymbolRefAttrGetNumNestedReferences(MlirAttribute attr) {
278  return static_cast<intptr_t>(
279  llvm::cast<SymbolRefAttr>(unwrap(attr)).getNestedReferences().size());
280 }
281 
282 MlirAttribute mlirSymbolRefAttrGetNestedReference(MlirAttribute attr,
283  intptr_t pos) {
284  return wrap(
285  llvm::cast<SymbolRefAttr>(unwrap(attr)).getNestedReferences()[pos]);
286 }
287 
288 MlirTypeID mlirSymbolRefAttrGetTypeID(void) {
289  return wrap(SymbolRefAttr::getTypeID());
290 }
291 
292 MlirAttribute mlirDisctinctAttrCreate(MlirAttribute referencedAttr) {
293  return wrap(mlir::DistinctAttr::create(unwrap(referencedAttr)));
294 }
295 
296 //===----------------------------------------------------------------------===//
297 // Flat SymbolRef attribute.
298 //===----------------------------------------------------------------------===//
299 
300 bool mlirAttributeIsAFlatSymbolRef(MlirAttribute attr) {
301  return llvm::isa<FlatSymbolRefAttr>(unwrap(attr));
302 }
303 
304 MlirAttribute mlirFlatSymbolRefAttrGet(MlirContext ctx, MlirStringRef symbol) {
305  return wrap(FlatSymbolRefAttr::get(unwrap(ctx), unwrap(symbol)));
306 }
307 
309  return wrap(llvm::cast<FlatSymbolRefAttr>(unwrap(attr)).getValue());
310 }
311 
312 //===----------------------------------------------------------------------===//
313 // Type attribute.
314 //===----------------------------------------------------------------------===//
315 
316 bool mlirAttributeIsAType(MlirAttribute attr) {
317  return llvm::isa<TypeAttr>(unwrap(attr));
318 }
319 
320 MlirAttribute mlirTypeAttrGet(MlirType type) {
321  return wrap(TypeAttr::get(unwrap(type)));
322 }
323 
324 MlirType mlirTypeAttrGetValue(MlirAttribute attr) {
325  return wrap(llvm::cast<TypeAttr>(unwrap(attr)).getValue());
326 }
327 
328 MlirTypeID mlirTypeAttrGetTypeID(void) { return wrap(TypeAttr::getTypeID()); }
329 
330 //===----------------------------------------------------------------------===//
331 // Unit attribute.
332 //===----------------------------------------------------------------------===//
333 
334 bool mlirAttributeIsAUnit(MlirAttribute attr) {
335  return llvm::isa<UnitAttr>(unwrap(attr));
336 }
337 
338 MlirAttribute mlirUnitAttrGet(MlirContext ctx) {
339  return wrap(UnitAttr::get(unwrap(ctx)));
340 }
341 
342 MlirTypeID mlirUnitAttrGetTypeID(void) { return wrap(UnitAttr::getTypeID()); }
343 
344 //===----------------------------------------------------------------------===//
345 // Elements attributes.
346 //===----------------------------------------------------------------------===//
347 
348 bool mlirAttributeIsAElements(MlirAttribute attr) {
349  return llvm::isa<ElementsAttr>(unwrap(attr));
350 }
351 
352 MlirAttribute mlirElementsAttrGetValue(MlirAttribute attr, intptr_t rank,
353  uint64_t *idxs) {
354  return wrap(llvm::cast<ElementsAttr>(unwrap(attr))
355  .getValues<Attribute>()[llvm::ArrayRef(idxs, rank)]);
356 }
357 
358 bool mlirElementsAttrIsValidIndex(MlirAttribute attr, intptr_t rank,
359  uint64_t *idxs) {
360  return llvm::cast<ElementsAttr>(unwrap(attr))
361  .isValidIndex(llvm::ArrayRef(idxs, rank));
362 }
363 
364 int64_t mlirElementsAttrGetNumElements(MlirAttribute attr) {
365  return llvm::cast<ElementsAttr>(unwrap(attr)).getNumElements();
366 }
367 
368 //===----------------------------------------------------------------------===//
369 // Dense array attribute.
370 //===----------------------------------------------------------------------===//
371 
373  return wrap(DenseArrayAttr::getTypeID());
374 }
375 
376 //===----------------------------------------------------------------------===//
377 // IsA support.
378 //===----------------------------------------------------------------------===//
379 
380 bool mlirAttributeIsADenseBoolArray(MlirAttribute attr) {
381  return llvm::isa<DenseBoolArrayAttr>(unwrap(attr));
382 }
383 bool mlirAttributeIsADenseI8Array(MlirAttribute attr) {
384  return llvm::isa<DenseI8ArrayAttr>(unwrap(attr));
385 }
386 bool mlirAttributeIsADenseI16Array(MlirAttribute attr) {
387  return llvm::isa<DenseI16ArrayAttr>(unwrap(attr));
388 }
389 bool mlirAttributeIsADenseI32Array(MlirAttribute attr) {
390  return llvm::isa<DenseI32ArrayAttr>(unwrap(attr));
391 }
392 bool mlirAttributeIsADenseI64Array(MlirAttribute attr) {
393  return llvm::isa<DenseI64ArrayAttr>(unwrap(attr));
394 }
395 bool mlirAttributeIsADenseF32Array(MlirAttribute attr) {
396  return llvm::isa<DenseF32ArrayAttr>(unwrap(attr));
397 }
398 bool mlirAttributeIsADenseF64Array(MlirAttribute attr) {
399  return llvm::isa<DenseF64ArrayAttr>(unwrap(attr));
400 }
401 
402 //===----------------------------------------------------------------------===//
403 // Constructors.
404 //===----------------------------------------------------------------------===//
405 
406 MlirAttribute mlirDenseBoolArrayGet(MlirContext ctx, intptr_t size,
407  int const *values) {
408  SmallVector<bool, 4> elements(values, values + size);
409  return wrap(DenseBoolArrayAttr::get(unwrap(ctx), elements));
410 }
411 MlirAttribute mlirDenseI8ArrayGet(MlirContext ctx, intptr_t size,
412  int8_t const *values) {
413  return wrap(
414  DenseI8ArrayAttr::get(unwrap(ctx), ArrayRef<int8_t>(values, size)));
415 }
416 MlirAttribute mlirDenseI16ArrayGet(MlirContext ctx, intptr_t size,
417  int16_t const *values) {
418  return wrap(
419  DenseI16ArrayAttr::get(unwrap(ctx), ArrayRef<int16_t>(values, size)));
420 }
421 MlirAttribute mlirDenseI32ArrayGet(MlirContext ctx, intptr_t size,
422  int32_t const *values) {
423  return wrap(
424  DenseI32ArrayAttr::get(unwrap(ctx), ArrayRef<int32_t>(values, size)));
425 }
426 MlirAttribute mlirDenseI64ArrayGet(MlirContext ctx, intptr_t size,
427  int64_t const *values) {
428  return wrap(
429  DenseI64ArrayAttr::get(unwrap(ctx), ArrayRef<int64_t>(values, size)));
430 }
431 MlirAttribute mlirDenseF32ArrayGet(MlirContext ctx, intptr_t size,
432  float const *values) {
433  return wrap(
434  DenseF32ArrayAttr::get(unwrap(ctx), ArrayRef<float>(values, size)));
435 }
436 MlirAttribute mlirDenseF64ArrayGet(MlirContext ctx, intptr_t size,
437  double const *values) {
438  return wrap(
439  DenseF64ArrayAttr::get(unwrap(ctx), ArrayRef<double>(values, size)));
440 }
441 
442 //===----------------------------------------------------------------------===//
443 // Accessors.
444 //===----------------------------------------------------------------------===//
445 
446 intptr_t mlirDenseArrayGetNumElements(MlirAttribute attr) {
447  return llvm::cast<DenseArrayAttr>(unwrap(attr)).size();
448 }
449 
450 //===----------------------------------------------------------------------===//
451 // Indexed accessors.
452 //===----------------------------------------------------------------------===//
453 
454 bool mlirDenseBoolArrayGetElement(MlirAttribute attr, intptr_t pos) {
455  return llvm::cast<DenseBoolArrayAttr>(unwrap(attr))[pos];
456 }
457 int8_t mlirDenseI8ArrayGetElement(MlirAttribute attr, intptr_t pos) {
458  return llvm::cast<DenseI8ArrayAttr>(unwrap(attr))[pos];
459 }
460 int16_t mlirDenseI16ArrayGetElement(MlirAttribute attr, intptr_t pos) {
461  return llvm::cast<DenseI16ArrayAttr>(unwrap(attr))[pos];
462 }
463 int32_t mlirDenseI32ArrayGetElement(MlirAttribute attr, intptr_t pos) {
464  return llvm::cast<DenseI32ArrayAttr>(unwrap(attr))[pos];
465 }
466 int64_t mlirDenseI64ArrayGetElement(MlirAttribute attr, intptr_t pos) {
467  return llvm::cast<DenseI64ArrayAttr>(unwrap(attr))[pos];
468 }
469 float mlirDenseF32ArrayGetElement(MlirAttribute attr, intptr_t pos) {
470  return llvm::cast<DenseF32ArrayAttr>(unwrap(attr))[pos];
471 }
472 double mlirDenseF64ArrayGetElement(MlirAttribute attr, intptr_t pos) {
473  return llvm::cast<DenseF64ArrayAttr>(unwrap(attr))[pos];
474 }
475 
476 //===----------------------------------------------------------------------===//
477 // Dense elements attribute.
478 //===----------------------------------------------------------------------===//
479 
480 //===----------------------------------------------------------------------===//
481 // IsA support.
482 //===----------------------------------------------------------------------===//
483 
484 bool mlirAttributeIsADenseElements(MlirAttribute attr) {
485  return llvm::isa<DenseElementsAttr>(unwrap(attr));
486 }
487 
488 bool mlirAttributeIsADenseIntElements(MlirAttribute attr) {
489  return llvm::isa<DenseIntElementsAttr>(unwrap(attr));
490 }
491 
492 bool mlirAttributeIsADenseFPElements(MlirAttribute attr) {
493  return llvm::isa<DenseFPElementsAttr>(unwrap(attr));
494 }
495 
497  return wrap(DenseIntOrFPElementsAttr::getTypeID());
498 }
499 
500 //===----------------------------------------------------------------------===//
501 // Constructors.
502 //===----------------------------------------------------------------------===//
503 
504 MlirAttribute mlirDenseElementsAttrGet(MlirType shapedType,
505  intptr_t numElements,
506  MlirAttribute const *elements) {
507  SmallVector<Attribute, 8> attributes;
508  return wrap(
509  DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
510  unwrapList(numElements, elements, attributes)));
511 }
512 
513 MlirAttribute mlirDenseElementsAttrRawBufferGet(MlirType shapedType,
514  size_t rawBufferSize,
515  const void *rawBuffer) {
516  auto shapedTypeCpp = llvm::cast<ShapedType>(unwrap(shapedType));
517  ArrayRef<char> rawBufferCpp(static_cast<const char *>(rawBuffer),
518  rawBufferSize);
519  bool isSplat = false;
520  if (!DenseElementsAttr::isValidRawBuffer(shapedTypeCpp, rawBufferCpp,
521  isSplat))
522  return mlirAttributeGetNull();
523  return wrap(DenseElementsAttr::getFromRawBuffer(shapedTypeCpp, rawBufferCpp));
524 }
525 
526 MlirAttribute mlirDenseElementsAttrSplatGet(MlirType shapedType,
527  MlirAttribute element) {
528  return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
529  unwrap(element)));
530 }
531 MlirAttribute mlirDenseElementsAttrBoolSplatGet(MlirType shapedType,
532  bool element) {
533  return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
534  element));
535 }
536 MlirAttribute mlirDenseElementsAttrUInt8SplatGet(MlirType shapedType,
537  uint8_t element) {
538  return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
539  element));
540 }
541 MlirAttribute mlirDenseElementsAttrInt8SplatGet(MlirType shapedType,
542  int8_t element) {
543  return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
544  element));
545 }
546 MlirAttribute mlirDenseElementsAttrUInt32SplatGet(MlirType shapedType,
547  uint32_t element) {
548  return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
549  element));
550 }
551 MlirAttribute mlirDenseElementsAttrInt32SplatGet(MlirType shapedType,
552  int32_t element) {
553  return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
554  element));
555 }
556 MlirAttribute mlirDenseElementsAttrUInt64SplatGet(MlirType shapedType,
557  uint64_t element) {
558  return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
559  element));
560 }
561 MlirAttribute mlirDenseElementsAttrInt64SplatGet(MlirType shapedType,
562  int64_t element) {
563  return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
564  element));
565 }
566 MlirAttribute mlirDenseElementsAttrFloatSplatGet(MlirType shapedType,
567  float element) {
568  return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
569  element));
570 }
571 MlirAttribute mlirDenseElementsAttrDoubleSplatGet(MlirType shapedType,
572  double element) {
573  return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
574  element));
575 }
576 
577 MlirAttribute mlirDenseElementsAttrBoolGet(MlirType shapedType,
578  intptr_t numElements,
579  const int *elements) {
580  SmallVector<bool, 8> values(elements, elements + numElements);
581  return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
582  values));
583 }
584 
585 /// Creates a dense attribute with elements of the type deduced by templates.
586 template <typename T>
587 static MlirAttribute getDenseAttribute(MlirType shapedType,
588  intptr_t numElements,
589  const T *elements) {
590  return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
591  llvm::ArrayRef(elements, numElements)));
592 }
593 
594 MlirAttribute mlirDenseElementsAttrUInt8Get(MlirType shapedType,
595  intptr_t numElements,
596  const uint8_t *elements) {
597  return getDenseAttribute(shapedType, numElements, elements);
598 }
599 MlirAttribute mlirDenseElementsAttrInt8Get(MlirType shapedType,
600  intptr_t numElements,
601  const int8_t *elements) {
602  return getDenseAttribute(shapedType, numElements, elements);
603 }
604 MlirAttribute mlirDenseElementsAttrUInt16Get(MlirType shapedType,
605  intptr_t numElements,
606  const uint16_t *elements) {
607  return getDenseAttribute(shapedType, numElements, elements);
608 }
609 MlirAttribute mlirDenseElementsAttrInt16Get(MlirType shapedType,
610  intptr_t numElements,
611  const int16_t *elements) {
612  return getDenseAttribute(shapedType, numElements, elements);
613 }
614 MlirAttribute mlirDenseElementsAttrUInt32Get(MlirType shapedType,
615  intptr_t numElements,
616  const uint32_t *elements) {
617  return getDenseAttribute(shapedType, numElements, elements);
618 }
619 MlirAttribute mlirDenseElementsAttrInt32Get(MlirType shapedType,
620  intptr_t numElements,
621  const int32_t *elements) {
622  return getDenseAttribute(shapedType, numElements, elements);
623 }
624 MlirAttribute mlirDenseElementsAttrUInt64Get(MlirType shapedType,
625  intptr_t numElements,
626  const uint64_t *elements) {
627  return getDenseAttribute(shapedType, numElements, elements);
628 }
629 MlirAttribute mlirDenseElementsAttrInt64Get(MlirType shapedType,
630  intptr_t numElements,
631  const int64_t *elements) {
632  return getDenseAttribute(shapedType, numElements, elements);
633 }
634 MlirAttribute mlirDenseElementsAttrFloatGet(MlirType shapedType,
635  intptr_t numElements,
636  const float *elements) {
637  return getDenseAttribute(shapedType, numElements, elements);
638 }
639 MlirAttribute mlirDenseElementsAttrDoubleGet(MlirType shapedType,
640  intptr_t numElements,
641  const double *elements) {
642  return getDenseAttribute(shapedType, numElements, elements);
643 }
644 MlirAttribute mlirDenseElementsAttrBFloat16Get(MlirType shapedType,
645  intptr_t numElements,
646  const uint16_t *elements) {
647  size_t bufferSize = numElements * 2;
648  const void *buffer = static_cast<const void *>(elements);
649  return mlirDenseElementsAttrRawBufferGet(shapedType, bufferSize, buffer);
650 }
651 MlirAttribute mlirDenseElementsAttrFloat16Get(MlirType shapedType,
652  intptr_t numElements,
653  const uint16_t *elements) {
654  size_t bufferSize = numElements * 2;
655  const void *buffer = static_cast<const void *>(elements);
656  return mlirDenseElementsAttrRawBufferGet(shapedType, bufferSize, buffer);
657 }
658 
659 MlirAttribute mlirDenseElementsAttrStringGet(MlirType shapedType,
660  intptr_t numElements,
661  MlirStringRef *strs) {
663  values.reserve(numElements);
664  for (intptr_t i = 0; i < numElements; ++i)
665  values.push_back(unwrap(strs[i]));
666 
667  return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
668  values));
669 }
670 
671 MlirAttribute mlirDenseElementsAttrReshapeGet(MlirAttribute attr,
672  MlirType shapedType) {
673  return wrap(llvm::cast<DenseElementsAttr>(unwrap(attr))
674  .reshape(llvm::cast<ShapedType>(unwrap(shapedType))));
675 }
676 
677 //===----------------------------------------------------------------------===//
678 // Splat accessors.
679 //===----------------------------------------------------------------------===//
680 
681 bool mlirDenseElementsAttrIsSplat(MlirAttribute attr) {
682  return llvm::cast<DenseElementsAttr>(unwrap(attr)).isSplat();
683 }
684 
685 MlirAttribute mlirDenseElementsAttrGetSplatValue(MlirAttribute attr) {
686  return wrap(
687  llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<Attribute>());
688 }
689 int mlirDenseElementsAttrGetBoolSplatValue(MlirAttribute attr) {
690  return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<bool>();
691 }
692 int8_t mlirDenseElementsAttrGetInt8SplatValue(MlirAttribute attr) {
693  return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<int8_t>();
694 }
695 uint8_t mlirDenseElementsAttrGetUInt8SplatValue(MlirAttribute attr) {
696  return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<uint8_t>();
697 }
698 int32_t mlirDenseElementsAttrGetInt32SplatValue(MlirAttribute attr) {
699  return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<int32_t>();
700 }
701 uint32_t mlirDenseElementsAttrGetUInt32SplatValue(MlirAttribute attr) {
702  return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<uint32_t>();
703 }
704 int64_t mlirDenseElementsAttrGetInt64SplatValue(MlirAttribute attr) {
705  return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<int64_t>();
706 }
707 uint64_t mlirDenseElementsAttrGetUInt64SplatValue(MlirAttribute attr) {
708  return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<uint64_t>();
709 }
710 float mlirDenseElementsAttrGetFloatSplatValue(MlirAttribute attr) {
711  return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<float>();
712 }
713 double mlirDenseElementsAttrGetDoubleSplatValue(MlirAttribute attr) {
714  return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<double>();
715 }
717  return wrap(
718  llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<StringRef>());
719 }
720 
721 //===----------------------------------------------------------------------===//
722 // Indexed accessors.
723 //===----------------------------------------------------------------------===//
724 
725 bool mlirDenseElementsAttrGetBoolValue(MlirAttribute attr, intptr_t pos) {
726  return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<bool>()[pos];
727 }
728 int8_t mlirDenseElementsAttrGetInt8Value(MlirAttribute attr, intptr_t pos) {
729  return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<int8_t>()[pos];
730 }
731 uint8_t mlirDenseElementsAttrGetUInt8Value(MlirAttribute attr, intptr_t pos) {
732  return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<uint8_t>()[pos];
733 }
734 int16_t mlirDenseElementsAttrGetInt16Value(MlirAttribute attr, intptr_t pos) {
735  return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<int16_t>()[pos];
736 }
737 uint16_t mlirDenseElementsAttrGetUInt16Value(MlirAttribute attr, intptr_t pos) {
738  return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<uint16_t>()[pos];
739 }
740 int32_t mlirDenseElementsAttrGetInt32Value(MlirAttribute attr, intptr_t pos) {
741  return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<int32_t>()[pos];
742 }
743 uint32_t mlirDenseElementsAttrGetUInt32Value(MlirAttribute attr, intptr_t pos) {
744  return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<uint32_t>()[pos];
745 }
746 int64_t mlirDenseElementsAttrGetInt64Value(MlirAttribute attr, intptr_t pos) {
747  return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<int64_t>()[pos];
748 }
749 uint64_t mlirDenseElementsAttrGetUInt64Value(MlirAttribute attr, intptr_t pos) {
750  return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<uint64_t>()[pos];
751 }
752 float mlirDenseElementsAttrGetFloatValue(MlirAttribute attr, intptr_t pos) {
753  return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<float>()[pos];
754 }
755 double mlirDenseElementsAttrGetDoubleValue(MlirAttribute attr, intptr_t pos) {
756  return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<double>()[pos];
757 }
759  intptr_t pos) {
760  return wrap(
761  llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<StringRef>()[pos]);
762 }
763 
764 //===----------------------------------------------------------------------===//
765 // Raw data accessors.
766 //===----------------------------------------------------------------------===//
767 
768 const void *mlirDenseElementsAttrGetRawData(MlirAttribute attr) {
769  return static_cast<const void *>(
770  llvm::cast<DenseElementsAttr>(unwrap(attr)).getRawData().data());
771 }
772 
773 //===----------------------------------------------------------------------===//
774 // Resource blob attributes.
775 //===----------------------------------------------------------------------===//
776 
777 bool mlirAttributeIsADenseResourceElements(MlirAttribute attr) {
778  return llvm::isa<DenseResourceElementsAttr>(unwrap(attr));
779 }
780 
782  MlirType shapedType, MlirStringRef name, void *data, size_t dataLength,
783  size_t dataAlignment, bool dataIsMutable,
784  void (*deleter)(void *userData, const void *data, size_t size,
785  size_t align),
786  void *userData) {
787  AsmResourceBlob::DeleterFn cppDeleter = {};
788  if (deleter) {
789  cppDeleter = [deleter, userData](void *data, size_t size, size_t align) {
790  deleter(userData, data, size, align);
791  };
792  }
793  AsmResourceBlob blob(
794  llvm::ArrayRef(static_cast<const char *>(data), dataLength),
795  dataAlignment, std::move(cppDeleter), dataIsMutable);
796  return wrap(
797  DenseResourceElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
798  unwrap(name), std::move(blob)));
799 }
800 
801 template <typename U, typename T>
802 static MlirAttribute getDenseResource(MlirType shapedType, MlirStringRef name,
803  intptr_t numElements, const T *elements) {
804  return wrap(U::get(llvm::cast<ShapedType>(unwrap(shapedType)), unwrap(name),
806  llvm::ArrayRef(elements, numElements))));
807 }
808 
810  MlirType shapedType, MlirStringRef name, intptr_t numElements,
811  const int *elements) {
812  return getDenseResource<DenseBoolResourceElementsAttr>(shapedType, name,
813  numElements, elements);
814 }
816  MlirType shapedType, MlirStringRef name, intptr_t numElements,
817  const uint8_t *elements) {
818  return getDenseResource<DenseUI8ResourceElementsAttr>(shapedType, name,
819  numElements, elements);
820 }
822  MlirType shapedType, MlirStringRef name, intptr_t numElements,
823  const uint16_t *elements) {
824  return getDenseResource<DenseUI16ResourceElementsAttr>(shapedType, name,
825  numElements, elements);
826 }
828  MlirType shapedType, MlirStringRef name, intptr_t numElements,
829  const uint32_t *elements) {
830  return getDenseResource<DenseUI32ResourceElementsAttr>(shapedType, name,
831  numElements, elements);
832 }
834  MlirType shapedType, MlirStringRef name, intptr_t numElements,
835  const uint64_t *elements) {
836  return getDenseResource<DenseUI64ResourceElementsAttr>(shapedType, name,
837  numElements, elements);
838 }
840  MlirType shapedType, MlirStringRef name, intptr_t numElements,
841  const int8_t *elements) {
842  return getDenseResource<DenseUI8ResourceElementsAttr>(shapedType, name,
843  numElements, elements);
844 }
846  MlirType shapedType, MlirStringRef name, intptr_t numElements,
847  const int16_t *elements) {
848  return getDenseResource<DenseUI16ResourceElementsAttr>(shapedType, name,
849  numElements, elements);
850 }
852  MlirType shapedType, MlirStringRef name, intptr_t numElements,
853  const int32_t *elements) {
854  return getDenseResource<DenseUI32ResourceElementsAttr>(shapedType, name,
855  numElements, elements);
856 }
858  MlirType shapedType, MlirStringRef name, intptr_t numElements,
859  const int64_t *elements) {
860  return getDenseResource<DenseUI64ResourceElementsAttr>(shapedType, name,
861  numElements, elements);
862 }
864  MlirType shapedType, MlirStringRef name, intptr_t numElements,
865  const float *elements) {
866  return getDenseResource<DenseF32ResourceElementsAttr>(shapedType, name,
867  numElements, elements);
868 }
870  MlirType shapedType, MlirStringRef name, intptr_t numElements,
871  const double *elements) {
872  return getDenseResource<DenseF64ResourceElementsAttr>(shapedType, name,
873  numElements, elements);
874 }
875 template <typename U, typename T>
876 static T getDenseResourceVal(MlirAttribute attr, intptr_t pos) {
877  return (*llvm::cast<U>(unwrap(attr)).tryGetAsArrayRef())[pos];
878 }
879 
881  intptr_t pos) {
882  return getDenseResourceVal<DenseBoolResourceElementsAttr, uint8_t>(attr, pos);
883 }
885  intptr_t pos) {
886  return getDenseResourceVal<DenseUI8ResourceElementsAttr, uint8_t>(attr, pos);
887 }
889  intptr_t pos) {
890  return getDenseResourceVal<DenseUI16ResourceElementsAttr, uint16_t>(attr,
891  pos);
892 }
894  intptr_t pos) {
895  return getDenseResourceVal<DenseUI32ResourceElementsAttr, uint32_t>(attr,
896  pos);
897 }
899  intptr_t pos) {
900  return getDenseResourceVal<DenseUI64ResourceElementsAttr, uint64_t>(attr,
901  pos);
902 }
904  intptr_t pos) {
905  return getDenseResourceVal<DenseUI8ResourceElementsAttr, int8_t>(attr, pos);
906 }
908  intptr_t pos) {
909  return getDenseResourceVal<DenseUI16ResourceElementsAttr, int16_t>(attr, pos);
910 }
912  intptr_t pos) {
913  return getDenseResourceVal<DenseUI32ResourceElementsAttr, int32_t>(attr, pos);
914 }
916  intptr_t pos) {
917  return getDenseResourceVal<DenseUI64ResourceElementsAttr, int64_t>(attr, pos);
918 }
920  intptr_t pos) {
921  return getDenseResourceVal<DenseF32ResourceElementsAttr, float>(attr, pos);
922 }
924  intptr_t pos) {
925  return getDenseResourceVal<DenseF64ResourceElementsAttr, double>(attr, pos);
926 }
927 
928 //===----------------------------------------------------------------------===//
929 // Sparse elements attribute.
930 //===----------------------------------------------------------------------===//
931 
932 bool mlirAttributeIsASparseElements(MlirAttribute attr) {
933  return llvm::isa<SparseElementsAttr>(unwrap(attr));
934 }
935 
936 MlirAttribute mlirSparseElementsAttribute(MlirType shapedType,
937  MlirAttribute denseIndices,
938  MlirAttribute denseValues) {
940  llvm::cast<ShapedType>(unwrap(shapedType)),
941  llvm::cast<DenseElementsAttr>(unwrap(denseIndices)),
942  llvm::cast<DenseElementsAttr>(unwrap(denseValues))));
943 }
944 
945 MlirAttribute mlirSparseElementsAttrGetIndices(MlirAttribute attr) {
946  return wrap(llvm::cast<SparseElementsAttr>(unwrap(attr)).getIndices());
947 }
948 
949 MlirAttribute mlirSparseElementsAttrGetValues(MlirAttribute attr) {
950  return wrap(llvm::cast<SparseElementsAttr>(unwrap(attr)).getValues());
951 }
952 
954  return wrap(SparseElementsAttr::getTypeID());
955 }
956 
957 //===----------------------------------------------------------------------===//
958 // Strided layout attribute.
959 //===----------------------------------------------------------------------===//
960 
961 bool mlirAttributeIsAStridedLayout(MlirAttribute attr) {
962  return llvm::isa<StridedLayoutAttr>(unwrap(attr));
963 }
964 
965 MlirAttribute mlirStridedLayoutAttrGet(MlirContext ctx, int64_t offset,
966  intptr_t numStrides,
967  const int64_t *strides) {
968  return wrap(StridedLayoutAttr::get(unwrap(ctx), offset,
969  ArrayRef<int64_t>(strides, numStrides)));
970 }
971 
972 int64_t mlirStridedLayoutAttrGetOffset(MlirAttribute attr) {
973  return llvm::cast<StridedLayoutAttr>(unwrap(attr)).getOffset();
974 }
975 
976 intptr_t mlirStridedLayoutAttrGetNumStrides(MlirAttribute attr) {
977  return static_cast<intptr_t>(
978  llvm::cast<StridedLayoutAttr>(unwrap(attr)).getStrides().size());
979 }
980 
981 int64_t mlirStridedLayoutAttrGetStride(MlirAttribute attr, intptr_t pos) {
982  return llvm::cast<StridedLayoutAttr>(unwrap(attr)).getStrides()[pos];
983 }
984 
986  return wrap(StridedLayoutAttr::getTypeID());
987 }
bool mlirAttributeIsAFlatSymbolRef(MlirAttribute attr)
Checks whether the given attribute is a flat symbol reference attribute.
MlirAffineMap mlirAffineMapAttrGetValue(MlirAttribute attr)
Returns the affine map wrapped in the given affine map attribute.
MlirAttribute mlirDenseElementsAttrGet(MlirType shapedType, intptr_t numElements, MlirAttribute const *elements)
Creates a dense elements attribute with the given Shaped type and elements in the same context as the...
intptr_t mlirDictionaryAttrGetNumElements(MlirAttribute attr)
Returns the number of attributes contained in a dictionary attribute.
MlirAttribute mlirBoolAttrGet(MlirContext ctx, int value)
Creates a bool attribute in the given context with the given value.
float mlirDenseElementsAttrGetFloatValue(MlirAttribute attr, intptr_t pos)
int64_t mlirDenseInt64ResourceElementsAttrGetValue(MlirAttribute attr, intptr_t pos)
MlirStringRef mlirFlatSymbolRefAttrGetValue(MlirAttribute attr)
Returns the referenced symbol as a string reference.
MlirAttribute mlirDenseF32ArrayGet(MlirContext ctx, intptr_t size, float const *values)
int16_t mlirDenseElementsAttrGetInt16Value(MlirAttribute attr, intptr_t pos)
MlirAttribute mlirSparseElementsAttrGetIndices(MlirAttribute attr)
Returns the dense elements attribute containing 64-bit integer indices of non-null elements in the gi...
MlirAttribute mlirUnmanagedDenseDoubleResourceElementsAttrGet(MlirType shapedType, MlirStringRef name, intptr_t numElements, const double *elements)
uint32_t mlirDenseElementsAttrGetUInt32SplatValue(MlirAttribute attr)
bool mlirAttributeIsALocation(MlirAttribute attr)
bool mlirAttributeIsAString(MlirAttribute attr)
Checks whether the given attribute is a string attribute.
MlirStringRef mlirDenseElementsAttrGetStringValue(MlirAttribute attr, intptr_t pos)
int8_t mlirDenseI8ArrayGetElement(MlirAttribute attr, intptr_t pos)
uint32_t mlirDenseElementsAttrGetUInt32Value(MlirAttribute attr, intptr_t pos)
bool mlirAttributeIsADenseI32Array(MlirAttribute attr)
int64_t mlirIntegerAttrGetValueInt(MlirAttribute attr)
Returns the value stored in the given integer attribute, assuming the value is of signless type and f...
MlirStringRef mlirSymbolRefAttrGetRootReference(MlirAttribute attr)
Returns the string reference to the root referenced symbol.
MlirAttribute mlirAffineMapAttrGet(MlirAffineMap map)
Creates an affine map attribute wrapping the given map.
int mlirDenseElementsAttrGetBoolSplatValue(MlirAttribute attr)
MlirAttribute mlirStridedLayoutAttrGet(MlirContext ctx, int64_t offset, intptr_t numStrides, const int64_t *strides)
double mlirDenseDoubleResourceElementsAttrGetValue(MlirAttribute attr, intptr_t pos)
MlirAttribute mlirDisctinctAttrCreate(MlirAttribute referencedAttr)
Creates a DisctinctAttr with the referenced attribute.
uint16_t mlirDenseElementsAttrGetUInt16Value(MlirAttribute attr, intptr_t pos)
MlirAttribute mlirDenseElementsAttrFloat16Get(MlirType shapedType, intptr_t numElements, const uint16_t *elements)
float mlirDenseFloatResourceElementsAttrGetValue(MlirAttribute attr, intptr_t pos)
float mlirDenseF32ArrayGetElement(MlirAttribute attr, intptr_t pos)
uint8_t mlirDenseElementsAttrGetUInt8SplatValue(MlirAttribute attr)
uint64_t mlirIntegerAttrGetValueUInt(MlirAttribute attr)
Returns the value stored in the given integer attribute, assuming the value is of unsigned type and f...
bool mlirDenseBoolArrayGetElement(MlirAttribute attr, intptr_t pos)
Get an element of a dense array.
MlirAttribute mlirSparseElementsAttribute(MlirType shapedType, MlirAttribute denseIndices, MlirAttribute denseValues)
Creates a sparse elements attribute of the given shape from a list of indices and a list of associate...
bool mlirAttributeIsADictionary(MlirAttribute attr)
Checks whether the given attribute is a dictionary attribute.
bool mlirDenseBoolResourceElementsAttrGetValue(MlirAttribute attr, intptr_t pos)
Returns the pos-th value (flat contiguous indexing) of a specific type contained by the given dense r...
MlirAttribute mlirFlatSymbolRefAttrGet(MlirContext ctx, MlirStringRef symbol)
Creates a flat symbol reference attribute in the given context referencing a symbol identified by the...
MlirAttribute mlirDenseElementsAttrInt16Get(MlirType shapedType, intptr_t numElements, const int16_t *elements)
bool mlirAttributeIsADenseElements(MlirAttribute attr)
Checks whether the given attribute is a dense elements attribute.
uint16_t mlirDenseUInt16ResourceElementsAttrGetValue(MlirAttribute attr, intptr_t pos)
MlirTypeID mlirFloatAttrGetTypeID(void)
Returns the typeID of a Float attribute.
MlirAttribute mlirSymbolRefAttrGet(MlirContext ctx, MlirStringRef symbol, intptr_t numReferences, MlirAttribute const *references)
Creates a symbol reference attribute in the given context referencing a symbol identified by the give...
uint64_t mlirDenseUInt64ResourceElementsAttrGetValue(MlirAttribute attr, intptr_t pos)
const void * mlirDenseElementsAttrGetRawData(MlirAttribute attr)
Returns the raw data of the given dense elements attribute.
bool mlirAttributeIsASparseElements(MlirAttribute attr)
Checks whether the given attribute is a sparse elements attribute.
MlirTypeID mlirAffineMapAttrGetTypeID(void)
Returns the typeID of an AffineMap attribute.
bool mlirBoolAttrGetValue(MlirAttribute attr)
Returns the value stored in the given bool attribute.
MlirTypeID mlirDenseArrayAttrGetTypeID()
int16_t mlirDenseInt16ResourceElementsAttrGetValue(MlirAttribute attr, intptr_t pos)
MlirAttribute mlirDenseElementsAttrBoolGet(MlirType shapedType, intptr_t numElements, const int *elements)
Creates a dense elements attribute with the given shaped type from elements of a specific type.
uint64_t mlirDenseElementsAttrGetUInt64SplatValue(MlirAttribute attr)
int64_t mlirIntegerAttrGetValueSInt(MlirAttribute attr)
Returns the value stored in the given integer attribute, assuming the value is of signed type and fit...
MlirAttribute mlirDenseI32ArrayGet(MlirContext ctx, intptr_t size, int32_t const *values)
MlirAttribute mlirSymbolRefAttrGetNestedReference(MlirAttribute attr, intptr_t pos)
Returns pos-th reference nested in the given symbol reference attribute.
MlirAttribute mlirDenseElementsAttrStringGet(MlirType shapedType, intptr_t numElements, MlirStringRef *strs)
Creates a dense elements attribute with the given shaped type from string elements.
MlirTypeID mlirIntegerSetAttrGetTypeID(void)
Returns the typeID of an IntegerSet attribute.
MlirAttribute mlirUnmanagedDenseResourceElementsAttrGet(MlirType shapedType, MlirStringRef name, void *data, size_t dataLength, size_t dataAlignment, bool dataIsMutable, void(*deleter)(void *userData, const void *data, size_t size, size_t align), void *userData)
Unlike the typed accessors below, constructs the attribute with a raw data buffer and no type/alignme...
MlirAttribute mlirUnmanagedDenseInt16ResourceElementsAttrGet(MlirType shapedType, MlirStringRef name, intptr_t numElements, const int16_t *elements)
MlirAttribute mlirDenseElementsAttrDoubleGet(MlirType shapedType, intptr_t numElements, const double *elements)
MlirAttribute mlirUnmanagedDenseUInt16ResourceElementsAttrGet(MlirType shapedType, MlirStringRef name, intptr_t numElements, const uint16_t *elements)
intptr_t mlirSymbolRefAttrGetNumNestedReferences(MlirAttribute attr)
Returns the number of references nested in the given symbol reference attribute.
bool mlirAttributeIsADenseI16Array(MlirAttribute attr)
MlirAttribute mlirDenseElementsAttrDoubleSplatGet(MlirType shapedType, double element)
intptr_t mlirDenseArrayGetNumElements(MlirAttribute attr)
Get the size of a dense array.
bool mlirAttributeIsADenseBoolArray(MlirAttribute attr)
Checks whether the given attribute is a dense array attribute.
MlirAttribute mlirUnmanagedDenseBoolResourceElementsAttrGet(MlirType shapedType, MlirStringRef name, intptr_t numElements, const int *elements)
bool mlirAttributeIsADenseI64Array(MlirAttribute attr)
MlirStringRef mlirStringAttrGetValue(MlirAttribute attr)
Returns the attribute values as a string reference.
bool mlirAttributeIsAElements(MlirAttribute attr)
Checks whether the given attribute is an elements attribute.
MlirAttribute mlirStringAttrTypedGet(MlirType type, MlirStringRef str)
Creates a string attribute in the given context containing the given string.
uint8_t mlirDenseElementsAttrGetUInt8Value(MlirAttribute attr, intptr_t pos)
uint64_t mlirDenseElementsAttrGetUInt64Value(MlirAttribute attr, intptr_t pos)
MlirAttribute mlirDenseElementsAttrUInt8SplatGet(MlirType shapedType, uint8_t element)
MlirTypeID mlirTypeAttrGetTypeID(void)
Returns the typeID of a Type attribute.
MlirAttribute mlirDictionaryAttrGet(MlirContext ctx, intptr_t numElements, MlirNamedAttribute const *elements)
Creates a dictionary attribute containing the given list of elements in the provided context.
uint8_t mlirDenseUInt8ResourceElementsAttrGetValue(MlirAttribute attr, intptr_t pos)
int8_t mlirDenseElementsAttrGetInt8SplatValue(MlirAttribute attr)
MlirTypeID mlirDenseIntOrFPElementsAttrGetTypeID(void)
Returns the typeID of an DenseIntOrFPElements attribute.
MlirAttribute mlirDenseElementsAttrUInt16Get(MlirType shapedType, intptr_t numElements, const uint16_t *elements)
MlirNamedAttribute mlirDictionaryAttrGetElement(MlirAttribute attr, intptr_t pos)
Returns pos-th element of the given dictionary attribute.
MlirAttribute mlirDenseElementsAttrBFloat16Get(MlirType shapedType, intptr_t numElements, const uint16_t *elements)
int16_t mlirDenseI16ArrayGetElement(MlirAttribute attr, intptr_t pos)
int32_t mlirDenseI32ArrayGetElement(MlirAttribute attr, intptr_t pos)
MlirAttribute mlirStringAttrGet(MlirContext ctx, MlirStringRef str)
Creates a string attribute in the given context containing the given string.
bool mlirAttributeIsADenseFPElements(MlirAttribute attr)
bool mlirAttributeIsADenseI8Array(MlirAttribute attr)
MlirTypeID mlirOpaqueAttrGetTypeID(void)
Returns the typeID of an Opaque attribute.
MlirStringRef mlirSymbolRefAttrGetLeafReference(MlirAttribute attr)
Returns the string reference to the leaf referenced symbol.
bool mlirAttributeIsAType(MlirAttribute attr)
Checks whether the given attribute is a type attribute.
MlirAttribute mlirIntegerAttrGet(MlirType type, int64_t value)
Creates an integer attribute of the given type with the given integer value.
MlirType mlirTypeAttrGetValue(MlirAttribute attr)
Returns the type stored in the given type attribute.
MlirAttribute mlirArrayAttrGet(MlirContext ctx, intptr_t numElements, MlirAttribute const *elements)
Creates an array element containing the given list of elements in the given context.
double mlirDenseElementsAttrGetDoubleSplatValue(MlirAttribute attr)
MlirAttribute mlirUnmanagedDenseFloatResourceElementsAttrGet(MlirType shapedType, MlirStringRef name, intptr_t numElements, const float *elements)
MlirAttribute mlirDenseElementsAttrInt64SplatGet(MlirType shapedType, int64_t element)
double mlirFloatAttrGetValueDouble(MlirAttribute attr)
Returns the value stored in the given floating point attribute, interpreting the value as double.
bool mlirAttributeIsAArray(MlirAttribute attr)
Checks whether the given attribute is an array attribute.
bool mlirAttributeIsAOpaque(MlirAttribute attr)
Checks whether the given attribute is an opaque attribute.
MlirAttribute mlirDenseElementsAttrFloatSplatGet(MlirType shapedType, float element)
MlirAttribute mlirDenseF64ArrayGet(MlirContext ctx, intptr_t size, double const *values)
bool mlirAttributeIsAAffineMap(MlirAttribute attr)
Checks whether the given attribute is an affine map attribute.
MlirAttribute mlirDenseElementsAttrFloatGet(MlirType shapedType, intptr_t numElements, const float *elements)
MlirAttribute mlirSparseElementsAttrGetValues(MlirAttribute attr)
Returns the dense elements attribute containing the non-null elements in the given sparse elements at...
int64_t mlirStridedLayoutAttrGetStride(MlirAttribute attr, intptr_t pos)
MlirAttribute mlirArrayAttrGetElement(MlirAttribute attr, intptr_t pos)
Returns pos-th element stored in the given array attribute.
MlirStringRef mlirDenseElementsAttrGetStringSplatValue(MlirAttribute attr)
bool mlirDenseElementsAttrGetBoolValue(MlirAttribute attr, intptr_t pos)
Returns the pos-th value (flat contiguous indexing) of a specific type contained by the given dense e...
int32_t mlirDenseElementsAttrGetInt32Value(MlirAttribute attr, intptr_t pos)
intptr_t mlirStridedLayoutAttrGetNumStrides(MlirAttribute attr)
bool mlirAttributeIsADenseIntElements(MlirAttribute attr)
MlirTypeID mlirUnitAttrGetTypeID(void)
Returns the typeID of a Unit attribute.
bool mlirAttributeIsADenseF64Array(MlirAttribute attr)
MlirAttribute mlirDenseBoolArrayGet(MlirContext ctx, intptr_t size, int const *values)
Create a dense array attribute with the given elements.
MlirAttribute mlirDenseElementsAttrUInt32Get(MlirType shapedType, intptr_t numElements, const uint32_t *elements)
bool mlirAttributeIsABool(MlirAttribute attr)
Checks whether the given attribute is a bool attribute.
bool mlirAttributeIsADenseF32Array(MlirAttribute attr)
MlirAttribute mlirUnitAttrGet(MlirContext ctx)
Creates a unit attribute in the given context.
MlirAttribute mlirDenseI16ArrayGet(MlirContext ctx, intptr_t size, int16_t const *values)
int32_t mlirDenseElementsAttrGetInt32SplatValue(MlirAttribute attr)
int64_t mlirElementsAttrGetNumElements(MlirAttribute attr)
Gets the total number of elements in the given elements attribute.
MlirTypeID mlirStridedLayoutAttrGetTypeID(void)
Returns the typeID of a StridedLayout attribute.
double mlirDenseElementsAttrGetDoubleValue(MlirAttribute attr, intptr_t pos)
bool mlirElementsAttrIsValidIndex(MlirAttribute attr, intptr_t rank, uint64_t *idxs)
Checks whether the given rank-dimensional index is valid in the given elements attribute.
MlirAttribute mlirDenseElementsAttrRawBufferGet(MlirType shapedType, size_t rawBufferSize, const void *rawBuffer)
Creates a dense elements attribute with the given Shaped type and elements populated from a packed,...
bool mlirAttributeIsAFloat(MlirAttribute attr)
Checks whether the given attribute is a floating point attribute.
MlirAttribute mlirUnmanagedDenseInt32ResourceElementsAttrGet(MlirType shapedType, MlirStringRef name, intptr_t numElements, const int32_t *elements)
MlirAttribute mlirFloatAttrDoubleGet(MlirContext ctx, MlirType type, double value)
Creates a floating point attribute in the given context with the given double value and double-precis...
MlirAttribute mlirUnmanagedDenseInt8ResourceElementsAttrGet(MlirType shapedType, MlirStringRef name, intptr_t numElements, const int8_t *elements)
intptr_t mlirArrayAttrGetNumElements(MlirAttribute attr)
Returns the number of elements stored in the given array attribute.
MlirAttribute mlirDenseI64ArrayGet(MlirContext ctx, intptr_t size, int64_t const *values)
int64_t mlirDenseElementsAttrGetInt64Value(MlirAttribute attr, intptr_t pos)
bool mlirAttributeIsAStridedLayout(MlirAttribute attr)
bool mlirAttributeIsAIntegerSet(MlirAttribute attr)
Checks whether the given attribute is an integer set attribute.
int8_t mlirDenseInt8ResourceElementsAttrGetValue(MlirAttribute attr, intptr_t pos)
MlirAttribute mlirDenseElementsAttrGetSplatValue(MlirAttribute attr)
Returns the single replicated value (splat) of a specific type contained by the given dense elements ...
MlirTypeID mlirStringAttrGetTypeID(void)
Returns the typeID of a String attribute.
static MlirAttribute getDenseResource(MlirType shapedType, MlirStringRef name, intptr_t numElements, const T *elements)
MlirAttribute mlirDenseElementsAttrUInt8Get(MlirType shapedType, intptr_t numElements, const uint8_t *elements)
static MlirAttribute getDenseAttribute(MlirType shapedType, intptr_t numElements, const T *elements)
Creates a dense attribute with elements of the type deduced by templates.
MlirAttribute mlirUnmanagedDenseInt64ResourceElementsAttrGet(MlirType shapedType, MlirStringRef name, intptr_t numElements, const int64_t *elements)
bool mlirDenseElementsAttrIsSplat(MlirAttribute attr)
Checks whether the given dense elements attribute contains a single replicated value (splat).
MlirAttribute mlirElementsAttrGetValue(MlirAttribute attr, intptr_t rank, uint64_t *idxs)
Returns the element at the given rank-dimensional index.
MlirTypeID mlirSparseElementsAttrGetTypeID(void)
Returns the typeID of a SparseElements attribute.
MlirTypeID mlirIntegerAttrGetTypeID(void)
Returns the typeID of an Integer attribute.
MlirAttribute mlirDictionaryAttrGetElementByName(MlirAttribute attr, MlirStringRef name)
Returns the dictionary attribute element with the given name or NULL if the given name does not exist...
MlirAttribute mlirUnmanagedDenseUInt8ResourceElementsAttrGet(MlirType shapedType, MlirStringRef name, intptr_t numElements, const uint8_t *elements)
double mlirDenseF64ArrayGetElement(MlirAttribute attr, intptr_t pos)
MlirAttribute mlirDenseElementsAttrInt8SplatGet(MlirType shapedType, int8_t element)
MlirAttribute mlirDenseElementsAttrInt32Get(MlirType shapedType, intptr_t numElements, const int32_t *elements)
MlirAttribute mlirDenseElementsAttrReshapeGet(MlirAttribute attr, MlirType shapedType)
Creates a dense elements attribute that has the same data as the given dense elements attribute and a...
MlirAttribute mlirDenseElementsAttrSplatGet(MlirType shapedType, MlirAttribute element)
Creates a dense elements attribute with the given Shaped type containing a single replicated element ...
MlirStringRef mlirOpaqueAttrGetDialectNamespace(MlirAttribute attr)
Returns the namespace of the dialect with which the given opaque attribute is associated.
MlirAttribute mlirOpaqueAttrGet(MlirContext ctx, MlirStringRef dialectNamespace, intptr_t dataLength, const char *data, MlirType type)
Creates an opaque attribute in the given context associated with the dialect identified by its namesp...
int64_t mlirDenseI64ArrayGetElement(MlirAttribute attr, intptr_t pos)
MlirAttribute mlirFloatAttrDoubleGetChecked(MlirLocation loc, MlirType type, double value)
Same as "mlirFloatAttrDoubleGet", but if the type is not valid for a construction of a FloatAttr,...
int64_t mlirDenseElementsAttrGetInt64SplatValue(MlirAttribute attr)
MlirAttribute mlirDenseElementsAttrInt8Get(MlirType shapedType, intptr_t numElements, const int8_t *elements)
MlirAttribute mlirDenseElementsAttrUInt64Get(MlirType shapedType, intptr_t numElements, const uint64_t *elements)
float mlirDenseElementsAttrGetFloatSplatValue(MlirAttribute attr)
MlirAttribute mlirDenseElementsAttrUInt32SplatGet(MlirType shapedType, uint32_t element)
MlirAttribute mlirUnmanagedDenseUInt64ResourceElementsAttrGet(MlirType shapedType, MlirStringRef name, intptr_t numElements, const uint64_t *elements)
bool mlirAttributeIsAUnit(MlirAttribute attr)
Checks whether the given attribute is a unit attribute.
MlirAttribute mlirDenseElementsAttrUInt64SplatGet(MlirType shapedType, uint64_t element)
MlirTypeID mlirArrayAttrGetTypeID(void)
Returns the typeID of an Array attribute.
MlirAttribute mlirDenseElementsAttrBoolSplatGet(MlirType shapedType, bool element)
int8_t mlirDenseElementsAttrGetInt8Value(MlirAttribute attr, intptr_t pos)
MlirAttribute mlirDenseI8ArrayGet(MlirContext ctx, intptr_t size, int8_t const *values)
MlirAttribute mlirDenseElementsAttrInt32SplatGet(MlirType shapedType, int32_t element)
MlirTypeID mlirSymbolRefAttrGetTypeID(void)
Returns the typeID of an SymbolRef attribute.
uint32_t mlirDenseUInt32ResourceElementsAttrGetValue(MlirAttribute attr, intptr_t pos)
bool mlirAttributeIsAInteger(MlirAttribute attr)
Checks whether the given attribute is an integer attribute.
MlirAttribute mlirDenseElementsAttrInt64Get(MlirType shapedType, intptr_t numElements, const int64_t *elements)
static T getDenseResourceVal(MlirAttribute attr, intptr_t pos)
bool mlirAttributeIsADenseResourceElements(MlirAttribute attr)
bool mlirAttributeIsASymbolRef(MlirAttribute attr)
Checks whether the given attribute is a symbol reference attribute.
MlirAttribute mlirUnmanagedDenseUInt32ResourceElementsAttrGet(MlirType shapedType, MlirStringRef name, intptr_t numElements, const uint32_t *elements)
int64_t mlirStridedLayoutAttrGetOffset(MlirAttribute attr)
MlirStringRef mlirOpaqueAttrGetData(MlirAttribute attr)
Returns the raw data as a string reference.
MlirTypeID mlirDictionaryAttrGetTypeID(void)
Returns the typeID of a Dictionary attribute.
MlirAttribute mlirTypeAttrGet(MlirType type)
Creates a type attribute wrapping the given type in the same context as the type.
int32_t mlirDenseInt32ResourceElementsAttrGetValue(MlirAttribute attr, intptr_t pos)
MlirAttribute mlirAttributeGetNull()
Returns an empty attribute.
static llvm::ArrayRef< CppTy > unwrapList(size_t size, CTy *first, llvm::SmallVectorImpl< CppTy > &storage)
Definition: Wrap.h:40
The following classes enable support for parsing and printing resources within MLIR assembly formats.
Definition: AsmState.h:88
llvm::unique_function< void(void *data, size_t size, size_t align)> DeleterFn
A deleter function that frees a blob given the data, allocation size, and allocation aligment.
Definition: AsmState.h:93
Attributes are known-constant values of operations.
Definition: Attributes.h:25
static BoolAttr get(MLIRContext *context, bool value)
static DenseElementsAttr getFromRawBuffer(ShapedType type, ArrayRef< char > rawBuffer)
Construct a dense elements attribute from a raw buffer representing the data for this attribute.
static DenseElementsAttr get(ShapedType type, ArrayRef< Attribute > values)
Constructs a dense elements attribute from an array of element values.
static bool isValidRawBuffer(ShapedType type, ArrayRef< char > rawBuffer, bool &detectedSplat)
Returns true if the given buffer is a valid raw buffer for the given type.
static DistinctAttr create(Attribute referencedAttr)
Creates a distinct attribute that associates a referenced attribute with a unique identifier.
static FlatSymbolRefAttr get(StringAttr value)
Construct a symbol reference for the given value name.
NamedAttribute represents a combination of a name and an Attribute value.
Definition: Attributes.h:202
StringAttr getName() const
Return the name of the attribute.
Definition: Attributes.cpp:49
Attribute getValue() const
Return the value of the attribute.
Definition: Attributes.h:216
static AsmResourceBlob allocateInferAlign(ArrayRef< T > data, AsmResourceBlob::DeleterFn deleter={}, bool dataIsMutable=false)
Definition: AsmState.h:227
static DenseArrayAttrImpl get(MLIRContext *context, ArrayRef< T > content)
Builder from ArrayRef<T>.
mlir::Diagnostic & unwrap(MlirDiagnostic diagnostic)
Definition: Diagnostics.h:19
MlirDiagnostic wrap(mlir::Diagnostic &diagnostic)
Definition: Diagnostics.h:24
Operation::operand_range getIndices(Operation *op)
Get the indices that the given load/store operation is operating on.
Definition: Utils.cpp:18
Include the generated interface declarations.
auto get(MLIRContext *context, Ts &&...params)
Helper method that injects context only if needed, this helps unify some of the attribute constructio...
Named MLIR attribute.
Definition: IR.h:76
A pointer to a sized fragment of a string, not necessarily null-terminated.
Definition: Support.h:73