llvm-project/mlir/lib/IR/IntegerSet.cpp
Nicolas Vasilache b04f881dcb [MLIR] IntegerSet value type
This CL applies the same pattern as AffineMap to IntegerSet: a simple struct
that acts as the storage is allocated in the bump pointer. The IntegerSet is
immutable and accessed everywhere by value.

Note that unlike AffineMap, it is not possible to remove the MLIRContext
parameter when constructing an IntegerSet for now. One possible way to achieve
this would be to add an enum to distinguish between the mathematically empty
set, the universe set and other sets.

This is left for future discussion.

PiperOrigin-RevId: 216545361
2019-03-29 13:27:19 -07:00

47 lines
1.7 KiB
C++

//===- IntegerSet.cpp - MLIR Integer Set class ----------------------------===//
//
// Copyright 2019 The MLIR Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =============================================================================
#include "mlir/IR/IntegerSet.h"
#include "IntegerSetDetail.h"
#include "mlir/IR/AffineExpr.h"
using namespace mlir;
using namespace mlir::detail;
unsigned IntegerSet::getNumDims() const { return set->dimCount; }
unsigned IntegerSet::getNumSymbols() const { return set->symbolCount; }
unsigned IntegerSet::getNumOperands() const {
return set->dimCount + set->symbolCount;
}
unsigned IntegerSet::getNumConstraints() const { return set->numConstraints; }
ArrayRef<AffineExpr> IntegerSet::getConstraints() const {
return set->constraints;
}
AffineExpr IntegerSet::getConstraint(unsigned idx) const {
return getConstraints()[idx];
}
/// Returns the equality bits, which specify whether each of the constraints
/// is an equality or inequality.
ArrayRef<bool> IntegerSet::getEqFlags() const { return set->eqFlags; }
/// Returns true if the idx^th constraint is an equality, false if it is an
/// inequality.
bool IntegerSet::isEq(unsigned idx) const { return getEqFlags()[idx]; }