CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
173 lines
7.6 KiB
C
173 lines
7.6 KiB
C
//===-- mlir-c/Interfaces.h - C API to Core MLIR IR interfaces ----*- C -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM
|
|
// Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This header declares the C interface to MLIR interface classes. It is
|
|
// intended to contain interfaces defined in lib/Interfaces.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef MLIR_C_INTERFACES_H
|
|
#define MLIR_C_INTERFACES_H
|
|
|
|
#include "mlir-c/IR.h"
|
|
#include "mlir-c/Support.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define DEFINE_C_API_STRUCT(name, storage) \
|
|
struct name { \
|
|
storage *ptr; \
|
|
}; \
|
|
typedef struct name name
|
|
|
|
DEFINE_C_API_STRUCT(MlirMemoryEffectInstancesList, void);
|
|
|
|
#undef DEFINE_C_API_STRUCT
|
|
|
|
/// Returns `true` if the given operation implements an interface identified by
|
|
/// its TypeID.
|
|
MLIR_CAPI_EXPORTED bool
|
|
mlirOperationImplementsInterface(MlirOperation operation,
|
|
MlirTypeID interfaceTypeID);
|
|
|
|
/// Returns `true` if the operation identified by its canonical string name
|
|
/// implements the interface identified by its TypeID in the given context.
|
|
/// Note that interfaces may be attached to operations in some contexts and not
|
|
/// others.
|
|
MLIR_CAPI_EXPORTED bool
|
|
mlirOperationImplementsInterfaceStatic(MlirStringRef operationName,
|
|
MlirContext context,
|
|
MlirTypeID interfaceTypeID);
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// InferTypeOpInterface.
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
/// Returns the interface TypeID of the InferTypeOpInterface.
|
|
MLIR_CAPI_EXPORTED MlirTypeID mlirInferTypeOpInterfaceTypeID(void);
|
|
|
|
/// These callbacks are used to return multiple types from functions while
|
|
/// transferring ownership to the caller. The first argument is the number of
|
|
/// consecutive elements pointed to by the second argument. The third argument
|
|
/// is an opaque pointer forwarded to the callback by the caller.
|
|
typedef void (*MlirTypesCallback)(intptr_t, MlirType *, void *);
|
|
|
|
/// Infers the return types of the operation identified by its canonical given
|
|
/// the arguments that will be supplied to its generic builder. Calls `callback`
|
|
/// with the types of inferred arguments, potentially several times, on success.
|
|
/// Returns failure otherwise.
|
|
MLIR_CAPI_EXPORTED MlirLogicalResult mlirInferTypeOpInterfaceInferReturnTypes(
|
|
MlirStringRef opName, MlirContext context, MlirLocation location,
|
|
intptr_t nOperands, MlirValue *operands, MlirAttribute attributes,
|
|
void *properties, intptr_t nRegions, MlirRegion *regions,
|
|
MlirTypesCallback callback, void *userData);
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// InferShapedTypeOpInterface.
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
/// Returns the interface TypeID of the InferShapedTypeOpInterface.
|
|
MLIR_CAPI_EXPORTED MlirTypeID mlirInferShapedTypeOpInterfaceTypeID(void);
|
|
|
|
/// These callbacks are used to return multiple shaped type components from
|
|
/// functions while transferring ownership to the caller. The first argument is
|
|
/// the has rank boolean followed by the the rank and a pointer to the shape
|
|
/// (if applicable). The next argument is the element type, then the attribute.
|
|
/// The last argument is an opaque pointer forwarded to the callback by the
|
|
/// caller. This callback will be called potentially multiple times for each
|
|
/// shaped type components.
|
|
typedef void (*MlirShapedTypeComponentsCallback)(bool, intptr_t,
|
|
const int64_t *, MlirType,
|
|
MlirAttribute, void *);
|
|
|
|
/// Infers the return shaped type components of the operation. Calls `callback`
|
|
/// with the types of inferred arguments on success. Returns failure otherwise.
|
|
MLIR_CAPI_EXPORTED MlirLogicalResult
|
|
mlirInferShapedTypeOpInterfaceInferReturnTypes(
|
|
MlirStringRef opName, MlirContext context, MlirLocation location,
|
|
intptr_t nOperands, MlirValue *operands, MlirAttribute attributes,
|
|
void *properties, intptr_t nRegions, MlirRegion *regions,
|
|
MlirShapedTypeComponentsCallback callback, void *userData);
|
|
|
|
//===---------------------------------------------------------------------===//
|
|
// ConditionallySpeculatable
|
|
//===---------------------------------------------------------------------===//
|
|
|
|
/// Enum representing the speculatability of an operation.
|
|
typedef enum {
|
|
/// The operation is not speculatable.
|
|
MlirSpeculatabilityNotSpeculatable,
|
|
/// The operation is speculatable.
|
|
MlirSpeculatabilitySpeculatable,
|
|
/// The operation is speculatable if all nested operations are speculatable.
|
|
MlirSpeculatabilityRecursivelySpeculatable
|
|
} MlirSpeculatability;
|
|
|
|
/// Returns the interface TypeID of the ConditionallySpeculatable interface.
|
|
MLIR_CAPI_EXPORTED MlirTypeID
|
|
mlirConditionallySpeculatableOpInterfaceTypeID(void);
|
|
|
|
/// Callbacks for implementing ConditionallySpeculatable from external code.
|
|
typedef struct {
|
|
/// Optional constructor for user data. Set to nullptr to disable it.
|
|
void (*construct)(void *userData);
|
|
/// Optional destructor for user data. Set to nullptr to disable it.
|
|
void (*destruct)(void *userData);
|
|
/// Returns the speculatability of the given operation.
|
|
MlirSpeculatability (*getSpeculatability)(MlirOperation op, void *userData);
|
|
void *userData;
|
|
} MlirConditionallySpeculatableOpInterfaceCallbacks;
|
|
|
|
/// Attach a new FallbackModel for the ConditionallySpeculatable interface to
|
|
/// the named operation. The FallbackModel will call the provided callbacks.
|
|
MLIR_CAPI_EXPORTED void
|
|
mlirConditionallySpeculatableOpInterfaceAttachFallbackModel(
|
|
MlirContext ctx, MlirStringRef opName,
|
|
MlirConditionallySpeculatableOpInterfaceCallbacks callbacks);
|
|
|
|
/// Returns the speculatability of the given operation.
|
|
///
|
|
/// The operation must implement the ConditionallySpeculatable interface.
|
|
MLIR_CAPI_EXPORTED MlirSpeculatability
|
|
mlirConditionallySpeculatableOpInterfaceGetSpeculatability(
|
|
MlirOperation operation);
|
|
|
|
//===---------------------------------------------------------------------===//
|
|
// MemoryEffectsOpInterface
|
|
//===---------------------------------------------------------------------===//
|
|
|
|
/// Returns the interface TypeID of the MemoryEffectsOpInterface.
|
|
MLIR_CAPI_EXPORTED MlirTypeID mlirMemoryEffectsOpInterfaceTypeID(void);
|
|
|
|
/// Callbacks for implementing MemoryEffectsOpInterface from external code.
|
|
typedef struct {
|
|
/// Optional constructor for user data. Set to nullptr to disable it.
|
|
void (*construct)(void *userData);
|
|
/// Optional destructor for user data. Set to nullptr to disable it.
|
|
void (*destruct)(void *userData);
|
|
/// Get memory effects callback.
|
|
void (*getEffects)(MlirOperation op, MlirMemoryEffectInstancesList effects,
|
|
void *userData);
|
|
void *userData;
|
|
} MlirMemoryEffectsOpInterfaceCallbacks;
|
|
|
|
/// Attach a new FallbackModel for the MemoryEffectsOpInterface to the named
|
|
/// operation. The FallbackModel will call the provided callbacks.
|
|
MLIR_CAPI_EXPORTED void mlirMemoryEffectsOpInterfaceAttachFallbackModel(
|
|
MlirContext ctx, MlirStringRef opName,
|
|
MlirMemoryEffectsOpInterfaceCallbacks callbacks);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // MLIR_C_INTERFACES_H
|