123 lines
5.0 KiB
C
123 lines
5.0 KiB
C
//===- MSFT.h - C interface for the MSFT 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_MSFT_H
|
|
#define CIRCT_C_DIALECT_MSFT_H
|
|
|
|
#include "mlir-c/IR.h"
|
|
#include "mlir-c/Pass.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
MLIR_DECLARE_CAPI_DIALECT_REGISTRATION(MSFT, msft);
|
|
|
|
MLIR_CAPI_EXPORTED void mlirMSFTRegisterPasses(void);
|
|
|
|
// Values represented in `MSFT.td`.
|
|
typedef int32_t CirctMSFTPrimitiveType;
|
|
|
|
// Replace all uses of Value with new value.
|
|
MLIR_CAPI_EXPORTED void circtMSFTReplaceAllUsesWith(MlirValue value,
|
|
MlirValue newValue);
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// MSFT Attributes.
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
MLIR_CAPI_EXPORTED bool
|
|
circtMSFTAttributeIsAPhysLocationAttribute(MlirAttribute);
|
|
MLIR_CAPI_EXPORTED MlirAttribute circtMSFTPhysLocationAttrGet(
|
|
MlirContext, CirctMSFTPrimitiveType, uint64_t x, uint64_t y, uint64_t num);
|
|
MLIR_CAPI_EXPORTED CirctMSFTPrimitiveType
|
|
circtMSFTPhysLocationAttrGetPrimitiveType(MlirAttribute);
|
|
MLIR_CAPI_EXPORTED uint64_t circtMSFTPhysLocationAttrGetX(MlirAttribute);
|
|
MLIR_CAPI_EXPORTED uint64_t circtMSFTPhysLocationAttrGetY(MlirAttribute);
|
|
MLIR_CAPI_EXPORTED uint64_t circtMSFTPhysLocationAttrGetNum(MlirAttribute);
|
|
|
|
MLIR_CAPI_EXPORTED MlirOperation circtMSFTGetInstance(MlirOperation root,
|
|
MlirAttribute path);
|
|
|
|
MLIR_CAPI_EXPORTED bool circtMSFTAttributeIsAPhysicalBoundsAttr(MlirAttribute);
|
|
MLIR_CAPI_EXPORTED
|
|
MlirAttribute circtMSFTPhysicalBoundsAttrGet(MlirContext, uint64_t, uint64_t,
|
|
uint64_t, uint64_t);
|
|
|
|
MLIR_CAPI_EXPORTED bool
|
|
circtMSFTAttributeIsALocationVectorAttribute(MlirAttribute);
|
|
MLIR_CAPI_EXPORTED MlirAttribute
|
|
circtMSFTLocationVectorAttrGet(MlirContext, MlirType type, intptr_t numElements,
|
|
MlirAttribute const *elements);
|
|
MLIR_CAPI_EXPORTED MlirType circtMSFTLocationVectorAttrGetType(MlirAttribute);
|
|
MLIR_CAPI_EXPORTED
|
|
intptr_t circtMSFTLocationVectorAttrGetNumElements(MlirAttribute);
|
|
MLIR_CAPI_EXPORTED MlirAttribute
|
|
circtMSFTLocationVectorAttrGetElement(MlirAttribute attr, intptr_t pos);
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// PrimitiveDB.
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
typedef struct {
|
|
void *ptr;
|
|
} CirctMSFTPrimitiveDB;
|
|
|
|
MLIR_CAPI_EXPORTED CirctMSFTPrimitiveDB circtMSFTCreatePrimitiveDB(MlirContext);
|
|
MLIR_CAPI_EXPORTED void circtMSFTDeletePrimitiveDB(CirctMSFTPrimitiveDB self);
|
|
MLIR_CAPI_EXPORTED MlirLogicalResult circtMSFTPrimitiveDBAddPrimitive(
|
|
CirctMSFTPrimitiveDB, MlirAttribute locAndPrim);
|
|
MLIR_CAPI_EXPORTED bool
|
|
circtMSFTPrimitiveDBIsValidLocation(CirctMSFTPrimitiveDB,
|
|
MlirAttribute locAndPrim);
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// PlacementDB.
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
typedef struct {
|
|
void *ptr;
|
|
} CirctMSFTPlacementDB;
|
|
|
|
enum CirctMSFTDirection { NONE = 0, ASC = 1, DESC = 2 };
|
|
typedef struct {
|
|
enum CirctMSFTDirection columns;
|
|
enum CirctMSFTDirection rows;
|
|
} CirctMSFTWalkOrder;
|
|
|
|
MLIR_CAPI_EXPORTED CirctMSFTPlacementDB
|
|
circtMSFTCreatePlacementDB(MlirModule top, CirctMSFTPrimitiveDB seed);
|
|
MLIR_CAPI_EXPORTED void circtMSFTDeletePlacementDB(CirctMSFTPlacementDB self);
|
|
MLIR_CAPI_EXPORTED MlirOperation circtMSFTPlacementDBPlace(
|
|
CirctMSFTPlacementDB, MlirOperation inst, MlirAttribute loc,
|
|
MlirStringRef subpath, MlirLocation srcLoc);
|
|
MLIR_CAPI_EXPORTED void
|
|
circtMSFTPlacementDBRemovePlacement(CirctMSFTPlacementDB, MlirOperation locOp);
|
|
MLIR_CAPI_EXPORTED MlirLogicalResult circtMSFTPlacementDBMovePlacement(
|
|
CirctMSFTPlacementDB, MlirOperation locOp, MlirAttribute newLoc);
|
|
MLIR_CAPI_EXPORTED MlirOperation
|
|
circtMSFTPlacementDBGetInstanceAt(CirctMSFTPlacementDB, MlirAttribute loc);
|
|
MLIR_CAPI_EXPORTED MlirAttribute circtMSFTPlacementDBGetNearestFreeInColumn(
|
|
CirctMSFTPlacementDB, CirctMSFTPrimitiveType prim, uint64_t column,
|
|
uint64_t nearestToY);
|
|
|
|
typedef void (*CirctMSFTPlacementCallback)(MlirAttribute loc,
|
|
MlirOperation locOp, void *userData);
|
|
/// Walk all the placements within 'bounds' ([xmin, xmax, ymin, ymax], inclusive
|
|
/// on all sides), with -1 meaning unbounded.
|
|
MLIR_CAPI_EXPORTED void circtMSFTPlacementDBWalkPlacements(
|
|
CirctMSFTPlacementDB, CirctMSFTPlacementCallback, int64_t bounds[4],
|
|
CirctMSFTPrimitiveType primTypeFilter, CirctMSFTWalkOrder walkOrder,
|
|
void *userData);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // CIRCT_C_DIALECT_MSFT_H
|