MLIR 22.0.0git
IntegerSet.cpp
Go to the documentation of this file.
1//===- IntegerSet.cpp - MLIR Integer Set class ----------------------------===//
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-exception
6//
7//===----------------------------------------------------------------------===//
8
10#include "IntegerSetDetail.h"
11
12using namespace mlir;
13using namespace mlir::detail;
14
15unsigned IntegerSet::getNumDims() const { return set->dimCount; }
16unsigned IntegerSet::getNumSymbols() const { return set->symbolCount; }
17unsigned IntegerSet::getNumInputs() const {
18 return set->dimCount + set->symbolCount;
19}
20
22 return set->constraints.size();
23}
24
26 unsigned numEqualities = 0;
27 for (unsigned i = 0, e = getNumConstraints(); i < e; i++)
28 if (isEq(i))
29 ++numEqualities;
30 return numEqualities;
31}
32
36
38 return *this == getEmptySet(set->dimCount, set->symbolCount, getContext());
39}
40
42 return set->constraints;
43}
44
46 return getConstraints()[idx];
47}
48
49/// Returns the equality bits, which specify whether each of the constraints
50/// is an equality or inequality.
51ArrayRef<bool> IntegerSet::getEqFlags() const { return set->eqFlags; }
52
53/// Returns true if the idx^th constraint is an equality, false if it is an
54/// inequality.
55bool IntegerSet::isEq(unsigned idx) const { return getEqFlags()[idx]; }
56
60
61/// Walk all of the AffineExpr's in this set. Each node in an expression
62/// tree is visited in postorder.
63void IntegerSet::walkExprs(function_ref<void(AffineExpr)> callback) const {
64 for (auto expr : getConstraints())
65 expr.walk(callback);
66}
67
69 ArrayRef<AffineExpr> dimReplacements, ArrayRef<AffineExpr> symReplacements,
70 unsigned numResultDims, unsigned numResultSyms) {
72 constraints.reserve(getNumConstraints());
73 for (auto cst : getConstraints())
74 constraints.push_back(
75 cst.replaceDimsAndSymbols(dimReplacements, symReplacements));
76
77 return get(numResultDims, numResultSyms, constraints, getEqFlags());
78}
Base type for affine expression.
Definition AffineExpr.h:68
MLIRContext * getContext() const
void walkExprs(function_ref< void(AffineExpr)> callback) const
Walk all of the AffineExpr's in this set's constraints.
IntegerSet replaceDimsAndSymbols(ArrayRef< AffineExpr > dimReplacements, ArrayRef< AffineExpr > symReplacements, unsigned numResultDims, unsigned numResultSyms)
This method substitutes any uses of dimensions and symbols (e.g.
constexpr IntegerSet()=default
unsigned getNumDims() const
static IntegerSet get(unsigned dimCount, unsigned symbolCount, ArrayRef< AffineExpr > constraints, ArrayRef< bool > eqFlags)
MLIRContext * getContext() const
unsigned getNumInputs() const
unsigned getNumConstraints() const
static IntegerSet getEmptySet(unsigned numDims, unsigned numSymbols, MLIRContext *context)
Definition IntegerSet.h:56
ArrayRef< AffineExpr > getConstraints() const
unsigned getNumEqualities() const
bool isEmptyIntegerSet() const
Returns true if this is the canonical integer set.
AffineExpr getConstraint(unsigned idx) const
unsigned getNumInequalities() const
bool isEq(unsigned idx) const
Returns true if the idx^th constraint is an equality, false if it is an inequality.
ArrayRef< bool > getEqFlags() const
Returns the equality bits, which specify whether each of the constraints is an equality or inequality...
unsigned getNumSymbols() const
MLIRContext is the top-level object for a collection of MLIR operations.
Definition MLIRContext.h:63
AttrTypeReplacer.
Include the generated interface declarations.
llvm::function_ref< Fn > function_ref
Definition LLVM.h:152