brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.7 KiB · 5a0a03b Raw
211 lines · cpp
1//===- AffineExpr.cpp - C API for MLIR Affine Expressions -----------------===//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/AffineExpr.h"10#include "mlir-c/AffineMap.h"11#include "mlir-c/IR.h"12#include "mlir/CAPI/AffineExpr.h"13#include "mlir/CAPI/AffineMap.h"14#include "mlir/CAPI/IR.h"15#include "mlir/CAPI/Utils.h"16#include "mlir/IR/AffineExpr.h"17 18using namespace mlir;19 20MlirContext mlirAffineExprGetContext(MlirAffineExpr affineExpr) {21  return wrap(unwrap(affineExpr).getContext());22}23 24bool mlirAffineExprEqual(MlirAffineExpr lhs, MlirAffineExpr rhs) {25  return unwrap(lhs) == unwrap(rhs);26}27 28void mlirAffineExprPrint(MlirAffineExpr affineExpr, MlirStringCallback callback,29                         void *userData) {30  mlir::detail::CallbackOstream stream(callback, userData);31  unwrap(affineExpr).print(stream);32}33 34void mlirAffineExprDump(MlirAffineExpr affineExpr) {35  unwrap(affineExpr).dump();36}37 38bool mlirAffineExprIsSymbolicOrConstant(MlirAffineExpr affineExpr) {39  return unwrap(affineExpr).isSymbolicOrConstant();40}41 42bool mlirAffineExprIsPureAffine(MlirAffineExpr affineExpr) {43  return unwrap(affineExpr).isPureAffine();44}45 46int64_t mlirAffineExprGetLargestKnownDivisor(MlirAffineExpr affineExpr) {47  return unwrap(affineExpr).getLargestKnownDivisor();48}49 50bool mlirAffineExprIsMultipleOf(MlirAffineExpr affineExpr, int64_t factor) {51  return unwrap(affineExpr).isMultipleOf(factor);52}53 54bool mlirAffineExprIsFunctionOfDim(MlirAffineExpr affineExpr,55                                   intptr_t position) {56  return unwrap(affineExpr).isFunctionOfDim(position);57}58 59MlirAffineExpr mlirAffineExprCompose(MlirAffineExpr affineExpr,60                                     MlirAffineMap affineMap) {61  return wrap(unwrap(affineExpr).compose(unwrap(affineMap)));62}63 64MlirAffineExpr mlirAffineExprShiftDims(MlirAffineExpr affineExpr,65                                       uint32_t numDims, uint32_t shift,66                                       uint32_t offset) {67  return wrap(unwrap(affineExpr).shiftDims(numDims, shift, offset));68}69 70MlirAffineExpr mlirAffineExprShiftSymbols(MlirAffineExpr affineExpr,71                                          uint32_t numSymbols, uint32_t shift,72                                          uint32_t offset) {73  return wrap(unwrap(affineExpr).shiftSymbols(numSymbols, shift, offset));74}75 76MlirAffineExpr mlirSimplifyAffineExpr(MlirAffineExpr expr, uint32_t numDims,77                                      uint32_t numSymbols) {78  return wrap(simplifyAffineExpr(unwrap(expr), numDims, numSymbols));79}80 81//===----------------------------------------------------------------------===//82// Affine Dimension Expression.83//===----------------------------------------------------------------------===//84 85bool mlirAffineExprIsADim(MlirAffineExpr affineExpr) {86  return isa<AffineDimExpr>(unwrap(affineExpr));87}88 89MlirAffineExpr mlirAffineDimExprGet(MlirContext ctx, intptr_t position) {90  return wrap(getAffineDimExpr(position, unwrap(ctx)));91}92 93intptr_t mlirAffineDimExprGetPosition(MlirAffineExpr affineExpr) {94  return cast<AffineDimExpr>(unwrap(affineExpr)).getPosition();95}96 97//===----------------------------------------------------------------------===//98// Affine Symbol Expression.99//===----------------------------------------------------------------------===//100 101bool mlirAffineExprIsASymbol(MlirAffineExpr affineExpr) {102  return isa<AffineSymbolExpr>(unwrap(affineExpr));103}104 105MlirAffineExpr mlirAffineSymbolExprGet(MlirContext ctx, intptr_t position) {106  return wrap(getAffineSymbolExpr(position, unwrap(ctx)));107}108 109intptr_t mlirAffineSymbolExprGetPosition(MlirAffineExpr affineExpr) {110  return cast<AffineSymbolExpr>(unwrap(affineExpr)).getPosition();111}112 113//===----------------------------------------------------------------------===//114// Affine Constant Expression.115//===----------------------------------------------------------------------===//116 117bool mlirAffineExprIsAConstant(MlirAffineExpr affineExpr) {118  return isa<AffineConstantExpr>(unwrap(affineExpr));119}120 121MlirAffineExpr mlirAffineConstantExprGet(MlirContext ctx, int64_t constant) {122  return wrap(getAffineConstantExpr(constant, unwrap(ctx)));123}124 125int64_t mlirAffineConstantExprGetValue(MlirAffineExpr affineExpr) {126  return cast<AffineConstantExpr>(unwrap(affineExpr)).getValue();127}128 129//===----------------------------------------------------------------------===//130// Affine Add Expression.131//===----------------------------------------------------------------------===//132 133bool mlirAffineExprIsAAdd(MlirAffineExpr affineExpr) {134  return unwrap(affineExpr).getKind() == mlir::AffineExprKind::Add;135}136 137MlirAffineExpr mlirAffineAddExprGet(MlirAffineExpr lhs, MlirAffineExpr rhs) {138  return wrap(getAffineBinaryOpExpr(mlir::AffineExprKind::Add, unwrap(lhs),139                                    unwrap(rhs)));140}141 142//===----------------------------------------------------------------------===//143// Affine Mul Expression.144//===----------------------------------------------------------------------===//145 146bool mlirAffineExprIsAMul(MlirAffineExpr affineExpr) {147  return unwrap(affineExpr).getKind() == mlir::AffineExprKind::Mul;148}149 150MlirAffineExpr mlirAffineMulExprGet(MlirAffineExpr lhs, MlirAffineExpr rhs) {151  return wrap(getAffineBinaryOpExpr(mlir::AffineExprKind::Mul, unwrap(lhs),152                                    unwrap(rhs)));153}154 155//===----------------------------------------------------------------------===//156// Affine Mod Expression.157//===----------------------------------------------------------------------===//158 159bool mlirAffineExprIsAMod(MlirAffineExpr affineExpr) {160  return unwrap(affineExpr).getKind() == mlir::AffineExprKind::Mod;161}162 163MlirAffineExpr mlirAffineModExprGet(MlirAffineExpr lhs, MlirAffineExpr rhs) {164  return wrap(getAffineBinaryOpExpr(mlir::AffineExprKind::Mod, unwrap(lhs),165                                    unwrap(rhs)));166}167 168//===----------------------------------------------------------------------===//169// Affine FloorDiv Expression.170//===----------------------------------------------------------------------===//171 172bool mlirAffineExprIsAFloorDiv(MlirAffineExpr affineExpr) {173  return unwrap(affineExpr).getKind() == mlir::AffineExprKind::FloorDiv;174}175 176MlirAffineExpr mlirAffineFloorDivExprGet(MlirAffineExpr lhs,177                                         MlirAffineExpr rhs) {178  return wrap(getAffineBinaryOpExpr(mlir::AffineExprKind::FloorDiv, unwrap(lhs),179                                    unwrap(rhs)));180}181 182//===----------------------------------------------------------------------===//183// Affine CeilDiv Expression.184//===----------------------------------------------------------------------===//185 186bool mlirAffineExprIsACeilDiv(MlirAffineExpr affineExpr) {187  return unwrap(affineExpr).getKind() == mlir::AffineExprKind::CeilDiv;188}189 190MlirAffineExpr mlirAffineCeilDivExprGet(MlirAffineExpr lhs,191                                        MlirAffineExpr rhs) {192  return wrap(getAffineBinaryOpExpr(mlir::AffineExprKind::CeilDiv, unwrap(lhs),193                                    unwrap(rhs)));194}195 196//===----------------------------------------------------------------------===//197// Affine Binary Operation Expression.198//===----------------------------------------------------------------------===//199 200bool mlirAffineExprIsABinary(MlirAffineExpr affineExpr) {201  return isa<AffineBinaryOpExpr>(unwrap(affineExpr));202}203 204MlirAffineExpr mlirAffineBinaryOpExprGetLHS(MlirAffineExpr affineExpr) {205  return wrap(cast<AffineBinaryOpExpr>(unwrap(affineExpr)).getLHS());206}207 208MlirAffineExpr mlirAffineBinaryOpExprGetRHS(MlirAffineExpr affineExpr) {209  return wrap(cast<AffineBinaryOpExpr>(unwrap(affineExpr)).getRHS());210}211