104 lines · cpp
1//===- IntegerSet.cpp - C API for MLIR Integer Sets -----------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "mlir-c/IntegerSet.h"10#include "mlir-c/AffineExpr.h"11#include "mlir/CAPI/AffineExpr.h"12#include "mlir/CAPI/IR.h"13#include "mlir/CAPI/IntegerSet.h"14#include "mlir/CAPI/Utils.h"15#include "mlir/IR/IntegerSet.h"16 17using namespace mlir;18 19MlirContext mlirIntegerSetGetContext(MlirIntegerSet set) {20 return wrap(unwrap(set).getContext());21}22 23bool mlirIntegerSetEqual(MlirIntegerSet s1, MlirIntegerSet s2) {24 return unwrap(s1) == unwrap(s2);25}26 27void mlirIntegerSetPrint(MlirIntegerSet set, MlirStringCallback callback,28 void *userData) {29 mlir::detail::CallbackOstream stream(callback, userData);30 unwrap(set).print(stream);31}32 33void mlirIntegerSetDump(MlirIntegerSet set) { unwrap(set).dump(); }34 35MlirIntegerSet mlirIntegerSetEmptyGet(MlirContext context, intptr_t numDims,36 intptr_t numSymbols) {37 return wrap(IntegerSet::getEmptySet(static_cast<unsigned>(numDims),38 static_cast<unsigned>(numSymbols),39 unwrap(context)));40}41 42MlirIntegerSet mlirIntegerSetGet(MlirContext context, intptr_t numDims,43 intptr_t numSymbols, intptr_t numConstraints,44 const MlirAffineExpr *constraints,45 const bool *eqFlags) {46 SmallVector<AffineExpr> mlirConstraints;47 (void)unwrapList(static_cast<size_t>(numConstraints), constraints,48 mlirConstraints);49 return wrap(IntegerSet::get(50 static_cast<unsigned>(numDims), static_cast<unsigned>(numSymbols),51 mlirConstraints,52 llvm::ArrayRef(eqFlags, static_cast<size_t>(numConstraints))));53}54 55MlirIntegerSet56mlirIntegerSetReplaceGet(MlirIntegerSet set,57 const MlirAffineExpr *dimReplacements,58 const MlirAffineExpr *symbolReplacements,59 intptr_t numResultDims, intptr_t numResultSymbols) {60 SmallVector<AffineExpr> mlirDims, mlirSymbols;61 (void)unwrapList(unwrap(set).getNumDims(), dimReplacements, mlirDims);62 (void)unwrapList(unwrap(set).getNumSymbols(), symbolReplacements,63 mlirSymbols);64 return wrap(unwrap(set).replaceDimsAndSymbols(65 mlirDims, mlirSymbols, static_cast<unsigned>(numResultDims),66 static_cast<unsigned>(numResultSymbols)));67}68 69bool mlirIntegerSetIsCanonicalEmpty(MlirIntegerSet set) {70 return unwrap(set).isEmptyIntegerSet();71}72 73intptr_t mlirIntegerSetGetNumDims(MlirIntegerSet set) {74 return static_cast<intptr_t>(unwrap(set).getNumDims());75}76 77intptr_t mlirIntegerSetGetNumSymbols(MlirIntegerSet set) {78 return static_cast<intptr_t>(unwrap(set).getNumSymbols());79}80 81intptr_t mlirIntegerSetGetNumInputs(MlirIntegerSet set) {82 return static_cast<intptr_t>(unwrap(set).getNumInputs());83}84 85intptr_t mlirIntegerSetGetNumConstraints(MlirIntegerSet set) {86 return static_cast<intptr_t>(unwrap(set).getNumConstraints());87}88 89intptr_t mlirIntegerSetGetNumEqualities(MlirIntegerSet set) {90 return static_cast<intptr_t>(unwrap(set).getNumEqualities());91}92 93intptr_t mlirIntegerSetGetNumInequalities(MlirIntegerSet set) {94 return static_cast<intptr_t>(unwrap(set).getNumInequalities());95}96 97MlirAffineExpr mlirIntegerSetGetConstraint(MlirIntegerSet set, intptr_t pos) {98 return wrap(unwrap(set).getConstraint(static_cast<unsigned>(pos)));99}100 101bool mlirIntegerSetIsConstraintEq(MlirIntegerSet set, intptr_t pos) {102 return unwrap(set).isEq(pos);103}104