1448f25c8Szhanghb97 //===- AffineExpr.cpp - C API for MLIR Affine Expressions -----------------===//
2448f25c8Szhanghb97 //
3448f25c8Szhanghb97 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4448f25c8Szhanghb97 // See https://llvm.org/LICENSE.txt for license information.
5448f25c8Szhanghb97 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6448f25c8Szhanghb97 //
7448f25c8Szhanghb97 //===----------------------------------------------------------------------===//
8448f25c8Szhanghb97 
9448f25c8Szhanghb97 #include "mlir-c/AffineExpr.h"
10448f25c8Szhanghb97 #include "mlir-c/AffineMap.h"
11448f25c8Szhanghb97 #include "mlir-c/IR.h"
12448f25c8Szhanghb97 #include "mlir/CAPI/AffineExpr.h"
13448f25c8Szhanghb97 #include "mlir/CAPI/AffineMap.h"
14448f25c8Szhanghb97 #include "mlir/CAPI/IR.h"
15448f25c8Szhanghb97 #include "mlir/CAPI/Utils.h"
16448f25c8Szhanghb97 #include "mlir/IR/AffineExpr.h"
17448f25c8Szhanghb97 
18448f25c8Szhanghb97 using namespace mlir;
19448f25c8Szhanghb97 
mlirAffineExprGetContext(MlirAffineExpr affineExpr)20448f25c8Szhanghb97 MlirContext mlirAffineExprGetContext(MlirAffineExpr affineExpr) {
21448f25c8Szhanghb97   return wrap(unwrap(affineExpr).getContext());
22448f25c8Szhanghb97 }
23448f25c8Szhanghb97 
mlirAffineExprEqual(MlirAffineExpr lhs,MlirAffineExpr rhs)2474628c43SAlex Zinenko bool mlirAffineExprEqual(MlirAffineExpr lhs, MlirAffineExpr rhs) {
2574628c43SAlex Zinenko   return unwrap(lhs) == unwrap(rhs);
2674628c43SAlex Zinenko }
2774628c43SAlex Zinenko 
mlirAffineExprPrint(MlirAffineExpr affineExpr,MlirStringCallback callback,void * userData)28448f25c8Szhanghb97 void mlirAffineExprPrint(MlirAffineExpr affineExpr, MlirStringCallback callback,
29448f25c8Szhanghb97                          void *userData) {
30448f25c8Szhanghb97   mlir::detail::CallbackOstream stream(callback, userData);
31448f25c8Szhanghb97   unwrap(affineExpr).print(stream);
32448f25c8Szhanghb97 }
33448f25c8Szhanghb97 
mlirAffineExprDump(MlirAffineExpr affineExpr)34448f25c8Szhanghb97 void mlirAffineExprDump(MlirAffineExpr affineExpr) {
35448f25c8Szhanghb97   unwrap(affineExpr).dump();
36448f25c8Szhanghb97 }
37448f25c8Szhanghb97 
mlirAffineExprIsSymbolicOrConstant(MlirAffineExpr affineExpr)3862195b75SStella Laurenzo bool mlirAffineExprIsSymbolicOrConstant(MlirAffineExpr affineExpr) {
39448f25c8Szhanghb97   return unwrap(affineExpr).isSymbolicOrConstant();
40448f25c8Szhanghb97 }
41448f25c8Szhanghb97 
mlirAffineExprIsPureAffine(MlirAffineExpr affineExpr)4262195b75SStella Laurenzo bool mlirAffineExprIsPureAffine(MlirAffineExpr affineExpr) {
43448f25c8Szhanghb97   return unwrap(affineExpr).isPureAffine();
44448f25c8Szhanghb97 }
45448f25c8Szhanghb97 
mlirAffineExprGetLargestKnownDivisor(MlirAffineExpr affineExpr)46448f25c8Szhanghb97 int64_t mlirAffineExprGetLargestKnownDivisor(MlirAffineExpr affineExpr) {
47448f25c8Szhanghb97   return unwrap(affineExpr).getLargestKnownDivisor();
48448f25c8Szhanghb97 }
49448f25c8Szhanghb97 
mlirAffineExprIsMultipleOf(MlirAffineExpr affineExpr,int64_t factor)5062195b75SStella Laurenzo bool mlirAffineExprIsMultipleOf(MlirAffineExpr affineExpr, int64_t factor) {
51448f25c8Szhanghb97   return unwrap(affineExpr).isMultipleOf(factor);
52448f25c8Szhanghb97 }
53448f25c8Szhanghb97 
mlirAffineExprIsFunctionOfDim(MlirAffineExpr affineExpr,intptr_t position)5462195b75SStella Laurenzo bool mlirAffineExprIsFunctionOfDim(MlirAffineExpr affineExpr,
55448f25c8Szhanghb97                                    intptr_t position) {
56448f25c8Szhanghb97   return unwrap(affineExpr).isFunctionOfDim(position);
57448f25c8Szhanghb97 }
58448f25c8Szhanghb97 
mlirAffineExprCompose(MlirAffineExpr affineExpr,MlirAffineMap affineMap)59*fc7594ccSAlex Zinenko MlirAffineExpr mlirAffineExprCompose(MlirAffineExpr affineExpr,
60*fc7594ccSAlex Zinenko                                      MlirAffineMap affineMap) {
61*fc7594ccSAlex Zinenko   return wrap(unwrap(affineExpr).compose(unwrap(affineMap)));
62*fc7594ccSAlex Zinenko }
63*fc7594ccSAlex Zinenko 
64c7994bd9SMehdi Amini //===----------------------------------------------------------------------===//
65c7994bd9SMehdi Amini // Affine Dimension Expression.
66c7994bd9SMehdi Amini //===----------------------------------------------------------------------===//
67448f25c8Szhanghb97 
mlirAffineExprIsADim(MlirAffineExpr affineExpr)6874628c43SAlex Zinenko bool mlirAffineExprIsADim(MlirAffineExpr affineExpr) {
6974628c43SAlex Zinenko   return unwrap(affineExpr).isa<AffineDimExpr>();
7074628c43SAlex Zinenko }
7174628c43SAlex Zinenko 
mlirAffineDimExprGet(MlirContext ctx,intptr_t position)72448f25c8Szhanghb97 MlirAffineExpr mlirAffineDimExprGet(MlirContext ctx, intptr_t position) {
73448f25c8Szhanghb97   return wrap(getAffineDimExpr(position, unwrap(ctx)));
74448f25c8Szhanghb97 }
75448f25c8Szhanghb97 
mlirAffineDimExprGetPosition(MlirAffineExpr affineExpr)76448f25c8Szhanghb97 intptr_t mlirAffineDimExprGetPosition(MlirAffineExpr affineExpr) {
77448f25c8Szhanghb97   return unwrap(affineExpr).cast<AffineDimExpr>().getPosition();
78448f25c8Szhanghb97 }
79448f25c8Szhanghb97 
80c7994bd9SMehdi Amini //===----------------------------------------------------------------------===//
81c7994bd9SMehdi Amini // Affine Symbol Expression.
82c7994bd9SMehdi Amini //===----------------------------------------------------------------------===//
83448f25c8Szhanghb97 
mlirAffineExprIsASymbol(MlirAffineExpr affineExpr)8474628c43SAlex Zinenko bool mlirAffineExprIsASymbol(MlirAffineExpr affineExpr) {
8574628c43SAlex Zinenko   return unwrap(affineExpr).isa<AffineSymbolExpr>();
8674628c43SAlex Zinenko }
8774628c43SAlex Zinenko 
mlirAffineSymbolExprGet(MlirContext ctx,intptr_t position)88448f25c8Szhanghb97 MlirAffineExpr mlirAffineSymbolExprGet(MlirContext ctx, intptr_t position) {
89448f25c8Szhanghb97   return wrap(getAffineSymbolExpr(position, unwrap(ctx)));
90448f25c8Szhanghb97 }
91448f25c8Szhanghb97 
mlirAffineSymbolExprGetPosition(MlirAffineExpr affineExpr)92448f25c8Szhanghb97 intptr_t mlirAffineSymbolExprGetPosition(MlirAffineExpr affineExpr) {
93448f25c8Szhanghb97   return unwrap(affineExpr).cast<AffineSymbolExpr>().getPosition();
94448f25c8Szhanghb97 }
95448f25c8Szhanghb97 
96c7994bd9SMehdi Amini //===----------------------------------------------------------------------===//
97c7994bd9SMehdi Amini // Affine Constant Expression.
98c7994bd9SMehdi Amini //===----------------------------------------------------------------------===//
99448f25c8Szhanghb97 
mlirAffineExprIsAConstant(MlirAffineExpr affineExpr)10074628c43SAlex Zinenko bool mlirAffineExprIsAConstant(MlirAffineExpr affineExpr) {
10174628c43SAlex Zinenko   return unwrap(affineExpr).isa<AffineConstantExpr>();
10274628c43SAlex Zinenko }
10374628c43SAlex Zinenko 
mlirAffineConstantExprGet(MlirContext ctx,int64_t constant)104448f25c8Szhanghb97 MlirAffineExpr mlirAffineConstantExprGet(MlirContext ctx, int64_t constant) {
105448f25c8Szhanghb97   return wrap(getAffineConstantExpr(constant, unwrap(ctx)));
106448f25c8Szhanghb97 }
107448f25c8Szhanghb97 
mlirAffineConstantExprGetValue(MlirAffineExpr affineExpr)108448f25c8Szhanghb97 int64_t mlirAffineConstantExprGetValue(MlirAffineExpr affineExpr) {
109448f25c8Szhanghb97   return unwrap(affineExpr).cast<AffineConstantExpr>().getValue();
110448f25c8Szhanghb97 }
111448f25c8Szhanghb97 
112c7994bd9SMehdi Amini //===----------------------------------------------------------------------===//
113c7994bd9SMehdi Amini // Affine Add Expression.
114c7994bd9SMehdi Amini //===----------------------------------------------------------------------===//
115448f25c8Szhanghb97 
mlirAffineExprIsAAdd(MlirAffineExpr affineExpr)11662195b75SStella Laurenzo bool mlirAffineExprIsAAdd(MlirAffineExpr affineExpr) {
117448f25c8Szhanghb97   return unwrap(affineExpr).getKind() == mlir::AffineExprKind::Add;
118448f25c8Szhanghb97 }
119448f25c8Szhanghb97 
mlirAffineAddExprGet(MlirAffineExpr lhs,MlirAffineExpr rhs)120448f25c8Szhanghb97 MlirAffineExpr mlirAffineAddExprGet(MlirAffineExpr lhs, MlirAffineExpr rhs) {
121448f25c8Szhanghb97   return wrap(getAffineBinaryOpExpr(mlir::AffineExprKind::Add, unwrap(lhs),
122448f25c8Szhanghb97                                     unwrap(rhs)));
123448f25c8Szhanghb97 }
124448f25c8Szhanghb97 
125c7994bd9SMehdi Amini //===----------------------------------------------------------------------===//
126c7994bd9SMehdi Amini // Affine Mul Expression.
127c7994bd9SMehdi Amini //===----------------------------------------------------------------------===//
128448f25c8Szhanghb97 
mlirAffineExprIsAMul(MlirAffineExpr affineExpr)12962195b75SStella Laurenzo bool mlirAffineExprIsAMul(MlirAffineExpr affineExpr) {
130448f25c8Szhanghb97   return unwrap(affineExpr).getKind() == mlir::AffineExprKind::Mul;
131448f25c8Szhanghb97 }
132448f25c8Szhanghb97 
mlirAffineMulExprGet(MlirAffineExpr lhs,MlirAffineExpr rhs)133448f25c8Szhanghb97 MlirAffineExpr mlirAffineMulExprGet(MlirAffineExpr lhs, MlirAffineExpr rhs) {
134448f25c8Szhanghb97   return wrap(getAffineBinaryOpExpr(mlir::AffineExprKind::Mul, unwrap(lhs),
135448f25c8Szhanghb97                                     unwrap(rhs)));
136448f25c8Szhanghb97 }
137448f25c8Szhanghb97 
138c7994bd9SMehdi Amini //===----------------------------------------------------------------------===//
139c7994bd9SMehdi Amini // Affine Mod Expression.
140c7994bd9SMehdi Amini //===----------------------------------------------------------------------===//
141448f25c8Szhanghb97 
mlirAffineExprIsAMod(MlirAffineExpr affineExpr)14262195b75SStella Laurenzo bool mlirAffineExprIsAMod(MlirAffineExpr affineExpr) {
143448f25c8Szhanghb97   return unwrap(affineExpr).getKind() == mlir::AffineExprKind::Mod;
144448f25c8Szhanghb97 }
145448f25c8Szhanghb97 
mlirAffineModExprGet(MlirAffineExpr lhs,MlirAffineExpr rhs)146448f25c8Szhanghb97 MlirAffineExpr mlirAffineModExprGet(MlirAffineExpr lhs, MlirAffineExpr rhs) {
147448f25c8Szhanghb97   return wrap(getAffineBinaryOpExpr(mlir::AffineExprKind::Mod, unwrap(lhs),
148448f25c8Szhanghb97                                     unwrap(rhs)));
149448f25c8Szhanghb97 }
150448f25c8Szhanghb97 
151c7994bd9SMehdi Amini //===----------------------------------------------------------------------===//
152c7994bd9SMehdi Amini // Affine FloorDiv Expression.
153c7994bd9SMehdi Amini //===----------------------------------------------------------------------===//
154448f25c8Szhanghb97 
mlirAffineExprIsAFloorDiv(MlirAffineExpr affineExpr)15562195b75SStella Laurenzo bool mlirAffineExprIsAFloorDiv(MlirAffineExpr affineExpr) {
156448f25c8Szhanghb97   return unwrap(affineExpr).getKind() == mlir::AffineExprKind::FloorDiv;
157448f25c8Szhanghb97 }
158448f25c8Szhanghb97 
mlirAffineFloorDivExprGet(MlirAffineExpr lhs,MlirAffineExpr rhs)159448f25c8Szhanghb97 MlirAffineExpr mlirAffineFloorDivExprGet(MlirAffineExpr lhs,
160448f25c8Szhanghb97                                          MlirAffineExpr rhs) {
161448f25c8Szhanghb97   return wrap(getAffineBinaryOpExpr(mlir::AffineExprKind::FloorDiv, unwrap(lhs),
162448f25c8Szhanghb97                                     unwrap(rhs)));
163448f25c8Szhanghb97 }
164448f25c8Szhanghb97 
165c7994bd9SMehdi Amini //===----------------------------------------------------------------------===//
166c7994bd9SMehdi Amini // Affine CeilDiv Expression.
167c7994bd9SMehdi Amini //===----------------------------------------------------------------------===//
168448f25c8Szhanghb97 
mlirAffineExprIsACeilDiv(MlirAffineExpr affineExpr)16962195b75SStella Laurenzo bool mlirAffineExprIsACeilDiv(MlirAffineExpr affineExpr) {
170448f25c8Szhanghb97   return unwrap(affineExpr).getKind() == mlir::AffineExprKind::CeilDiv;
171448f25c8Szhanghb97 }
172448f25c8Szhanghb97 
mlirAffineCeilDivExprGet(MlirAffineExpr lhs,MlirAffineExpr rhs)173448f25c8Szhanghb97 MlirAffineExpr mlirAffineCeilDivExprGet(MlirAffineExpr lhs,
174448f25c8Szhanghb97                                         MlirAffineExpr rhs) {
175448f25c8Szhanghb97   return wrap(getAffineBinaryOpExpr(mlir::AffineExprKind::CeilDiv, unwrap(lhs),
176448f25c8Szhanghb97                                     unwrap(rhs)));
177448f25c8Szhanghb97 }
178448f25c8Szhanghb97 
179c7994bd9SMehdi Amini //===----------------------------------------------------------------------===//
180c7994bd9SMehdi Amini // Affine Binary Operation Expression.
181c7994bd9SMehdi Amini //===----------------------------------------------------------------------===//
182448f25c8Szhanghb97 
mlirAffineExprIsABinary(MlirAffineExpr affineExpr)18374628c43SAlex Zinenko bool mlirAffineExprIsABinary(MlirAffineExpr affineExpr) {
18474628c43SAlex Zinenko   return unwrap(affineExpr).isa<AffineBinaryOpExpr>();
18574628c43SAlex Zinenko }
18674628c43SAlex Zinenko 
mlirAffineBinaryOpExprGetLHS(MlirAffineExpr affineExpr)187448f25c8Szhanghb97 MlirAffineExpr mlirAffineBinaryOpExprGetLHS(MlirAffineExpr affineExpr) {
188448f25c8Szhanghb97   return wrap(unwrap(affineExpr).cast<AffineBinaryOpExpr>().getLHS());
189448f25c8Szhanghb97 }
190448f25c8Szhanghb97 
mlirAffineBinaryOpExprGetRHS(MlirAffineExpr affineExpr)191448f25c8Szhanghb97 MlirAffineExpr mlirAffineBinaryOpExprGetRHS(MlirAffineExpr affineExpr) {
192448f25c8Szhanghb97   return wrap(unwrap(affineExpr).cast<AffineBinaryOpExpr>().getRHS());
193448f25c8Szhanghb97 }
194