circt/include/circt-c/Dialect/OM.h

252 lines
9.0 KiB
C

//===- OM.h - C interface for the OM dialect ----------------------*- 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
//
//===----------------------------------------------------------------------===//
#ifndef CIRCT_C_DIALECT_OM_H
#define CIRCT_C_DIALECT_OM_H
#include "mlir-c/IR.h"
#ifdef __cplusplus
extern "C" {
#endif
//===----------------------------------------------------------------------===//
// Dialect API.
//===----------------------------------------------------------------------===//
MLIR_DECLARE_CAPI_DIALECT_REGISTRATION(OM, om);
//===----------------------------------------------------------------------===//
// Type API.
//===----------------------------------------------------------------------===//
/// Is the Type an AnyType.
MLIR_CAPI_EXPORTED bool omTypeIsAAnyType(MlirType type);
/// Get the TypeID for an AnyType.
MLIR_CAPI_EXPORTED MlirTypeID omAnyTypeGetTypeID(void);
/// Is the Type a ClassType.
MLIR_CAPI_EXPORTED bool omTypeIsAClassType(MlirType type);
/// Get the TypeID for a ClassType.
MLIR_CAPI_EXPORTED MlirTypeID omClassTypeGetTypeID(void);
/// Get the name for a ClassType.
MLIR_CAPI_EXPORTED MlirIdentifier omClassTypeGetName(MlirType type);
/// Is the Type a FrozenBasePathType.
MLIR_CAPI_EXPORTED bool omTypeIsAFrozenBasePathType(MlirType type);
/// Get the TypeID for a FrozenBasePathType.
MLIR_CAPI_EXPORTED MlirTypeID omFrozenBasePathTypeGetTypeID(void);
/// Is the Type a FrozenPathType.
MLIR_CAPI_EXPORTED bool omTypeIsAFrozenPathType(MlirType type);
/// Get the TypeID for a FrozenPathType.
MLIR_CAPI_EXPORTED MlirTypeID omFrozenPathTypeGetTypeID(void);
/// Is the Type a ListType.
MLIR_CAPI_EXPORTED bool omTypeIsAListType(MlirType type);
/// Get the TypeID for a ListType.
MLIR_CAPI_EXPORTED MlirTypeID omListTypeGetTypeID(void);
// Return a element type of a ListType.
MLIR_CAPI_EXPORTED MlirType omListTypeGetElementType(MlirType type);
/// Is the Type a StringType.
MLIR_CAPI_EXPORTED bool omTypeIsAStringType(MlirType type);
/// Get the TypeID for a StringType.
MLIR_CAPI_EXPORTED MlirTypeID omStringTypeGetTypeID(void);
/// Get a StringType.
MLIR_CAPI_EXPORTED MlirType omStringTypeGet(MlirContext ctx);
//===----------------------------------------------------------------------===//
// Evaluator data structures.
//===----------------------------------------------------------------------===//
/// A value type for use in C APIs that just wraps a pointer to an Evaluator.
/// This is in line with the usual MLIR DEFINE_C_API_STRUCT.
struct OMEvaluator {
void *ptr;
};
// clang-tidy doesn't respect extern "C".
// see https://github.com/llvm/llvm-project/issues/35272.
// NOLINTNEXTLINE(modernize-use-using)
typedef struct OMEvaluator OMEvaluator;
/// A value type for use in C APIs that just wraps a pointer to an Object.
/// This is in line with the usual MLIR DEFINE_C_API_STRUCT.
struct OMEvaluatorValue {
void *ptr;
};
// clang-tidy doesn't respect extern "C".
// see https://github.com/llvm/llvm-project/issues/35272.
// NOLINTNEXTLINE(modernize-use-using)
typedef struct OMEvaluatorValue OMEvaluatorValue;
//===----------------------------------------------------------------------===//
// Evaluator API.
//===----------------------------------------------------------------------===//
/// Construct an Evaluator with an IR module.
MLIR_CAPI_EXPORTED OMEvaluator omEvaluatorNew(MlirModule mod);
/// Use the Evaluator to Instantiate an Object from its class name and actual
/// parameters.
MLIR_CAPI_EXPORTED OMEvaluatorValue
omEvaluatorInstantiate(OMEvaluator evaluator, MlirAttribute className,
intptr_t nActualParams, OMEvaluatorValue *actualParams);
/// Get the Module the Evaluator is built from.
MLIR_CAPI_EXPORTED MlirModule omEvaluatorGetModule(OMEvaluator evaluator);
//===----------------------------------------------------------------------===//
// Object API.
//===----------------------------------------------------------------------===//
/// Query if the Object is null.
MLIR_CAPI_EXPORTED bool omEvaluatorObjectIsNull(OMEvaluatorValue object);
/// Get the Type from an Object, which will be a ClassType.
MLIR_CAPI_EXPORTED MlirType omEvaluatorObjectGetType(OMEvaluatorValue object);
/// Get a field from an Object, which must contain a field of that name.
MLIR_CAPI_EXPORTED OMEvaluatorValue
omEvaluatorObjectGetField(OMEvaluatorValue object, MlirAttribute name);
/// Get the object hash.
MLIR_CAPI_EXPORTED unsigned omEvaluatorObjectGetHash(OMEvaluatorValue object);
/// Check equality of two objects.
MLIR_CAPI_EXPORTED bool omEvaluatorObjectIsEq(OMEvaluatorValue object,
OMEvaluatorValue other);
/// Get all the field names from an Object, can be empty if object has no
/// fields.
MLIR_CAPI_EXPORTED MlirAttribute
omEvaluatorObjectGetFieldNames(OMEvaluatorValue object);
//===----------------------------------------------------------------------===//
// EvaluatorValue API.
//===----------------------------------------------------------------------===//
// Get a context from an EvaluatorValue.
MLIR_CAPI_EXPORTED MlirContext
omEvaluatorValueGetContext(OMEvaluatorValue evaluatorValue);
// Get Location from an EvaluatorValue.
MLIR_CAPI_EXPORTED MlirLocation
omEvaluatorValueGetLoc(OMEvaluatorValue evaluatorValue);
// Query if the EvaluatorValue is null.
MLIR_CAPI_EXPORTED bool omEvaluatorValueIsNull(OMEvaluatorValue evaluatorValue);
/// Query if the EvaluatorValue is an Object.
MLIR_CAPI_EXPORTED bool
omEvaluatorValueIsAObject(OMEvaluatorValue evaluatorValue);
/// Query if the EvaluatorValue is a Primitive.
MLIR_CAPI_EXPORTED bool
omEvaluatorValueIsAPrimitive(OMEvaluatorValue evaluatorValue);
/// Get the Primitive from an EvaluatorValue, which must contain a Primitive.
MLIR_CAPI_EXPORTED MlirAttribute
omEvaluatorValueGetPrimitive(OMEvaluatorValue evaluatorValue);
/// Get the EvaluatorValue from a Primitive value.
MLIR_CAPI_EXPORTED OMEvaluatorValue
omEvaluatorValueFromPrimitive(MlirAttribute primitive);
/// Query if the EvaluatorValue is an Object.
MLIR_CAPI_EXPORTED bool
omEvaluatorValueIsAList(OMEvaluatorValue evaluatorValue);
/// Get the length of the list.
MLIR_CAPI_EXPORTED intptr_t
omEvaluatorListGetNumElements(OMEvaluatorValue evaluatorValue);
/// Get an element of the list.
MLIR_CAPI_EXPORTED OMEvaluatorValue
omEvaluatorListGetElement(OMEvaluatorValue evaluatorValue, intptr_t pos);
/// Query if the EvaluatorValue is a BasePath.
MLIR_CAPI_EXPORTED bool
omEvaluatorValueIsABasePath(OMEvaluatorValue evaluatorValue);
/// Create an empty BasePath.
MLIR_CAPI_EXPORTED OMEvaluatorValue
omEvaluatorBasePathGetEmpty(MlirContext context);
/// Query if the EvaluatorValue is a Path.
MLIR_CAPI_EXPORTED bool
omEvaluatorValueIsAPath(OMEvaluatorValue evaluatorValue);
/// Get a string representation of a Path.
MLIR_CAPI_EXPORTED MlirAttribute
omEvaluatorPathGetAsString(OMEvaluatorValue evaluatorValue);
/// Query if the EvaluatorValue is a Reference.
MLIR_CAPI_EXPORTED bool
omEvaluatorValueIsAReference(OMEvaluatorValue evaluatorValue);
/// Dereference a Reference EvaluatorValue. Emits an error and returns null if
/// the Reference cannot be dereferenced.
MLIR_CAPI_EXPORTED OMEvaluatorValue
omEvaluatorValueGetReferenceValue(OMEvaluatorValue evaluatorValue);
//===----------------------------------------------------------------------===//
// ReferenceAttr API
//===----------------------------------------------------------------------===//
MLIR_CAPI_EXPORTED bool omAttrIsAReferenceAttr(MlirAttribute attr);
MLIR_CAPI_EXPORTED MlirAttribute omReferenceAttrGetInnerRef(MlirAttribute attr);
//===----------------------------------------------------------------------===//
// IntegerAttr API
//===----------------------------------------------------------------------===//
MLIR_CAPI_EXPORTED bool omAttrIsAIntegerAttr(MlirAttribute attr);
/// Given an om::IntegerAttr, return the mlir::IntegerAttr.
MLIR_CAPI_EXPORTED MlirAttribute omIntegerAttrGetInt(MlirAttribute attr);
/// Get an om::IntegerAttr from mlir::IntegerAttr.
MLIR_CAPI_EXPORTED MlirAttribute omIntegerAttrGet(MlirAttribute attr);
/// Get a string representation of an om::IntegerAttr.
MLIR_CAPI_EXPORTED MlirStringRef omIntegerAttrToString(MlirAttribute attr);
//===----------------------------------------------------------------------===//
// ListAttr API
//===----------------------------------------------------------------------===//
MLIR_CAPI_EXPORTED bool omAttrIsAListAttr(MlirAttribute attr);
MLIR_CAPI_EXPORTED intptr_t omListAttrGetNumElements(MlirAttribute attr);
MLIR_CAPI_EXPORTED MlirAttribute omListAttrGetElement(MlirAttribute attr,
intptr_t pos);
MLIR_CAPI_EXPORTED MlirAttribute omListAttrGet(MlirType elementType,
intptr_t numElements,
const MlirAttribute *elements);
#ifdef __cplusplus
}
#endif
#endif // CIRCT_C_DIALECT_OM_H