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