MLIR 23.0.0git
IR.h
Go to the documentation of this file.
1//===-- mlir-c/IR.h - C API to Core MLIR IR classes ---------------*- C -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM
4// Exceptions.
5// See https://llvm.org/LICENSE.txt for license information.
6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7//
8//===----------------------------------------------------------------------===//
9//
10// This header declares the C interface to MLIR core IR classes.
11//
12// Many exotic languages can interoperate with C code but have a harder time
13// with C++ due to name mangling. So in addition to C, this interface enables
14// tools written in such languages.
15//
16//===----------------------------------------------------------------------===//
17
18#ifndef MLIR_C_IR_H
19#define MLIR_C_IR_H
20
21#include <stdbool.h>
22#include <stdint.h>
23
24#include "mlir-c/Support.h"
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
30//===----------------------------------------------------------------------===//
31/// Opaque type declarations.
32///
33/// Types are exposed to C bindings as structs containing opaque pointers. They
34/// are not supposed to be inspected from C. This allows the underlying
35/// representation to change without affecting the API users. The use of structs
36/// instead of typedefs enables some type safety as structs are not implicitly
37/// convertible to each other.
38///
39/// Instances of these types may or may not own the underlying object (most
40/// often only point to an IR fragment without owning it). The ownership
41/// semantics is defined by how an instance of the type was obtained.
42
43//===----------------------------------------------------------------------===//
44
45#define DEFINE_C_API_STRUCT(name, storage) \
46 struct name { \
47 storage *ptr; \
48 }; \
49 typedef struct name name
50
51DEFINE_C_API_STRUCT(MlirAsmState, void);
52DEFINE_C_API_STRUCT(MlirBytecodeWriterConfig, void);
53DEFINE_C_API_STRUCT(MlirContext, void);
54DEFINE_C_API_STRUCT(MlirDialect, void);
55DEFINE_C_API_STRUCT(MlirDialectRegistry, void);
56DEFINE_C_API_STRUCT(MlirOperation, void);
57DEFINE_C_API_STRUCT(MlirOpOperand, void);
58DEFINE_C_API_STRUCT(MlirOpPrintingFlags, void);
59DEFINE_C_API_STRUCT(MlirBlock, void);
60DEFINE_C_API_STRUCT(MlirRegion, void);
61DEFINE_C_API_STRUCT(MlirSymbolTable, void);
62
63DEFINE_C_API_STRUCT(MlirAttribute, const void);
64DEFINE_C_API_STRUCT(MlirIdentifier, const void);
65DEFINE_C_API_STRUCT(MlirLocation, const void);
66DEFINE_C_API_STRUCT(MlirModule, const void);
67DEFINE_C_API_STRUCT(MlirType, const void);
68DEFINE_C_API_STRUCT(MlirValue, const void);
69
70#undef DEFINE_C_API_STRUCT
71
72/// Named MLIR attribute.
73///
74/// A named attribute is essentially a (name, attribute) pair where the name is
75/// a string.
77 MlirIdentifier name;
78 MlirAttribute attribute;
79};
81
82//===----------------------------------------------------------------------===//
83// Context API.
84//===----------------------------------------------------------------------===//
85
86/// Creates an MLIR context and transfers its ownership to the caller.
87/// This sets the default multithreading option (enabled).
89
90/// Creates an MLIR context with an explicit setting of the multithreading
91/// setting and transfers its ownership to the caller.
92MLIR_CAPI_EXPORTED MlirContext
93mlirContextCreateWithThreading(bool threadingEnabled);
94
95/// Creates an MLIR context, setting the multithreading setting explicitly and
96/// pre-loading the dialects from the provided DialectRegistry.
98 MlirDialectRegistry registry, bool threadingEnabled);
99
100/// Checks if two contexts are equal.
101MLIR_CAPI_EXPORTED bool mlirContextEqual(MlirContext ctx1, MlirContext ctx2);
102
103/// Checks whether a context is null.
104static inline bool mlirContextIsNull(MlirContext context) {
105 return !context.ptr;
106}
107
108/// Takes an MLIR context owned by the caller and destroys it.
109MLIR_CAPI_EXPORTED void mlirContextDestroy(MlirContext context);
110
111/// Sets whether unregistered dialects are allowed in this context.
113mlirContextSetAllowUnregisteredDialects(MlirContext context, bool allow);
114
115/// Returns whether the context allows unregistered dialects.
117mlirContextGetAllowUnregisteredDialects(MlirContext context);
118
119/// Returns the number of dialects registered with the given context. A
120/// registered dialect will be loaded if needed by the parser.
122mlirContextGetNumRegisteredDialects(MlirContext context);
123
124/// Append the contents of the given dialect registry to the registry associated
125/// with the context.
127mlirContextAppendDialectRegistry(MlirContext ctx, MlirDialectRegistry registry);
128
129/// Returns the number of dialects loaded by the context.
130
132mlirContextGetNumLoadedDialects(MlirContext context);
133
134/// Gets the dialect instance owned by the given context using the dialect
135/// namespace to identify it, loads (i.e., constructs the instance of) the
136/// dialect if necessary. If the dialect is not registered with the context,
137/// returns null. Use mlirContextLoad<Name>Dialect to load an unregistered
138/// dialect.
139MLIR_CAPI_EXPORTED MlirDialect mlirContextGetOrLoadDialect(MlirContext context,
141
142/// Set threading mode (must be set to false to mlir-print-ir-after-all).
144 bool enable);
145
146/// Eagerly loads all available dialects registered with a context, making
147/// them available for use for IR construction.
149mlirContextLoadAllAvailableDialects(MlirContext context);
150
151/// Returns whether the given fully-qualified operation (i.e.
152/// 'dialect.operation') is registered with the context. This will return true
153/// if the dialect is loaded and the operation is registered within the
154/// dialect.
157
158/// Sets the thread pool of the context explicitly, enabling multithreading in
159/// the process. This API should be used to avoid re-creating thread pools in
160/// long-running applications that perform multiple compilations, see
161/// the C++ documentation for MLIRContext for details.
162MLIR_CAPI_EXPORTED void mlirContextSetThreadPool(MlirContext context,
163 MlirLlvmThreadPool threadPool);
164
165/// Gets the number of threads of the thread pool of the context when
166/// multithreading is enabled. Returns 1 if no multithreading.
167MLIR_CAPI_EXPORTED unsigned mlirContextGetNumThreads(MlirContext context);
168
169/// Gets the thread pool of the context when enabled multithreading, otherwise
170/// an assertion is raised.
171MLIR_CAPI_EXPORTED MlirLlvmThreadPool
172mlirContextGetThreadPool(MlirContext context);
173
174//===----------------------------------------------------------------------===//
175// Dialect API.
176//===----------------------------------------------------------------------===//
177
178/// Returns the context that owns the dialect.
179MLIR_CAPI_EXPORTED MlirContext mlirDialectGetContext(MlirDialect dialect);
180
181/// Checks if the dialect is null.
182static inline bool mlirDialectIsNull(MlirDialect dialect) {
183 return !dialect.ptr;
184}
185
186/// Checks if two dialects that belong to the same context are equal. Dialects
187/// from different contexts will not compare equal.
188MLIR_CAPI_EXPORTED bool mlirDialectEqual(MlirDialect dialect1,
189 MlirDialect dialect2);
190
191/// Returns the namespace of the given dialect.
193
194//===----------------------------------------------------------------------===//
195// DialectHandle API.
196// Registration entry-points for each dialect are declared using the common
197// MLIR_DECLARE_DIALECT_REGISTRATION_CAPI macro, which takes the dialect
198// API name (i.e. "Func", "Tensor", "Linalg") and namespace (i.e. "func",
199// "tensor", "linalg"). The following declarations are produced:
200//
201// /// Gets the above hook methods in struct form for a dialect by namespace.
202// /// This is intended to facilitate dynamic lookup and registration of
203// /// dialects via a plugin facility based on shared library symbol lookup.
204// const MlirDialectHandle *mlirGetDialectHandle__{NAMESPACE}__();
205//
206// This is done via a common macro to facilitate future expansion to
207// registration schemes.
208//===----------------------------------------------------------------------===//
209
211 const void *ptr;
212};
214
215#define MLIR_DECLARE_CAPI_DIALECT_REGISTRATION(Name, Namespace) \
216 MLIR_CAPI_EXPORTED MlirDialectHandle mlirGetDialectHandle__##Namespace##__( \
217 void)
218
219/// Returns the namespace associated with the provided dialect handle.
222
223/// Inserts the dialect associated with the provided dialect handle into the
224/// provided dialect registry
226 MlirDialectRegistry);
227
228/// Registers the dialect associated with the provided dialect handle.
230 MlirContext);
231
232/// Loads the dialect associated with the provided dialect handle.
234 MlirContext);
235
236//===----------------------------------------------------------------------===//
237// DialectRegistry API.
238//===----------------------------------------------------------------------===//
239
240/// Creates a dialect registry and transfers its ownership to the caller.
241MLIR_CAPI_EXPORTED MlirDialectRegistry mlirDialectRegistryCreate(void);
242
243/// Checks if the dialect registry is null.
244static inline bool mlirDialectRegistryIsNull(MlirDialectRegistry registry) {
245 return !registry.ptr;
246}
247
248/// Takes a dialect registry owned by the caller and destroys it.
250mlirDialectRegistryDestroy(MlirDialectRegistry registry);
251
252//===----------------------------------------------------------------------===//
253// Location API.
254//===----------------------------------------------------------------------===//
255
256/// Returns the underlying location attribute of this location.
257MLIR_CAPI_EXPORTED MlirAttribute
258mlirLocationGetAttribute(MlirLocation location);
259
260/// Creates a location from a location attribute.
261MLIR_CAPI_EXPORTED MlirLocation
262mlirLocationFromAttribute(MlirAttribute attribute);
263
264/// Creates an File/Line/Column location owned by the given context.
266 MlirContext context, MlirStringRef filename, unsigned line, unsigned col);
267
268/// Creates an File/Line/Column range location owned by the given context.
270 MlirContext context, MlirStringRef filename, unsigned start_line,
271 unsigned start_col, unsigned end_line, unsigned end_col);
272
273/// Getter for filename of FileLineColRange.
274MLIR_CAPI_EXPORTED MlirIdentifier
275mlirLocationFileLineColRangeGetFilename(MlirLocation location);
276
277/// Getter for start_line of FileLineColRange.
279mlirLocationFileLineColRangeGetStartLine(MlirLocation location);
280
281/// Getter for start_column of FileLineColRange.
283mlirLocationFileLineColRangeGetStartColumn(MlirLocation location);
284
285/// Getter for end_line of FileLineColRange.
287mlirLocationFileLineColRangeGetEndLine(MlirLocation location);
288
289/// Getter for end_column of FileLineColRange.
291mlirLocationFileLineColRangeGetEndColumn(MlirLocation location);
292
293/// TypeID Getter for FileLineColRange.
295
296/// Checks whether the given location is an FileLineColRange.
297MLIR_CAPI_EXPORTED bool mlirLocationIsAFileLineColRange(MlirLocation location);
298
299/// Creates a call site location with a callee and a caller.
300MLIR_CAPI_EXPORTED MlirLocation mlirLocationCallSiteGet(MlirLocation callee,
301 MlirLocation caller);
302
303/// Getter for callee of CallSite.
304MLIR_CAPI_EXPORTED MlirLocation
305mlirLocationCallSiteGetCallee(MlirLocation location);
306
307/// Getter for caller of CallSite.
308MLIR_CAPI_EXPORTED MlirLocation
309mlirLocationCallSiteGetCaller(MlirLocation location);
310
311/// TypeID Getter for CallSite.
313
314/// Checks whether the given location is an CallSite.
315MLIR_CAPI_EXPORTED bool mlirLocationIsACallSite(MlirLocation location);
316
317/// Creates a fused location with an array of locations and metadata.
318MLIR_CAPI_EXPORTED MlirLocation
319mlirLocationFusedGet(MlirContext ctx, intptr_t nLocations,
320 MlirLocation const *locations, MlirAttribute metadata);
321
322/// Getter for number of locations fused together.
323MLIR_CAPI_EXPORTED unsigned
324mlirLocationFusedGetNumLocations(MlirLocation location);
325
326/// Getter for locations of Fused. Requires pre-allocated memory of
327/// #fusedLocations X sizeof(MlirLocation).
329mlirLocationFusedGetLocations(MlirLocation location,
330 MlirLocation *locationsCPtr);
331
332/// Getter for metadata of Fused.
333MLIR_CAPI_EXPORTED MlirAttribute
334mlirLocationFusedGetMetadata(MlirLocation location);
335
336/// TypeID Getter for Fused.
338
339/// Checks whether the given location is an Fused.
340MLIR_CAPI_EXPORTED bool mlirLocationIsAFused(MlirLocation location);
341
342/// Creates a name location owned by the given context. Providing null location
343/// for childLoc is allowed and if childLoc is null location, then the behavior
344/// is the same as having unknown child location.
345MLIR_CAPI_EXPORTED MlirLocation mlirLocationNameGet(MlirContext context,
346 MlirStringRef name,
347 MlirLocation childLoc);
348
349/// Getter for name of Name.
350MLIR_CAPI_EXPORTED MlirIdentifier
351mlirLocationNameGetName(MlirLocation location);
352
353/// Getter for childLoc of Name.
354MLIR_CAPI_EXPORTED MlirLocation
355mlirLocationNameGetChildLoc(MlirLocation location);
356
357/// TypeID Getter for Name.
359
360/// Checks whether the given location is an Name.
361MLIR_CAPI_EXPORTED bool mlirLocationIsAName(MlirLocation location);
362
363/// Creates a location with unknown position owned by the given context.
364MLIR_CAPI_EXPORTED MlirLocation mlirLocationUnknownGet(MlirContext context);
365
366/// TypeID Getter for Unknown.
368
369/// Checks whether the given location is an Unknown.
370MLIR_CAPI_EXPORTED bool mlirLocationIsAUnknown(MlirLocation location);
371
372/// Gets the context that a location was created with.
373MLIR_CAPI_EXPORTED MlirContext mlirLocationGetContext(MlirLocation location);
374
375/// Checks if the location is null.
376static inline bool mlirLocationIsNull(MlirLocation location) {
377 return !location.ptr;
378}
379
380/// Checks if two locations are equal.
381MLIR_CAPI_EXPORTED bool mlirLocationEqual(MlirLocation l1, MlirLocation l2);
382
383/// Prints a location by sending chunks of the string representation and
384/// forwarding `userData to `callback`. Note that the callback may be called
385/// several times with consecutive chunks of the string.
386MLIR_CAPI_EXPORTED void mlirLocationPrint(MlirLocation location,
387 MlirStringCallback callback,
388 void *userData);
389
390//===----------------------------------------------------------------------===//
391// Module API.
392//===----------------------------------------------------------------------===//
393
394/// Creates a new, empty module and transfers ownership to the caller.
395MLIR_CAPI_EXPORTED MlirModule mlirModuleCreateEmpty(MlirLocation location);
396
397/// Parses a module from the string and transfers ownership to the caller.
398MLIR_CAPI_EXPORTED MlirModule mlirModuleCreateParse(MlirContext context,
399 MlirStringRef module);
400
401/// Parses a module from file and transfers ownership to the caller.
402MLIR_CAPI_EXPORTED MlirModule
403mlirModuleCreateParseFromFile(MlirContext context, MlirStringRef fileName);
404
405/// Gets the context that a module was created with.
406MLIR_CAPI_EXPORTED MlirContext mlirModuleGetContext(MlirModule module);
407
408/// Gets the body of the module, i.e. the only block it contains.
409MLIR_CAPI_EXPORTED MlirBlock mlirModuleGetBody(MlirModule module);
410
411/// Checks whether a module is null.
412static inline bool mlirModuleIsNull(MlirModule module) { return !module.ptr; }
413
414/// Takes a module owned by the caller and deletes it.
415MLIR_CAPI_EXPORTED void mlirModuleDestroy(MlirModule module);
416
417/// Views the module as a generic operation.
418MLIR_CAPI_EXPORTED MlirOperation mlirModuleGetOperation(MlirModule module);
419
420/// Views the generic operation as a module.
421/// The returned module is null when the input operation was not a ModuleOp.
422MLIR_CAPI_EXPORTED MlirModule mlirModuleFromOperation(MlirOperation op);
423
424/// Checks if two modules are equal.
425MLIR_CAPI_EXPORTED bool mlirModuleEqual(MlirModule lhs, MlirModule rhs);
426
427/// Compute a hash for the given module.
428MLIR_CAPI_EXPORTED size_t mlirModuleHashValue(MlirModule mod);
429
430//===----------------------------------------------------------------------===//
431// Operation state.
432//===----------------------------------------------------------------------===//
433
434/// An auxiliary class for constructing operations.
435///
436/// This class contains all the information necessary to construct the
437/// operation. It owns the MlirRegions it has pointers to and does not own
438/// anything else. By default, the state can be constructed from a name and
439/// location, the latter being also used to access the context, and has no other
440/// components. These components can be added progressively until the operation
441/// is constructed. Users are not expected to rely on the internals of this
442/// class and should use mlirOperationState* functions instead.
443
444struct MlirOperationState {
445 MlirStringRef name;
446 MlirLocation location;
447 intptr_t nResults;
448 MlirType *results;
449 intptr_t nOperands;
450 MlirValue *operands;
451 intptr_t nRegions;
452 MlirRegion *regions;
453 intptr_t nSuccessors;
454 MlirBlock *successors;
455 intptr_t nAttributes;
456 MlirNamedAttribute *attributes;
457 bool enableResultTypeInference;
458};
459typedef struct MlirOperationState MlirOperationState;
460
461/// Constructs an operation state from a name and a location.
463 MlirLocation loc);
464
465/// Adds a list of components to the operation state.
466MLIR_CAPI_EXPORTED void mlirOperationStateAddResults(MlirOperationState *state,
467 intptr_t n,
468 MlirType const *results);
470mlirOperationStateAddOperands(MlirOperationState *state, intptr_t n,
471 MlirValue const *operands);
473mlirOperationStateAddOwnedRegions(MlirOperationState *state, intptr_t n,
474 MlirRegion const *regions);
476mlirOperationStateAddSuccessors(MlirOperationState *state, intptr_t n,
477 MlirBlock const *successors);
479mlirOperationStateAddAttributes(MlirOperationState *state, intptr_t n,
480 MlirNamedAttribute const *attributes);
481
482/// Enables result type inference for the operation under construction. If
483/// enabled, then the caller must not have called
484/// mlirOperationStateAddResults(). Note that if enabled, the
485/// mlirOperationCreate() call is failable: it will return a null operation
486/// on inference failure and will emit diagnostics.
488mlirOperationStateEnableResultTypeInference(MlirOperationState *state);
489
490//===----------------------------------------------------------------------===//
491// AsmState API.
492// While many of these are simple settings that could be represented in a
493// struct, they are wrapped in a heap allocated object and accessed via
494// functions to maximize the possibility of compatibility over time.
495//===----------------------------------------------------------------------===//
496
497/// Creates new AsmState, as with AsmState the IR should not be mutated
498/// in-between using this state.
499/// Must be freed with a call to mlirAsmStateDestroy().
500// TODO: This should be expanded to handle location & resouce map.
501MLIR_CAPI_EXPORTED MlirAsmState
502mlirAsmStateCreateForOperation(MlirOperation op, MlirOpPrintingFlags flags);
503
504/// Creates new AsmState from value.
505/// Must be freed with a call to mlirAsmStateDestroy().
506// TODO: This should be expanded to handle location & resouce map.
507MLIR_CAPI_EXPORTED MlirAsmState
508mlirAsmStateCreateForValue(MlirValue value, MlirOpPrintingFlags flags);
509
510/// Destroys printing flags created with mlirAsmStateCreate.
511MLIR_CAPI_EXPORTED void mlirAsmStateDestroy(MlirAsmState state);
512
513//===----------------------------------------------------------------------===//
514// Op Printing flags API.
515// While many of these are simple settings that could be represented in a
516// struct, they are wrapped in a heap allocated object and accessed via
517// functions to maximize the possibility of compatibility over time.
518//===----------------------------------------------------------------------===//
519
520/// Creates new printing flags with defaults, intended for customization.
521/// Must be freed with a call to mlirOpPrintingFlagsDestroy().
522MLIR_CAPI_EXPORTED MlirOpPrintingFlags mlirOpPrintingFlagsCreate(void);
523
524/// Destroys printing flags created with mlirOpPrintingFlagsCreate.
525MLIR_CAPI_EXPORTED void mlirOpPrintingFlagsDestroy(MlirOpPrintingFlags flags);
526
527/// Enables the elision of large elements attributes by printing a lexically
528/// valid but otherwise meaningless form instead of the element data. The
529/// `largeElementLimit` is used to configure what is considered to be a "large"
530/// ElementsAttr by providing an upper limit to the number of elements.
532mlirOpPrintingFlagsElideLargeElementsAttrs(MlirOpPrintingFlags flags,
533 intptr_t largeElementLimit);
534
535/// Enables the elision of large resources strings by omitting them from the
536/// `dialect_resources` section. The `largeResourceLimit` is used to configure
537/// what is considered to be a "large" resource by providing an upper limit to
538/// the string size.
540mlirOpPrintingFlagsElideLargeResourceString(MlirOpPrintingFlags flags,
541 intptr_t largeResourceLimit);
542
543/// Enable or disable printing of debug information (based on `enable`). If
544/// 'prettyForm' is set to true, debug information is printed in a more readable
545/// 'pretty' form. Note: The IR generated with 'prettyForm' is not parsable.
547mlirOpPrintingFlagsEnableDebugInfo(MlirOpPrintingFlags flags, bool enable,
548 bool prettyForm);
549
550/// Always print operations in the generic form.
552mlirOpPrintingFlagsPrintGenericOpForm(MlirOpPrintingFlags flags);
553
554/// Print the name and location, if NamedLoc, as a prefix to the SSA ID.
556mlirOpPrintingFlagsPrintNameLocAsPrefix(MlirOpPrintingFlags flags);
557
558/// Use local scope when printing the operation. This allows for using the
559/// printer in a more localized and thread-safe setting, but may not
560/// necessarily be identical to what the IR will look like when dumping
561/// the full module.
563mlirOpPrintingFlagsUseLocalScope(MlirOpPrintingFlags flags);
564
565/// Do not verify the operation when using custom operation printers.
567mlirOpPrintingFlagsAssumeVerified(MlirOpPrintingFlags flags);
568
569/// Skip printing regions.
571mlirOpPrintingFlagsSkipRegions(MlirOpPrintingFlags flags);
572
573//===----------------------------------------------------------------------===//
574// Bytecode printing flags API.
575//===----------------------------------------------------------------------===//
576
577/// Creates new printing flags with defaults, intended for customization.
578/// Must be freed with a call to mlirBytecodeWriterConfigDestroy().
579MLIR_CAPI_EXPORTED MlirBytecodeWriterConfig
581
582/// Destroys printing flags created with mlirBytecodeWriterConfigCreate.
584mlirBytecodeWriterConfigDestroy(MlirBytecodeWriterConfig config);
585
586/// Sets the version to emit in the writer config.
588mlirBytecodeWriterConfigDesiredEmitVersion(MlirBytecodeWriterConfig flags,
589 int64_t version);
590
591//===----------------------------------------------------------------------===//
592// Operation API.
593//===----------------------------------------------------------------------===//
594
595/// Creates an operation and transfers ownership to the caller.
596/// Note that caller owned child objects are transferred in this call and must
597/// not be further used. Particularly, this applies to any regions added to
598/// the state (the implementation may invalidate any such pointers).
599///
600/// This call can fail under the following conditions, in which case, it will
601/// return a null operation and emit diagnostics:
602/// - Result type inference is enabled and cannot be performed.
603MLIR_CAPI_EXPORTED MlirOperation mlirOperationCreate(MlirOperationState *state);
604
605/// Parses an operation, giving ownership to the caller. If parsing fails a null
606/// operation will be returned, and an error diagnostic emitted.
607///
608/// `sourceStr` may be either the text assembly format, or binary bytecode
609/// format. `sourceName` is used as the file name of the source; any IR without
610/// locations will get a `FileLineColLoc` location with `sourceName` as the file
611/// name.
613 MlirContext context, MlirStringRef sourceStr, MlirStringRef sourceName);
614
615/// Creates a deep copy of an operation. The operation is not inserted and
616/// ownership is transferred to the caller.
617MLIR_CAPI_EXPORTED MlirOperation mlirOperationClone(MlirOperation op);
618
619/// Takes an operation owned by the caller and destroys it.
620MLIR_CAPI_EXPORTED void mlirOperationDestroy(MlirOperation op);
621
622/// Removes the given operation from its parent block. The operation is not
623/// destroyed. The ownership of the operation is transferred to the caller.
625
626/// Checks whether the underlying operation is null.
627static inline bool mlirOperationIsNull(MlirOperation op) { return !op.ptr; }
628
629/// Checks whether two operation handles point to the same operation. This does
630/// not perform deep comparison.
631MLIR_CAPI_EXPORTED bool mlirOperationEqual(MlirOperation op,
632 MlirOperation other);
633
634/// Compute a hash for the given operation.
635MLIR_CAPI_EXPORTED size_t mlirOperationHashValue(MlirOperation op);
636
637/// Gets the context this operation is associated with
638MLIR_CAPI_EXPORTED MlirContext mlirOperationGetContext(MlirOperation op);
639
640/// Checks if the operation name has a trait identified by the given type id.
642 MlirTypeID traitTypeID,
643 MlirContext context);
644
645/// Gets the location of the operation.
646MLIR_CAPI_EXPORTED MlirLocation mlirOperationGetLocation(MlirOperation op);
647
648/// Sets the location of the operation.
649MLIR_CAPI_EXPORTED void mlirOperationSetLocation(MlirOperation op,
650 MlirLocation loc);
651
652/// Gets the type id of the operation.
653/// Returns null if the operation does not have a registered operation
654/// description.
655MLIR_CAPI_EXPORTED MlirTypeID mlirOperationGetTypeID(MlirOperation op);
656
657/// Gets the name of the operation as an identifier.
658MLIR_CAPI_EXPORTED MlirIdentifier mlirOperationGetName(MlirOperation op);
659
660/// Gets the block that owns this operation, returning null if the operation is
661/// not owned.
662MLIR_CAPI_EXPORTED MlirBlock mlirOperationGetBlock(MlirOperation op);
663
664/// Gets the operation that owns this operation, returning null if the operation
665/// is not owned.
666MLIR_CAPI_EXPORTED MlirOperation
667mlirOperationGetParentOperation(MlirOperation op);
668
669/// Returns the number of regions attached to the given operation.
671
672/// Returns `pos`-th region attached to the operation.
673MLIR_CAPI_EXPORTED MlirRegion mlirOperationGetRegion(MlirOperation op,
674 intptr_t pos);
675
676/// Returns an operation immediately following the given operation it its
677/// enclosing block.
678MLIR_CAPI_EXPORTED MlirOperation mlirOperationGetNextInBlock(MlirOperation op);
679
680/// Returns the number of operands of the operation.
682
683/// Returns `pos`-th operand of the operation.
684MLIR_CAPI_EXPORTED MlirValue mlirOperationGetOperand(MlirOperation op,
685 intptr_t pos);
686
687/// Returns `pos`-th OpOperand of the operation.
688MLIR_CAPI_EXPORTED MlirOpOperand mlirOperationGetOpOperand(MlirOperation op,
689 intptr_t pos);
690
691/// Sets the `pos`-th operand of the operation.
692MLIR_CAPI_EXPORTED void mlirOperationSetOperand(MlirOperation op, intptr_t pos,
693 MlirValue newValue);
694
695/// Replaces the operands of the operation.
696MLIR_CAPI_EXPORTED void mlirOperationSetOperands(MlirOperation op,
697 intptr_t nOperands,
698 MlirValue const *operands);
699
700/// Returns the number of results of the operation.
702
703/// Returns `pos`-th result of the operation.
704MLIR_CAPI_EXPORTED MlirValue mlirOperationGetResult(MlirOperation op,
705 intptr_t pos);
706
707/// Returns the number of successor blocks of the operation.
709
710/// Returns `pos`-th successor of the operation.
711MLIR_CAPI_EXPORTED MlirBlock mlirOperationGetSuccessor(MlirOperation op,
712 intptr_t pos);
713
714/// Set `pos`-th successor of the operation.
716mlirOperationSetSuccessor(MlirOperation op, intptr_t pos, MlirBlock block);
717
718/// Returns true if this operation defines an inherent attribute with this name.
719/// Note: the attribute can be optional, so
720/// `mlirOperationGetInherentAttributeByName` can still return a null attribute.
723
724/// Returns an inherent attribute attached to the operation given its name.
725MLIR_CAPI_EXPORTED MlirAttribute
727
728/// Sets an inherent attribute by name, replacing the existing if it exists.
729/// This has no effect if "name" does not match an inherent attribute.
732 MlirAttribute attr);
733
734/// Returns the number of discardable attributes attached to the operation.
737
738/// Return `pos`-th discardable attribute of the operation.
741
742/// Returns a discardable attribute attached to the operation given its name.
744 MlirOperation op, MlirStringRef name);
745
746/// Sets a discardable attribute by name, replacing the existing if it exists or
747/// adding a new one otherwise. The new `attr` Attribute is not allowed to be
748/// null, use `mlirOperationRemoveDiscardableAttributeByName` to remove an
749/// Attribute instead.
752 MlirAttribute attr);
753
754/// Removes a discardable attribute by name. Returns false if the attribute was
755/// not found and true if removed.
758 MlirStringRef name);
759
760/// Returns the number of attributes attached to the operation.
761/// Deprecated, please use `mlirOperationGetNumInherentAttributes` or
762/// `mlirOperationGetNumDiscardableAttributes`.
764
765/// Return `pos`-th attribute of the operation.
766/// Deprecated, please use `mlirOperationGetInherentAttribute` or
767/// `mlirOperationGetDiscardableAttribute`.
769mlirOperationGetAttribute(MlirOperation op, intptr_t pos);
770
771/// Returns an attribute attached to the operation given its name.
772/// Deprecated, please use `mlirOperationGetInherentAttributeByName` or
773/// `mlirOperationGetDiscardableAttributeByName`.
774MLIR_CAPI_EXPORTED MlirAttribute
775mlirOperationGetAttributeByName(MlirOperation op, MlirStringRef name);
776
777/// Sets an attribute by name, replacing the existing if it exists or
778/// adding a new one otherwise.
779/// Deprecated, please use `mlirOperationSetInherentAttributeByName` or
780/// `mlirOperationSetDiscardableAttributeByName`.
782 MlirStringRef name,
783 MlirAttribute attr);
784
785/// Removes an attribute by name. Returns false if the attribute was not found
786/// and true if removed.
787/// Deprecated, please use `mlirOperationRemoveInherentAttributeByName` or
788/// `mlirOperationRemoveDiscardableAttributeByName`.
790 MlirStringRef name);
791
792/// Prints an operation by sending chunks of the string representation and
793/// forwarding `userData to `callback`. Note that the callback may be called
794/// several times with consecutive chunks of the string.
795MLIR_CAPI_EXPORTED void mlirOperationPrint(MlirOperation op,
796 MlirStringCallback callback,
797 void *userData);
798
799/// Same as mlirOperationPrint but accepts flags controlling the printing
800/// behavior.
802 MlirOpPrintingFlags flags,
803 MlirStringCallback callback,
804 void *userData);
805
806/// Same as mlirOperationPrint but accepts AsmState controlling the printing
807/// behavior as well as caching computed names.
809 MlirAsmState state,
810 MlirStringCallback callback,
811 void *userData);
812
813/// Same as mlirOperationPrint but writing the bytecode format.
815 MlirStringCallback callback,
816 void *userData);
817
818/// Same as mlirOperationWriteBytecode but with writer config and returns
819/// failure only if desired bytecode could not be honored.
821 MlirOperation op, MlirBytecodeWriterConfig config,
822 MlirStringCallback callback, void *userData);
823
824/// Prints an operation to stderr.
825MLIR_CAPI_EXPORTED void mlirOperationDump(MlirOperation op);
826
827/// Verify the operation and return true if it passes, false if it fails.
828MLIR_CAPI_EXPORTED bool mlirOperationVerify(MlirOperation op);
829
830/// Moves the given operation immediately after the other operation in its
831/// parent block. The given operation may be owned by the caller or by its
832/// current block. The other operation must belong to a block. In any case, the
833/// ownership is transferred to the block of the other operation.
834MLIR_CAPI_EXPORTED void mlirOperationMoveAfter(MlirOperation op,
835 MlirOperation other);
836
837/// Moves the given operation immediately before the other operation in its
838/// parent block. The given operation may be owner by the caller or by its
839/// current block. The other operation must belong to a block. In any case, the
840/// ownership is transferred to the block of the other operation.
841MLIR_CAPI_EXPORTED void mlirOperationMoveBefore(MlirOperation op,
842 MlirOperation other);
843
844/// Given an operation 'other' that is within the same parent block, return
845/// whether the current operation is before 'other' in the operation list
846/// of the parent block.
847/// Note: This function has an average complexity of O(1), but worst case may
848/// take O(N) where N is the number of operations within the parent block.
850 MlirOperation other);
851/// Operation walk result.
857
858/// Traversal order for operation walk.
863
864/// Operation walker type. The handler is passed an (opaque) reference to an
865/// operation and a pointer to a `userData`.
867 void *userData);
868
869/// Walks operation `op` in `walkOrder` and calls `callback` on that operation.
870/// `*userData` is passed to the callback as well and can be used to tunnel some
871/// context or other data into the callback.
873void mlirOperationWalk(MlirOperation op, MlirOperationWalkCallback callback,
874 void *userData, MlirWalkOrder walkOrder);
875
876/// Replace uses of 'of' value with the 'with' value inside the 'op' operation.
878mlirOperationReplaceUsesOfWith(MlirOperation op, MlirValue of, MlirValue with);
879
880//===----------------------------------------------------------------------===//
881// Region API.
882//===----------------------------------------------------------------------===//
883
884/// Creates a new empty region and transfers ownership to the caller.
885MLIR_CAPI_EXPORTED MlirRegion mlirRegionCreate(void);
886
887/// Takes a region owned by the caller and destroys it.
888MLIR_CAPI_EXPORTED void mlirRegionDestroy(MlirRegion region);
889
890/// Checks whether a region is null.
891static inline bool mlirRegionIsNull(MlirRegion region) { return !region.ptr; }
892
893/// Checks whether two region handles point to the same region. This does not
894/// perform deep comparison.
895MLIR_CAPI_EXPORTED bool mlirRegionEqual(MlirRegion region, MlirRegion other);
896
897/// Gets the first block in the region.
898MLIR_CAPI_EXPORTED MlirBlock mlirRegionGetFirstBlock(MlirRegion region);
899
900/// Takes a block owned by the caller and appends it to the given region.
902 MlirBlock block);
903
904/// Takes a block owned by the caller and inserts it at `pos` to the given
905/// region. This is an expensive operation that linearly scans the region,
906/// prefer insertAfter/Before instead.
908mlirRegionInsertOwnedBlock(MlirRegion region, intptr_t pos, MlirBlock block);
909
910/// Takes a block owned by the caller and inserts it after the (non-owned)
911/// reference block in the given region. The reference block must belong to the
912/// region. If the reference block is null, prepends the block to the region.
914 MlirBlock reference,
915 MlirBlock block);
916
917/// Takes a block owned by the caller and inserts it before the (non-owned)
918/// reference block in the given region. The reference block must belong to the
919/// region. If the reference block is null, appends the block to the region.
921 MlirBlock reference,
922 MlirBlock block);
923
924/// Returns first region attached to the operation.
925MLIR_CAPI_EXPORTED MlirRegion mlirOperationGetFirstRegion(MlirOperation op);
926
927/// Returns the region immediately following the given region in its parent
928/// operation.
929MLIR_CAPI_EXPORTED MlirRegion mlirRegionGetNextInOperation(MlirRegion region);
930
931/// Moves the entire content of the source region to the target region.
933 MlirRegion source);
934
935//===----------------------------------------------------------------------===//
936// Block API.
937//===----------------------------------------------------------------------===//
938
939/// Creates a new empty block with the given argument types and transfers
940/// ownership to the caller.
942 MlirType const *args,
943 MlirLocation const *locs);
944
945/// Takes a block owned by the caller and destroys it.
946MLIR_CAPI_EXPORTED void mlirBlockDestroy(MlirBlock block);
947
948/// Detach a block from the owning region and assume ownership.
949MLIR_CAPI_EXPORTED void mlirBlockDetach(MlirBlock block);
950
951/// Checks whether a block is null.
952static inline bool mlirBlockIsNull(MlirBlock block) { return !block.ptr; }
953
954/// Checks whether two blocks handles point to the same block. This does not
955/// perform deep comparison.
956MLIR_CAPI_EXPORTED bool mlirBlockEqual(MlirBlock block, MlirBlock other);
957
958/// Returns the closest surrounding operation that contains this block.
959MLIR_CAPI_EXPORTED MlirOperation mlirBlockGetParentOperation(MlirBlock);
960
961/// Returns the region that contains this block.
962MLIR_CAPI_EXPORTED MlirRegion mlirBlockGetParentRegion(MlirBlock block);
963
964/// Returns the block immediately following the given block in its parent
965/// region.
966MLIR_CAPI_EXPORTED MlirBlock mlirBlockGetNextInRegion(MlirBlock block);
967
968/// Returns the first operation in the block.
969MLIR_CAPI_EXPORTED MlirOperation mlirBlockGetFirstOperation(MlirBlock block);
970
971/// Returns the terminator operation in the block or null if no terminator.
972MLIR_CAPI_EXPORTED MlirOperation mlirBlockGetTerminator(MlirBlock block);
973
974/// Takes an operation owned by the caller and appends it to the block.
976 MlirOperation operation);
977
978/// Takes an operation owned by the caller and inserts it as `pos` to the block.
979/// This is an expensive operation that scans the block linearly, prefer
980/// insertBefore/After instead.
982 intptr_t pos,
983 MlirOperation operation);
984
985/// Takes an operation owned by the caller and inserts it after the (non-owned)
986/// reference operation in the given block. If the reference is null, prepends
987/// the operation. Otherwise, the reference must belong to the block.
989mlirBlockInsertOwnedOperationAfter(MlirBlock block, MlirOperation reference,
990 MlirOperation operation);
991
992/// Takes an operation owned by the caller and inserts it before the (non-owned)
993/// reference operation in the given block. If the reference is null, appends
994/// the operation. Otherwise, the reference must belong to the block.
996mlirBlockInsertOwnedOperationBefore(MlirBlock block, MlirOperation reference,
997 MlirOperation operation);
998
999/// Returns the number of arguments of the block.
1001
1002/// Appends an argument of the specified type to the block. Returns the newly
1003/// added argument.
1004MLIR_CAPI_EXPORTED MlirValue mlirBlockAddArgument(MlirBlock block,
1005 MlirType type,
1006 MlirLocation loc);
1007
1008/// Erase the argument at 'index' and remove it from the argument list.
1009MLIR_CAPI_EXPORTED void mlirBlockEraseArgument(MlirBlock block, unsigned index);
1010
1011/// Inserts an argument of the specified type at a specified index to the block.
1012/// Returns the newly added argument.
1013MLIR_CAPI_EXPORTED MlirValue mlirBlockInsertArgument(MlirBlock block,
1014 intptr_t pos,
1015 MlirType type,
1016 MlirLocation loc);
1017
1018/// Returns `pos`-th argument of the block.
1019MLIR_CAPI_EXPORTED MlirValue mlirBlockGetArgument(MlirBlock block,
1020 intptr_t pos);
1021
1022/// Prints a block by sending chunks of the string representation and
1023/// forwarding `userData to `callback`. Note that the callback may be called
1024/// several times with consecutive chunks of the string.
1026mlirBlockPrint(MlirBlock block, MlirStringCallback callback, void *userData);
1027
1028/// Returns the number of successor blocks of the block.
1030
1031/// Returns `pos`-th successor of the block.
1032MLIR_CAPI_EXPORTED MlirBlock mlirBlockGetSuccessor(MlirBlock block,
1033 intptr_t pos);
1034
1035/// Returns the number of predecessor blocks of the block.
1037
1038/// Returns `pos`-th predecessor of the block.
1039///
1040/// WARNING: This getter is more expensive than the others here because
1041/// the impl actually iterates the use-def chain (of block operands) anew for
1042/// each indexed access.
1043MLIR_CAPI_EXPORTED MlirBlock mlirBlockGetPredecessor(MlirBlock block,
1044 intptr_t pos);
1045
1046//===----------------------------------------------------------------------===//
1047// Value API.
1048//===----------------------------------------------------------------------===//
1049
1050/// Returns whether the value is null.
1051static inline bool mlirValueIsNull(MlirValue value) { return !value.ptr; }
1052
1053/// Returns 1 if two values are equal, 0 otherwise.
1054MLIR_CAPI_EXPORTED bool mlirValueEqual(MlirValue value1, MlirValue value2);
1055
1056/// Returns 1 if the value is a block argument, 0 otherwise.
1057MLIR_CAPI_EXPORTED bool mlirValueIsABlockArgument(MlirValue value);
1058
1059/// Returns 1 if the value is an operation result, 0 otherwise.
1060MLIR_CAPI_EXPORTED bool mlirValueIsAOpResult(MlirValue value);
1061
1062/// Returns the block in which this value is defined as an argument. Asserts if
1063/// the value is not a block argument.
1064MLIR_CAPI_EXPORTED MlirBlock mlirBlockArgumentGetOwner(MlirValue value);
1065
1066/// Returns the position of the value in the argument list of its block.
1068
1069/// Sets the type of the block argument to the given type.
1070MLIR_CAPI_EXPORTED void mlirBlockArgumentSetType(MlirValue value,
1071 MlirType type);
1072
1073/// Sets the location of the block argument to the given location.
1075 MlirLocation loc);
1076
1077/// Returns an operation that produced this value as its result. Asserts if the
1078/// value is not an op result.
1079MLIR_CAPI_EXPORTED MlirOperation mlirOpResultGetOwner(MlirValue value);
1080
1081/// Returns the position of the value in the list of results of the operation
1082/// that produced it.
1084
1085/// Returns the type of the value.
1086MLIR_CAPI_EXPORTED MlirType mlirValueGetType(MlirValue value);
1087
1088/// Set the type of the value.
1089MLIR_CAPI_EXPORTED void mlirValueSetType(MlirValue value, MlirType type);
1090
1091/// Prints the value to the standard error stream.
1092MLIR_CAPI_EXPORTED void mlirValueDump(MlirValue value);
1093
1094/// Prints a value by sending chunks of the string representation and
1095/// forwarding `userData to `callback`. Note that the callback may be called
1096/// several times with consecutive chunks of the string.
1098mlirValuePrint(MlirValue value, MlirStringCallback callback, void *userData);
1099
1100/// Prints a value as an operand (i.e., the ValueID).
1101MLIR_CAPI_EXPORTED void mlirValuePrintAsOperand(MlirValue value,
1102 MlirAsmState state,
1103 MlirStringCallback callback,
1104 void *userData);
1105
1106/// Returns an op operand representing the first use of the value, or a null op
1107/// operand if there are no uses.
1108MLIR_CAPI_EXPORTED MlirOpOperand mlirValueGetFirstUse(MlirValue value);
1109
1110/// Replace all uses of 'of' value with the 'with' value, updating anything in
1111/// the IR that uses 'of' to use the other value instead. When this returns
1112/// there are zero uses of 'of'.
1114 MlirValue with);
1115
1116/// Replace all uses of 'of' value with 'with' value, updating anything in the
1117/// IR that uses 'of' to use 'with' instead, except if the user is listed in
1118/// 'exceptions'. The 'exceptions' parameter is an array of MlirOperation
1119/// pointers with a length of 'numExceptions'.
1121mlirValueReplaceAllUsesExcept(MlirValue of, MlirValue with,
1122 intptr_t numExceptions,
1123 MlirOperation *exceptions);
1124
1125/// Gets the location of the value.
1126MLIR_CAPI_EXPORTED MlirLocation mlirValueGetLocation(MlirValue v);
1127
1128/// Gets the context that a value was created with.
1129MLIR_CAPI_EXPORTED MlirContext mlirValueGetContext(MlirValue v);
1130
1131//===----------------------------------------------------------------------===//
1132// OpOperand API.
1133//===----------------------------------------------------------------------===//
1134
1135/// Returns whether the op operand is null.
1136MLIR_CAPI_EXPORTED bool mlirOpOperandIsNull(MlirOpOperand opOperand);
1137
1138/// Returns the value of an op operand.
1139MLIR_CAPI_EXPORTED MlirValue mlirOpOperandGetValue(MlirOpOperand opOperand);
1140
1141/// Returns the owner operation of an op operand.
1142MLIR_CAPI_EXPORTED MlirOperation mlirOpOperandGetOwner(MlirOpOperand opOperand);
1143
1144/// Returns the operand number of an op operand.
1145MLIR_CAPI_EXPORTED unsigned
1146mlirOpOperandGetOperandNumber(MlirOpOperand opOperand);
1147
1148/// Returns an op operand representing the next use of the value, or a null op
1149/// operand if there is no next use.
1150MLIR_CAPI_EXPORTED MlirOpOperand
1151mlirOpOperandGetNextUse(MlirOpOperand opOperand);
1152
1153//===----------------------------------------------------------------------===//
1154// Type API.
1155//===----------------------------------------------------------------------===//
1156
1157/// Parses a type. The type is owned by the context.
1158MLIR_CAPI_EXPORTED MlirType mlirTypeParseGet(MlirContext context,
1159 MlirStringRef type);
1160
1161/// Gets the context that a type was created with.
1162MLIR_CAPI_EXPORTED MlirContext mlirTypeGetContext(MlirType type);
1163
1164/// Gets the type ID of the type.
1165MLIR_CAPI_EXPORTED MlirTypeID mlirTypeGetTypeID(MlirType type);
1166
1167/// Gets the dialect a type belongs to.
1168MLIR_CAPI_EXPORTED MlirDialect mlirTypeGetDialect(MlirType type);
1169
1170/// Checks whether a type is null.
1171static inline bool mlirTypeIsNull(MlirType type) { return !type.ptr; }
1172
1173/// Checks if two types are equal.
1174MLIR_CAPI_EXPORTED bool mlirTypeEqual(MlirType t1, MlirType t2);
1175
1176/// Prints a location by sending chunks of the string representation and
1177/// forwarding `userData to `callback`. Note that the callback may be called
1178/// several times with consecutive chunks of the string.
1180mlirTypePrint(MlirType type, MlirStringCallback callback, void *userData);
1181
1182/// Prints the type to the standard error stream.
1183MLIR_CAPI_EXPORTED void mlirTypeDump(MlirType type);
1184
1185//===----------------------------------------------------------------------===//
1186// Attribute API.
1187//===----------------------------------------------------------------------===//
1188
1189/// Parses an attribute. The attribute is owned by the context.
1190MLIR_CAPI_EXPORTED MlirAttribute mlirAttributeParseGet(MlirContext context,
1191 MlirStringRef attr);
1192
1193/// Gets the context that an attribute was created with.
1194MLIR_CAPI_EXPORTED MlirContext mlirAttributeGetContext(MlirAttribute attribute);
1195
1196/// Gets the type of this attribute.
1197MLIR_CAPI_EXPORTED MlirType mlirAttributeGetType(MlirAttribute attribute);
1198
1199/// Gets the type id of the attribute.
1200MLIR_CAPI_EXPORTED MlirTypeID mlirAttributeGetTypeID(MlirAttribute attribute);
1201
1202/// Gets the dialect of the attribute.
1203MLIR_CAPI_EXPORTED MlirDialect mlirAttributeGetDialect(MlirAttribute attribute);
1204
1205/// Checks whether an attribute is null.
1206static inline bool mlirAttributeIsNull(MlirAttribute attr) { return !attr.ptr; }
1207
1208/// Checks if two attributes are equal.
1209MLIR_CAPI_EXPORTED bool mlirAttributeEqual(MlirAttribute a1, MlirAttribute a2);
1210
1211/// Prints an attribute by sending chunks of the string representation and
1212/// forwarding `userData to `callback`. Note that the callback may be called
1213/// several times with consecutive chunks of the string.
1214MLIR_CAPI_EXPORTED void mlirAttributePrint(MlirAttribute attr,
1215 MlirStringCallback callback,
1216 void *userData);
1217
1218/// Prints the attribute to the standard error stream.
1219MLIR_CAPI_EXPORTED void mlirAttributeDump(MlirAttribute attr);
1220
1221/// Associates an attribute with the name. Takes ownership of neither.
1223 MlirAttribute attr);
1224
1225//===----------------------------------------------------------------------===//
1226// Identifier API.
1227//===----------------------------------------------------------------------===//
1228
1229/// Gets an identifier with the given string value.
1230MLIR_CAPI_EXPORTED MlirIdentifier mlirIdentifierGet(MlirContext context,
1231 MlirStringRef str);
1232
1233/// Returns the context associated with this identifier
1234MLIR_CAPI_EXPORTED MlirContext mlirIdentifierGetContext(MlirIdentifier);
1235
1236/// Checks whether two identifiers are the same.
1237MLIR_CAPI_EXPORTED bool mlirIdentifierEqual(MlirIdentifier ident,
1238 MlirIdentifier other);
1239
1240/// Gets the string value of the identifier.
1242
1243//===----------------------------------------------------------------------===//
1244// Symbol and SymbolTable API.
1245//===----------------------------------------------------------------------===//
1246
1247/// Returns the name of the attribute used to store symbol names compatible with
1248/// symbol tables.
1250
1251/// Returns the name of the attribute used to store symbol visibility.
1254
1255/// Creates a symbol table for the given operation. If the operation does not
1256/// have the SymbolTable trait, returns a null symbol table.
1257MLIR_CAPI_EXPORTED MlirSymbolTable
1258mlirSymbolTableCreate(MlirOperation operation);
1259
1260/// Returns true if the symbol table is null.
1261static inline bool mlirSymbolTableIsNull(MlirSymbolTable symbolTable) {
1262 return !symbolTable.ptr;
1263}
1264
1265/// Destroys the symbol table created with mlirSymbolTableCreate. This does not
1266/// affect the operations in the table.
1267MLIR_CAPI_EXPORTED void mlirSymbolTableDestroy(MlirSymbolTable symbolTable);
1268
1269/// Looks up a symbol with the given name in the given symbol table and returns
1270/// the operation that corresponds to the symbol. If the symbol cannot be found,
1271/// returns a null operation.
1272MLIR_CAPI_EXPORTED MlirOperation
1273mlirSymbolTableLookup(MlirSymbolTable symbolTable, MlirStringRef name);
1274
1275/// Inserts the given operation into the given symbol table. The operation must
1276/// have the symbol trait. If the symbol table already has a symbol with the
1277/// same name, renames the symbol being inserted to ensure name uniqueness. Note
1278/// that this does not move the operation itself into the block of the symbol
1279/// table operation, this should be done separately. Returns the name of the
1280/// symbol after insertion.
1281MLIR_CAPI_EXPORTED MlirAttribute
1282mlirSymbolTableInsert(MlirSymbolTable symbolTable, MlirOperation operation);
1283
1284/// Removes the given operation from the symbol table and erases it.
1285MLIR_CAPI_EXPORTED void mlirSymbolTableErase(MlirSymbolTable symbolTable,
1286 MlirOperation operation);
1287
1288/// Attempt to replace all uses that are nested within the given operation
1289/// of the given symbol 'oldSymbol' with the provided 'newSymbol'. This does
1290/// not traverse into nested symbol tables. Will fail atomically if there are
1291/// any unknown operations that may be potential symbol tables.
1293 MlirStringRef oldSymbol, MlirStringRef newSymbol, MlirOperation from);
1294
1295/// Walks all symbol table operations nested within, and including, `op`. For
1296/// each symbol table operation, the provided callback is invoked with the op
1297/// and a boolean signifying if the symbols within that symbol table can be
1298/// treated as if all uses within the IR are visible to the caller.
1299/// `allSymUsesVisible` identifies whether all of the symbol uses of symbols
1300/// within `op` are visible.
1302 MlirOperation from, bool allSymUsesVisible,
1303 void (*callback)(MlirOperation, bool, void *userData), void *userData);
1304
1305#ifdef __cplusplus
1306}
1307#endif
1308
1309#endif // MLIR_C_IR_H
lhs
MlirAttribute mlirOperationGetDiscardableAttributeByName(MlirOperation op, MlirStringRef name)
Definition IR.cpp:794
MlirContext mlirModuleGetContext(MlirModule module)
Definition IR.cpp:453
size_t mlirModuleHashValue(MlirModule mod)
Definition IR.cpp:479
intptr_t mlirBlockGetNumPredecessors(MlirBlock block)
Definition IR.cpp:1113
MlirIdentifier mlirOperationGetName(MlirOperation op)
Definition IR.cpp:682
bool mlirValueIsABlockArgument(MlirValue value)
Definition IR.cpp:1133
intptr_t mlirOperationGetNumRegions(MlirOperation op)
Definition IR.cpp:694
MlirBlock mlirOperationGetBlock(MlirOperation op)
Definition IR.cpp:686
void mlirBlockArgumentSetType(MlirValue value, MlirType type)
Definition IR.cpp:1150
void mlirOperationStateAddAttributes(MlirOperationState *state, intptr_t n, MlirNamedAttribute const *attributes)
Definition IR.cpp:528
MlirValue mlirOperationGetResult(MlirOperation op, intptr_t pos)
Definition IR.cpp:749
MlirModule mlirModuleCreateParseFromFile(MlirContext context, MlirStringRef fileName)
Definition IR.cpp:444
bool mlirOperationNameHasTrait(MlirStringRef opName, MlirTypeID traitTypeID, MlirContext context)
Definition IR.cpp:662
MlirAsmState mlirAsmStateCreateForValue(MlirValue value, MlirOpPrintingFlags flags)
Definition IR.cpp:177
intptr_t mlirOperationGetNumResults(MlirOperation op)
Definition IR.cpp:745
void mlirOperationDestroy(MlirOperation op)
Definition IR.cpp:646
MlirAttribute mlirOperationGetInherentAttributeByName(MlirOperation op, MlirStringRef name)
Definition IR.cpp:767
MlirContext mlirAttributeGetContext(MlirAttribute attribute)
Definition IR.cpp:1298
MlirType mlirValueGetType(MlirValue value)
Definition IR.cpp:1169
void mlirBlockPrint(MlirBlock block, MlirStringCallback callback, void *userData)
Definition IR.cpp:1099
void mlirOperationSetDiscardableAttributeByName(MlirOperation op, MlirStringRef name, MlirAttribute attr)
Definition IR.cpp:799
MlirOpPrintingFlags mlirOpPrintingFlagsCreate()
Definition IR.cpp:201
bool mlirModuleEqual(MlirModule lhs, MlirModule rhs)
Definition IR.cpp:475
void mlirOpPrintingFlagsElideLargeElementsAttrs(MlirOpPrintingFlags flags, intptr_t largeElementLimit)
Definition IR.cpp:209
void mlirOperationSetSuccessor(MlirOperation op, intptr_t pos, MlirBlock block)
Definition IR.cpp:810
MlirOperation mlirOperationGetNextInBlock(MlirOperation op)
Definition IR.cpp:718
void mlirOpPrintingFlagsEnableDebugInfo(MlirOpPrintingFlags flags, bool enable, bool prettyForm)
Definition IR.cpp:219
MlirOperation mlirModuleGetOperation(MlirModule module)
Definition IR.cpp:467
void mlirOpPrintingFlagsElideLargeResourceString(MlirOpPrintingFlags flags, intptr_t largeResourceLimit)
Definition IR.cpp:214
void mlirOpPrintingFlagsUseLocalScope(MlirOpPrintingFlags flags)
Definition IR.cpp:232
MlirTypeID mlirOperationGetTypeID(MlirOperation op)
Definition IR.cpp:676
intptr_t mlirBlockArgumentGetArgNumber(MlirValue value)
Definition IR.cpp:1145
MlirBlock mlirOperationGetSuccessor(MlirOperation op, intptr_t pos)
Definition IR.cpp:757
bool mlirAttributeEqual(MlirAttribute a1, MlirAttribute a2)
Definition IR.cpp:1317
MlirAsmState mlirAsmStateCreateForOperation(MlirOperation op, MlirOpPrintingFlags flags)
Definition IR.cpp:156
bool mlirOperationEqual(MlirOperation op, MlirOperation other)
Definition IR.cpp:650
void mlirOperationSetInherentAttributeByName(MlirOperation op, MlirStringRef name, MlirAttribute attr)
Definition IR.cpp:775
void mlirOpPrintingFlagsAssumeVerified(MlirOpPrintingFlags flags)
Definition IR.cpp:236
bool mlirValueEqual(MlirValue value1, MlirValue value2)
Definition IR.cpp:1129
void mlirBytecodeWriterConfigDestroy(MlirBytecodeWriterConfig config)
Definition IR.cpp:251
MlirBlock mlirBlockGetSuccessor(MlirBlock block, intptr_t pos)
Definition IR.cpp:1109
void mlirModuleDestroy(MlirModule module)
Definition IR.cpp:461
MlirModule mlirModuleCreateEmpty(MlirLocation location)
Definition IR.cpp:432
void mlirOpPrintingFlagsPrintGenericOpForm(MlirOpPrintingFlags flags)
Definition IR.cpp:224
MlirOperation mlirOperationGetParentOperation(MlirOperation op)
Definition IR.cpp:690
void mlirValueSetType(MlirValue value, MlirType type)
Definition IR.cpp:1173
intptr_t mlirOperationGetNumSuccessors(MlirOperation op)
Definition IR.cpp:753
MlirDialect mlirAttributeGetDialect(MlirAttribute attr)
Definition IR.cpp:1313
void mlirLocationPrint(MlirLocation location, MlirStringCallback callback, void *userData)
Definition IR.cpp:422
void mlirOperationSetAttributeByName(MlirOperation op, MlirStringRef name, MlirAttribute attr)
Definition IR.cpp:829
void mlirOperationSetOperand(MlirOperation op, intptr_t pos, MlirValue newValue)
Definition IR.cpp:734
MlirOperation mlirOpResultGetOwner(MlirValue value)
Definition IR.cpp:1160
MlirModule mlirModuleCreateParse(MlirContext context, MlirStringRef module)
Definition IR.cpp:436
size_t mlirOperationHashValue(MlirOperation op)
Definition IR.cpp:654
void mlirOperationStateAddResults(MlirOperationState *state, intptr_t n, MlirType const *results)
Definition IR.cpp:511
MlirOperation mlirOperationClone(MlirOperation op)
Definition IR.cpp:642
MlirBlock mlirBlockArgumentGetOwner(MlirValue value)
Definition IR.cpp:1141
void mlirBlockArgumentSetLocation(MlirValue value, MlirLocation loc)
Definition IR.cpp:1155
MlirValue mlirOperationGetOperand(MlirOperation op, intptr_t pos)
Definition IR.cpp:726
MlirModule mlirModuleFromOperation(MlirOperation op)
Definition IR.cpp:471
MlirOpOperand mlirOperationGetOpOperand(MlirOperation op, intptr_t pos)
Definition IR.cpp:730
MlirLocation mlirOperationGetLocation(MlirOperation op)
Definition IR.cpp:668
MlirAttribute mlirOperationGetAttributeByName(MlirOperation op, MlirStringRef name)
Definition IR.cpp:824
MlirTypeID mlirAttributeGetTypeID(MlirAttribute attr)
Definition IR.cpp:1309
intptr_t mlirOperationGetNumDiscardableAttributes(MlirOperation op)
Definition IR.cpp:782
void mlirOperationStateAddOwnedRegions(MlirOperationState *state, intptr_t n, MlirRegion const *regions)
Definition IR.cpp:520
void mlirOperationSetLocation(MlirOperation op, MlirLocation loc)
Definition IR.cpp:672
MlirType mlirAttributeGetType(MlirAttribute attribute)
Definition IR.cpp:1302
bool mlirOperationRemoveDiscardableAttributeByName(MlirOperation op, MlirStringRef name)
Definition IR.cpp:805
bool mlirOperationRemoveAttributeByName(MlirOperation op, MlirStringRef name)
Definition IR.cpp:834
bool mlirValueIsAOpResult(MlirValue value)
Definition IR.cpp:1137
MLIR_CAPI_EXPORTED bool mlirOperationHasInherentAttributeByName(MlirOperation op, MlirStringRef name)
Definition IR.cpp:762
MlirBlock mlirBlockGetPredecessor(MlirBlock block, intptr_t pos)
Definition IR.cpp:1118
MlirRegion mlirOperationGetRegion(MlirOperation op, intptr_t pos)
Definition IR.cpp:698
MlirOperation mlirOperationCreate(MlirOperationState *state)
Definition IR.cpp:596
void mlirBytecodeWriterConfigDesiredEmitVersion(MlirBytecodeWriterConfig flags, int64_t version)
Definition IR.cpp:255
MlirAttribute mlirAttributeParseGet(MlirContext context, MlirStringRef attr)
Definition IR.cpp:1294
void mlirOperationRemoveFromParent(MlirOperation op)
Definition IR.cpp:648
intptr_t mlirBlockGetNumSuccessors(MlirBlock block)
Definition IR.cpp:1105
MlirNamedAttribute mlirOperationGetAttribute(MlirOperation op, intptr_t pos)
Definition IR.cpp:819
void mlirOpPrintingFlagsDestroy(MlirOpPrintingFlags flags)
Definition IR.cpp:205
void mlirValueDump(MlirValue value)
Definition IR.cpp:1177
void mlirOperationSetOperands(MlirOperation op, intptr_t nOperands, MlirValue const *operands)
Definition IR.cpp:739
void mlirTypePrint(MlirType type, MlirStringCallback callback, void *userData)
Definition IR.cpp:1283
MlirBlock mlirModuleGetBody(MlirModule module)
Definition IR.cpp:457
MlirOperation mlirOperationCreateParse(MlirContext context, MlirStringRef sourceStr, MlirStringRef sourceName)
Definition IR.cpp:633
void mlirAsmStateDestroy(MlirAsmState state)
Destroys printing flags created with mlirAsmStateCreate.
Definition IR.cpp:195
MlirContext mlirOperationGetContext(MlirOperation op)
Definition IR.cpp:658
intptr_t mlirOpResultGetResultNumber(MlirValue value)
Definition IR.cpp:1164
MlirNamedAttribute mlirOperationGetDiscardableAttribute(MlirOperation op, intptr_t pos)
Definition IR.cpp:787
void mlirOperationStateEnableResultTypeInference(MlirOperationState *state)
Definition IR.cpp:533
void mlirOperationStateAddSuccessors(MlirOperationState *state, intptr_t n, MlirBlock const *successors)
Definition IR.cpp:524
MlirBytecodeWriterConfig mlirBytecodeWriterConfigCreate()
Definition IR.cpp:247
void mlirOpPrintingFlagsPrintNameLocAsPrefix(MlirOpPrintingFlags flags)
Definition IR.cpp:228
void mlirOpPrintingFlagsSkipRegions(MlirOpPrintingFlags flags)
Definition IR.cpp:240
void mlirOperationStateAddOperands(MlirOperationState *state, intptr_t n, MlirValue const *operands)
Definition IR.cpp:516
MlirOperationState mlirOperationStateGet(MlirStringRef name, MlirLocation loc)
Definition IR.cpp:487
intptr_t mlirOperationGetNumOperands(MlirOperation op)
Definition IR.cpp:722
void mlirTypeDump(MlirType type)
Definition IR.cpp:1288
intptr_t mlirOperationGetNumAttributes(MlirOperation op)
Definition IR.cpp:815
MLIR_CAPI_EXPORTED MlirAttribute mlirLocationGetAttribute(MlirLocation location)
Returns the underlying location attribute of this location.
Definition IR.cpp:264
MlirWalkResult(* MlirOperationWalkCallback)(MlirOperation, void *userData)
Operation walker type.
Definition IR.h:866
MLIR_CAPI_EXPORTED MlirLocation mlirValueGetLocation(MlirValue v)
Gets the location of the value.
Definition IR.cpp:1220
MLIR_CAPI_EXPORTED unsigned mlirContextGetNumThreads(MlirContext context)
Gets the number of threads of the thread pool of the context when multithreading is enabled.
Definition IR.cpp:116
MLIR_CAPI_EXPORTED void mlirOperationWriteBytecode(MlirOperation op, MlirStringCallback callback, void *userData)
Same as mlirOperationPrint but writing the bytecode format.
Definition IR.cpp:859
MLIR_CAPI_EXPORTED MlirLocation mlirLocationFileLineColGet(MlirContext context, MlirStringRef filename, unsigned line, unsigned col)
Creates an File/Line/Column location owned by the given context.
Definition IR.cpp:272
MLIR_CAPI_EXPORTED void mlirSymbolTableWalkSymbolTables(MlirOperation from, bool allSymUsesVisible, void(*callback)(MlirOperation, bool, void *userData), void *userData)
Walks all symbol table operations nested within, and including, op.
Definition IR.cpp:1402
MLIR_CAPI_EXPORTED MlirStringRef mlirDialectGetNamespace(MlirDialect dialect)
Returns the namespace of the given dialect.
Definition IR.cpp:136
MLIR_CAPI_EXPORTED int mlirLocationFileLineColRangeGetEndColumn(MlirLocation location)
Getter for end_column of FileLineColRange.
Definition IR.cpp:310
MLIR_CAPI_EXPORTED MlirAttribute mlirSymbolTableInsert(MlirSymbolTable symbolTable, MlirOperation operation)
Inserts the given operation into the given symbol table.
Definition IR.cpp:1381
MLIR_CAPI_EXPORTED MlirDialect mlirDialectHandleLoadDialect(MlirDialectHandle, MlirContext)
Loads the dialect associated with the provided dialect handle.
MlirWalkOrder
Traversal order for operation walk.
Definition IR.h:859
@ MlirWalkPreOrder
Definition IR.h:860
@ MlirWalkPostOrder
Definition IR.h:861
MLIR_CAPI_EXPORTED bool mlirLocationIsAUnknown(MlirLocation location)
Checks whether the given location is an Unknown.
Definition IR.cpp:410
MLIR_CAPI_EXPORTED MlirTypeID mlirLocationUnknownGetTypeID(void)
TypeID Getter for Unknown.
Definition IR.cpp:406
MLIR_CAPI_EXPORTED MlirNamedAttribute mlirNamedAttributeGet(MlirIdentifier name, MlirAttribute attr)
Associates an attribute with the name. Takes ownership of neither.
Definition IR.cpp:1329
MLIR_CAPI_EXPORTED MlirLocation mlirLocationNameGetChildLoc(MlirLocation location)
Getter for childLoc of Name.
Definition IR.cpp:391
MLIR_CAPI_EXPORTED void mlirSymbolTableErase(MlirSymbolTable symbolTable, MlirOperation operation)
Removes the given operation from the symbol table and erases it.
Definition IR.cpp:1386
MLIR_CAPI_EXPORTED void mlirContextAppendDialectRegistry(MlirContext ctx, MlirDialectRegistry registry)
Append the contents of the given dialect registry to the registry associated with the context.
Definition IR.cpp:83
MLIR_CAPI_EXPORTED MlirStringRef mlirIdentifierStr(MlirIdentifier ident)
Gets the string value of the identifier.
Definition IR.cpp:1350
MLIR_CAPI_EXPORTED MlirType mlirTypeParseGet(MlirContext context, MlirStringRef type)
Parses a type. The type is owned by the context.
Definition IR.cpp:1263
MLIR_CAPI_EXPORTED void mlirDialectRegistryDestroy(MlirDialectRegistry registry)
Takes a dialect registry owned by the caller and destroys it.
Definition IR.cpp:148
MLIR_CAPI_EXPORTED intptr_t mlirContextGetNumLoadedDialects(MlirContext context)
Returns the number of dialects loaded by the context.
Definition IR.cpp:90
MLIR_CAPI_EXPORTED MlirOpOperand mlirOpOperandGetNextUse(MlirOpOperand opOperand)
Returns an op operand representing the next use of the value, or a null op operand if there is no nex...
Definition IR.cpp:1246
MLIR_CAPI_EXPORTED void mlirContextSetAllowUnregisteredDialects(MlirContext context, bool allow)
Sets whether unregistered dialects are allowed in this context.
Definition IR.cpp:72
MLIR_CAPI_EXPORTED void mlirRegionInsertOwnedBlockBefore(MlirRegion region, MlirBlock reference, MlirBlock block)
Takes a block owned by the caller and inserts it before the (non-owned) reference block in the given ...
Definition IR.cpp:969
MLIR_CAPI_EXPORTED bool mlirLocationIsAFileLineColRange(MlirLocation location)
Checks whether the given location is an FileLineColRange.
Definition IR.cpp:320
MLIR_CAPI_EXPORTED unsigned mlirLocationFusedGetNumLocations(MlirLocation location)
Getter for number of locations fused together.
Definition IR.cpp:354
MLIR_CAPI_EXPORTED void mlirValueReplaceAllUsesOfWith(MlirValue of, MlirValue with)
Replace all uses of 'of' value with the 'with' value, updating anything in the IR that uses 'of' to u...
Definition IR.cpp:1202
MLIR_CAPI_EXPORTED void mlirValuePrintAsOperand(MlirValue value, MlirAsmState state, MlirStringCallback callback, void *userData)
Prints a value as an operand (i.e., the ValueID).
Definition IR.cpp:1185
MLIR_CAPI_EXPORTED MlirLocation mlirLocationUnknownGet(MlirContext context)
Creates a location with unknown position owned by the given context.
Definition IR.cpp:402
MLIR_CAPI_EXPORTED MlirOperation mlirOpOperandGetOwner(MlirOpOperand opOperand)
Returns the owner operation of an op operand.
Definition IR.cpp:1234
MLIR_CAPI_EXPORTED bool mlirIdentifierEqual(MlirIdentifier ident, MlirIdentifier other)
Checks whether two identifiers are the same.
Definition IR.cpp:1346
MLIR_CAPI_EXPORTED MlirIdentifier mlirLocationFileLineColRangeGetFilename(MlirLocation location)
Getter for filename of FileLineColRange.
Definition IR.cpp:288
MLIR_CAPI_EXPORTED void mlirLocationFusedGetLocations(MlirLocation location, MlirLocation *locationsCPtr)
Getter for locations of Fused.
Definition IR.cpp:360
MLIR_CAPI_EXPORTED intptr_t mlirContextGetNumRegisteredDialects(MlirContext context)
Returns the number of dialects registered with the given context.
Definition IR.cpp:79
MLIR_CAPI_EXPORTED void mlirAttributePrint(MlirAttribute attr, MlirStringCallback callback, void *userData)
Prints a location by sending chunks of the string representation and forwarding userData to callback`...
Definition IR.cpp:1321
MLIR_CAPI_EXPORTED MlirRegion mlirBlockGetParentRegion(MlirBlock block)
Returns the region that contains this block.
Definition IR.cpp:1008
MLIR_CAPI_EXPORTED void mlirOperationMoveBefore(MlirOperation op, MlirOperation other)
Moves the given operation immediately before the other operation in its parent block.
Definition IR.cpp:883
MLIR_CAPI_EXPORTED void mlirValueReplaceAllUsesExcept(MlirValue of, MlirValue with, intptr_t numExceptions, MlirOperation *exceptions)
Replace all uses of 'of' value with 'with' value, updating anything in the IR that uses 'of' to use '...
Definition IR.cpp:1206
MLIR_CAPI_EXPORTED void mlirOperationPrintWithState(MlirOperation op, MlirAsmState state, MlirStringCallback callback, void *userData)
Same as mlirOperationPrint but accepts AsmState controlling the printing behavior as well as caching ...
Definition IR.cpp:850
MLIR_CAPI_EXPORTED void mlirBlockDestroy(MlirBlock block)
Takes a block owned by the caller and destroys it.
Definition IR.cpp:1070
MlirWalkResult
Operation walk result.
Definition IR.h:852
@ MlirWalkResultInterrupt
Definition IR.h:854
@ MlirWalkResultSkip
Definition IR.h:855
@ MlirWalkResultAdvance
Definition IR.h:853
MLIR_CAPI_EXPORTED void mlirRegionInsertOwnedBlock(MlirRegion region, intptr_t pos, MlirBlock block)
Takes a block owned by the caller and inserts it at pos to the given region.
Definition IR.cpp:949
static bool mlirTypeIsNull(MlirType type)
Checks whether a type is null.
Definition IR.h:1171
MLIR_CAPI_EXPORTED bool mlirRegionEqual(MlirRegion region, MlirRegion other)
Checks whether two region handles point to the same region.
Definition IR.cpp:934
MLIR_CAPI_EXPORTED bool mlirContextIsRegisteredOperation(MlirContext context, MlirStringRef name)
Returns whether the given fully-qualified operation (i.e.
Definition IR.cpp:99
MLIR_CAPI_EXPORTED intptr_t mlirBlockGetNumArguments(MlirBlock block)
Returns the number of arguments of the block.
Definition IR.cpp:1077
MLIR_CAPI_EXPORTED int mlirLocationFileLineColRangeGetStartLine(MlirLocation location)
Getter for start_line of FileLineColRange.
Definition IR.cpp:292
MLIR_CAPI_EXPORTED MlirLocation mlirLocationFusedGet(MlirContext ctx, intptr_t nLocations, MlirLocation const *locations, MlirAttribute metadata)
Creates a fused location with an array of locations and metadata.
Definition IR.cpp:346
MLIR_CAPI_EXPORTED void mlirBlockInsertOwnedOperationBefore(MlirBlock block, MlirOperation reference, MlirOperation operation)
Takes an operation owned by the caller and inserts it before the (non-owned) reference operation in t...
Definition IR.cpp:1058
static bool mlirContextIsNull(MlirContext context)
Checks whether a context is null.
Definition IR.h:104
MLIR_CAPI_EXPORTED MlirDialect mlirContextGetOrLoadDialect(MlirContext context, MlirStringRef name)
Gets the dialect instance owned by the given context using the dialect namespace to identify it,...
Definition IR.cpp:94
MLIR_CAPI_EXPORTED void mlirDialectHandleRegisterDialect(MlirDialectHandle, MlirContext)
Registers the dialect associated with the provided dialect handle.
MLIR_CAPI_EXPORTED bool mlirLocationIsACallSite(MlirLocation location)
Checks whether the given location is an CallSite.
Definition IR.cpp:342
#define DEFINE_C_API_STRUCT(name, storage)
Opaque type declarations.
Definition IR.h:45
struct MlirNamedAttribute MlirNamedAttribute
Definition IR.h:80
MLIR_CAPI_EXPORTED void mlirRegionInsertOwnedBlockAfter(MlirRegion region, MlirBlock reference, MlirBlock block)
Takes a block owned by the caller and inserts it after the (non-owned) reference block in the given r...
Definition IR.cpp:955
MLIR_CAPI_EXPORTED MlirBlock mlirBlockCreate(intptr_t nArgs, MlirType const *args, MlirLocation const *locs)
Creates a new empty block with the given argument types and transfers ownership to the caller.
Definition IR.cpp:992
static bool mlirBlockIsNull(MlirBlock block)
Checks whether a block is null.
Definition IR.h:952
MLIR_CAPI_EXPORTED void mlirBlockAppendOwnedOperation(MlirBlock block, MlirOperation operation)
Takes an operation owned by the caller and appends it to the block.
Definition IR.cpp:1033
MLIR_CAPI_EXPORTED MlirValue mlirBlockGetArgument(MlirBlock block, intptr_t pos)
Returns pos-th argument of the block.
Definition IR.cpp:1095
MLIR_CAPI_EXPORTED MlirOperation mlirSymbolTableLookup(MlirSymbolTable symbolTable, MlirStringRef name)
Looks up a symbol with the given name in the given symbol table and returns the operation that corres...
Definition IR.cpp:1376
MLIR_CAPI_EXPORTED MlirContext mlirTypeGetContext(MlirType type)
Gets the context that a type was created with.
Definition IR.cpp:1267
MLIR_CAPI_EXPORTED MlirLocation mlirLocationFileLineColRangeGet(MlirContext context, MlirStringRef filename, unsigned start_line, unsigned start_col, unsigned end_line, unsigned end_col)
Creates an File/Line/Column range location owned by the given context.
Definition IR.cpp:280
MLIR_CAPI_EXPORTED bool mlirOpOperandIsNull(MlirOpOperand opOperand)
Returns whether the op operand is null.
Definition IR.cpp:1232
MLIR_CAPI_EXPORTED MlirSymbolTable mlirSymbolTableCreate(MlirOperation operation)
Creates a symbol table for the given operation.
Definition IR.cpp:1366
MLIR_CAPI_EXPORTED bool mlirLocationEqual(MlirLocation l1, MlirLocation l2)
Checks if two locations are equal.
Definition IR.cpp:414
MLIR_CAPI_EXPORTED int mlirLocationFileLineColRangeGetStartColumn(MlirLocation location)
Getter for start_column of FileLineColRange.
Definition IR.cpp:298
MLIR_CAPI_EXPORTED bool mlirLocationIsAFused(MlirLocation location)
Checks whether the given location is an Fused.
Definition IR.cpp:374
static bool mlirLocationIsNull(MlirLocation location)
Checks if the location is null.
Definition IR.h:376
MLIR_CAPI_EXPORTED MlirValue mlirBlockAddArgument(MlirBlock block, MlirType type, MlirLocation loc)
Appends an argument of the specified type to the block.
Definition IR.cpp:1081
MLIR_CAPI_EXPORTED void mlirOperationPrintWithFlags(MlirOperation op, MlirOpPrintingFlags flags, MlirStringCallback callback, void *userData)
Same as mlirOperationPrint but accepts flags controlling the printing behavior.
Definition IR.cpp:844
MLIR_CAPI_EXPORTED MlirOpOperand mlirValueGetFirstUse(MlirValue value)
Returns an op operand representing the first use of the value, or a null op operand if there are no u...
Definition IR.cpp:1192
MLIR_CAPI_EXPORTED void mlirContextSetThreadPool(MlirContext context, MlirLlvmThreadPool threadPool)
Sets the thread pool of the context explicitly, enabling multithreading in the process.
Definition IR.cpp:111
MLIR_CAPI_EXPORTED bool mlirOperationVerify(MlirOperation op)
Verify the operation and return true if it passes, false if it fails.
Definition IR.cpp:875
MLIR_CAPI_EXPORTED bool mlirTypeEqual(MlirType t1, MlirType t2)
Checks if two types are equal.
Definition IR.cpp:1279
MLIR_CAPI_EXPORTED void mlirSymbolTableDestroy(MlirSymbolTable symbolTable)
Destroys the symbol table created with mlirSymbolTableCreate.
Definition IR.cpp:1372
MLIR_CAPI_EXPORTED unsigned mlirOpOperandGetOperandNumber(MlirOpOperand opOperand)
Returns the operand number of an op operand.
Definition IR.cpp:1242
MLIR_CAPI_EXPORTED MlirLocation mlirLocationCallSiteGetCaller(MlirLocation location)
Getter for caller of CallSite.
Definition IR.cpp:333
MLIR_CAPI_EXPORTED MlirContext mlirDialectGetContext(MlirDialect dialect)
Returns the context that owns the dialect.
Definition IR.cpp:128
MLIR_CAPI_EXPORTED bool mlirBlockEqual(MlirBlock block, MlirBlock other)
Checks whether two blocks handles point to the same block.
Definition IR.cpp:1000
MLIR_CAPI_EXPORTED MlirOperation mlirBlockGetTerminator(MlirBlock block)
Returns the terminator operation in the block or null if no terminator.
Definition IR.cpp:1023
MLIR_CAPI_EXPORTED void mlirRegionDestroy(MlirRegion region)
Takes a region owned by the caller and destroys it.
Definition IR.cpp:980
MLIR_CAPI_EXPORTED MlirContext mlirIdentifierGetContext(MlirIdentifier)
Returns the context associated with this identifier.
Definition IR.cpp:1342
MLIR_CAPI_EXPORTED MlirStringRef mlirDialectHandleGetNamespace(MlirDialectHandle)
Returns the namespace associated with the provided dialect handle.
MLIR_CAPI_EXPORTED MlirIdentifier mlirLocationNameGetName(MlirLocation location)
Getter for name of Name.
Definition IR.cpp:387
MLIR_CAPI_EXPORTED bool mlirOperationIsBeforeInBlock(MlirOperation op, MlirOperation other)
Given an operation 'other' that is within the same parent block, return whether the current operation...
Definition IR.cpp:887
MLIR_CAPI_EXPORTED MlirLocation mlirLocationFromAttribute(MlirAttribute attribute)
Creates a location from a location attribute.
Definition IR.cpp:268
MLIR_CAPI_EXPORTED MlirTypeID mlirTypeGetTypeID(MlirType type)
Gets the type ID of the type.
Definition IR.cpp:1271
MLIR_CAPI_EXPORTED MlirStringRef mlirSymbolTableGetVisibilityAttributeName(void)
Returns the name of the attribute used to store symbol visibility.
Definition IR.cpp:1362
static bool mlirDialectIsNull(MlirDialect dialect)
Checks if the dialect is null.
Definition IR.h:182
MLIR_CAPI_EXPORTED MlirAttribute mlirLocationFusedGetMetadata(MlirLocation location)
Getter for metadata of Fused.
Definition IR.cpp:368
MLIR_CAPI_EXPORTED MlirBlock mlirBlockGetNextInRegion(MlirBlock block)
Returns the block immediately following the given block in its parent region.
Definition IR.cpp:1012
MLIR_CAPI_EXPORTED MlirLocation mlirLocationCallSiteGet(MlirLocation callee, MlirLocation caller)
Creates a call site location with a callee and a caller.
Definition IR.cpp:324
MLIR_CAPI_EXPORTED bool mlirLocationIsAName(MlirLocation location)
Checks whether the given location is an Name.
Definition IR.cpp:398
static bool mlirDialectRegistryIsNull(MlirDialectRegistry registry)
Checks if the dialect registry is null.
Definition IR.h:244
MLIR_CAPI_EXPORTED void mlirOperationWalk(MlirOperation op, MlirOperationWalkCallback callback, void *userData, MlirWalkOrder walkOrder)
Walks operation op in walkOrder and calls callback on that operation.
Definition IR.cpp:905
MLIR_CAPI_EXPORTED MlirContext mlirContextCreateWithThreading(bool threadingEnabled)
Creates an MLIR context with an explicit setting of the multithreading setting and transfers its owne...
Definition IR.cpp:54
MLIR_CAPI_EXPORTED MlirOperation mlirBlockGetParentOperation(MlirBlock)
Returns the closest surrounding operation that contains this block.
Definition IR.cpp:1004
MLIR_CAPI_EXPORTED void mlirRegionTakeBody(MlirRegion target, MlirRegion source)
Moves the entire content of the source region to the target region.
Definition IR.cpp:984
MLIR_CAPI_EXPORTED MlirContext mlirLocationGetContext(MlirLocation location)
Gets the context that a location was created with.
Definition IR.cpp:418
MLIR_CAPI_EXPORTED void mlirBlockEraseArgument(MlirBlock block, unsigned index)
Erase the argument at 'index' and remove it from the argument list.
Definition IR.cpp:1086
MLIR_CAPI_EXPORTED void mlirAttributeDump(MlirAttribute attr)
Prints the attribute to the standard error stream.
Definition IR.cpp:1327
MLIR_CAPI_EXPORTED MlirLogicalResult mlirSymbolTableReplaceAllSymbolUses(MlirStringRef oldSymbol, MlirStringRef newSymbol, MlirOperation from)
Attempt to replace all uses that are nested within the given operation of the given symbol 'oldSymbol...
Definition IR.cpp:1391
MLIR_CAPI_EXPORTED MlirTypeID mlirLocationFileLineColRangeGetTypeID(void)
TypeID Getter for FileLineColRange.
Definition IR.cpp:316
MLIR_CAPI_EXPORTED void mlirRegionAppendOwnedBlock(MlirRegion region, MlirBlock block)
Takes a block owned by the caller and appends it to the given region.
Definition IR.cpp:945
MLIR_CAPI_EXPORTED MlirOperation mlirBlockGetFirstOperation(MlirBlock block)
Returns the first operation in the block.
Definition IR.cpp:1016
MLIR_CAPI_EXPORTED void mlirOperationPrint(MlirOperation op, MlirStringCallback callback, void *userData)
Prints a location by sending chunks of the string representation and forwarding userData to callback`...
Definition IR.cpp:838
static bool mlirRegionIsNull(MlirRegion region)
Checks whether a region is null.
Definition IR.h:891
MLIR_CAPI_EXPORTED MlirValue mlirOpOperandGetValue(MlirOpOperand opOperand)
Returns the value of an op operand.
Definition IR.cpp:1238
MLIR_CAPI_EXPORTED MlirRegion mlirRegionGetNextInOperation(MlirRegion region)
Returns the region immediately following the given region in its parent operation.
Definition IR.cpp:709
MLIR_CAPI_EXPORTED MlirValue mlirBlockInsertArgument(MlirBlock block, intptr_t pos, MlirType type, MlirLocation loc)
Inserts an argument of the specified type at a specified index to the block.
Definition IR.cpp:1090
MLIR_CAPI_EXPORTED MlirDialect mlirTypeGetDialect(MlirType type)
Gets the dialect a type belongs to.
Definition IR.cpp:1275
MLIR_CAPI_EXPORTED MlirIdentifier mlirIdentifierGet(MlirContext context, MlirStringRef str)
Gets an identifier with the given string value.
Definition IR.cpp:1338
MLIR_CAPI_EXPORTED void mlirContextLoadAllAvailableDialects(MlirContext context)
Eagerly loads all available dialects registered with a context, making them available for use for IR ...
Definition IR.cpp:107
MLIR_CAPI_EXPORTED MlirTypeID mlirLocationCallSiteGetTypeID(void)
TypeID Getter for CallSite.
Definition IR.cpp:338
MLIR_CAPI_EXPORTED MlirLlvmThreadPool mlirContextGetThreadPool(MlirContext context)
Gets the thread pool of the context when enabled multithreading, otherwise an assertion is raised.
Definition IR.cpp:120
MLIR_CAPI_EXPORTED int mlirLocationFileLineColRangeGetEndLine(MlirLocation location)
Getter for end_line of FileLineColRange.
Definition IR.cpp:304
MLIR_CAPI_EXPORTED MlirDialectRegistry mlirDialectRegistryCreate(void)
Creates a dialect registry and transfers its ownership to the caller.
Definition IR.cpp:144
MLIR_CAPI_EXPORTED MlirLocation mlirLocationNameGet(MlirContext context, MlirStringRef name, MlirLocation childLoc)
Creates a name location owned by the given context.
Definition IR.cpp:378
MLIR_CAPI_EXPORTED MlirContext mlirContextCreateWithRegistry(MlirDialectRegistry registry, bool threadingEnabled)
Creates an MLIR context, setting the multithreading setting explicitly and pre-loading the dialects f...
Definition IR.cpp:59
MLIR_CAPI_EXPORTED void mlirContextEnableMultithreading(MlirContext context, bool enable)
Set threading mode (must be set to false to mlir-print-ir-after-all).
Definition IR.cpp:103
MLIR_CAPI_EXPORTED MlirRegion mlirOperationGetFirstRegion(MlirOperation op)
Returns first region attached to the operation.
Definition IR.cpp:702
MLIR_CAPI_EXPORTED MlirLocation mlirLocationCallSiteGetCallee(MlirLocation location)
Getter for callee of CallSite.
Definition IR.cpp:328
MLIR_CAPI_EXPORTED MlirTypeID mlirLocationNameGetTypeID(void)
TypeID Getter for Name.
Definition IR.cpp:396
MLIR_CAPI_EXPORTED MlirContext mlirValueGetContext(MlirValue v)
Gets the context that a value was created with.
Definition IR.cpp:1224
MLIR_CAPI_EXPORTED MlirStringRef mlirSymbolTableGetSymbolAttributeName(void)
Returns the name of the attribute used to store symbol names compatible with symbol tables.
Definition IR.cpp:1358
MLIR_CAPI_EXPORTED MlirRegion mlirRegionCreate(void)
Creates a new empty region and transfers ownership to the caller.
Definition IR.cpp:932
MLIR_CAPI_EXPORTED MlirTypeID mlirLocationFusedGetTypeID(void)
TypeID Getter for Fused.
Definition IR.cpp:372
MLIR_CAPI_EXPORTED void mlirBlockDetach(MlirBlock block)
Detach a block from the owning region and assume ownership.
Definition IR.cpp:1072
MLIR_CAPI_EXPORTED void mlirDialectHandleInsertDialect(MlirDialectHandle, MlirDialectRegistry)
Inserts the dialect associated with the provided dialect handle into the provided dialect registry.
MLIR_CAPI_EXPORTED void mlirOperationDump(MlirOperation op)
Prints an operation to stderr.
Definition IR.cpp:873
MLIR_CAPI_EXPORTED bool mlirContextEqual(MlirContext ctx1, MlirContext ctx2)
Checks if two contexts are equal.
Definition IR.cpp:66
MLIR_CAPI_EXPORTED bool mlirDialectEqual(MlirDialect dialect1, MlirDialect dialect2)
Checks if two dialects that belong to the same context are equal.
Definition IR.cpp:132
MLIR_CAPI_EXPORTED void mlirBlockInsertOwnedOperation(MlirBlock block, intptr_t pos, MlirOperation operation)
Takes an operation owned by the caller and inserts it as pos to the block.
Definition IR.cpp:1037
MLIR_CAPI_EXPORTED MlirContext mlirContextCreate(void)
Creates an MLIR context and transfers its ownership to the caller.
Definition IR.cpp:44
static bool mlirSymbolTableIsNull(MlirSymbolTable symbolTable)
Returns true if the symbol table is null.
Definition IR.h:1261
MLIR_CAPI_EXPORTED bool mlirContextGetAllowUnregisteredDialects(MlirContext context)
Returns whether the context allows unregistered dialects.
Definition IR.cpp:76
MLIR_CAPI_EXPORTED void mlirOperationReplaceUsesOfWith(MlirOperation op, MlirValue of, MlirValue with)
Replace uses of 'of' value with the 'with' value inside the 'op' operation.
Definition IR.cpp:923
MLIR_CAPI_EXPORTED void mlirOperationMoveAfter(MlirOperation op, MlirOperation other)
Moves the given operation immediately after the other operation in its parent block.
Definition IR.cpp:879
MLIR_CAPI_EXPORTED void mlirValuePrint(MlirValue value, MlirStringCallback callback, void *userData)
Prints a block by sending chunks of the string representation and forwarding userData to callback`.
Definition IR.cpp:1179
MLIR_CAPI_EXPORTED void mlirBlockInsertOwnedOperationAfter(MlirBlock block, MlirOperation reference, MlirOperation operation)
Takes an operation owned by the caller and inserts it after the (non-owned) reference operation in th...
Definition IR.cpp:1043
MLIR_CAPI_EXPORTED MlirLogicalResult mlirOperationWriteBytecodeWithConfig(MlirOperation op, MlirBytecodeWriterConfig config, MlirStringCallback callback, void *userData)
Same as mlirOperationWriteBytecode but with writer config and returns failure only if desired bytecod...
Definition IR.cpp:866
MLIR_CAPI_EXPORTED void mlirContextDestroy(MlirContext context)
Takes an MLIR context owned by the caller and destroys it.
Definition IR.cpp:70
MLIR_CAPI_EXPORTED MlirBlock mlirRegionGetFirstBlock(MlirRegion region)
Gets the first block in the region.
Definition IR.cpp:938
#define MLIR_CAPI_EXPORTED
Definition Support.h:46
struct MlirStringRef MlirStringRef
Definition Support.h:82
void(* MlirStringCallback)(MlirStringRef, void *)
A callback for returning string references.
Definition Support.h:110
const void * ptr
Definition IR.h:211
A logical result value, essentially a boolean with named states.
Definition Support.h:121
Named MLIR attribute.
Definition IR.h:76
MlirAttribute attribute
Definition IR.h:78
MlirIdentifier name
Definition IR.h:77
A pointer to a sized fragment of a string, not necessarily null-terminated.
Definition Support.h:78