MLIR
17.0.0git
|
Class storing division representation of local variables of a constraint system. More...
#include "mlir/Analysis/Presburger/Utils.h"
Public Member Functions | |
DivisionRepr (unsigned numVars, unsigned numDivs) | |
DivisionRepr (unsigned numVars) | |
unsigned | getNumVars () const |
unsigned | getNumDivs () const |
unsigned | getNumNonDivs () const |
unsigned | getDivOffset () const |
bool | hasRepr (unsigned i) const |
bool | hasAllReprs () const |
void | clearRepr (unsigned i) |
MutableArrayRef< MPInt > | getDividend (unsigned i) |
ArrayRef< MPInt > | getDividend (unsigned i) const |
SmallVector< std::optional< MPInt >, 4 > | divValuesAt (ArrayRef< MPInt > point) const |
MPInt & | getDenom (unsigned i) |
MPInt | getDenom (unsigned i) const |
ArrayRef< MPInt > | getDenoms () const |
void | setDiv (unsigned i, ArrayRef< MPInt > dividend, const MPInt &divisor) |
void | normalizeDivs () |
void | insertDiv (unsigned pos, ArrayRef< MPInt > dividend, const MPInt &divisor) |
void | insertDiv (unsigned pos, unsigned num=1) |
void | removeDuplicateDivs (llvm::function_ref< bool(unsigned i, unsigned j)> merge) |
Removes duplicate divisions. More... | |
void | print (raw_ostream &os) const |
void | dump () const |
Class storing division representation of local variables of a constraint system.
The coefficients of the dividends are stored in order: [nonLocalVars, localVars, constant]. Each local variable may or may not have a representation. If the local does not have a representation, the dividend of the division has no meaning and the denominator is zero. If it has a representation, the denominator will be positive.
The i^th division here, represents the division representation of the variable at position divOffset + i
in the constraint system.
|
inline |
|
inline |
|
inline |
Definition at line 137 of file Utils.h.
Referenced by mlir::presburger::IntegerRelation::getLocalReprs().
SmallVector< std::optional< MPInt >, 4 > DivisionRepr::divValuesAt | ( | ArrayRef< MPInt > | point | ) | const |
Definition at line 382 of file Utils.cpp.
References mlir::presburger::floorDiv(), getDividend(), getDivOffset(), getNumDivs(), and getNumNonDivs().
Referenced by mlir::presburger::MultiAffineFunction::valueAt().
|
inline |
Definition at line 149 of file Utils.h.
Referenced by addDivisionConstraints(), mlir::presburger::MultiAffineFunction::getLexSet(), mlir::presburger::IntegerRelation::getLocalReprs(), mlir::presburger::MultiAffineFunction::mergeDivs(), mlir::presburger::mergeLocalVars(), and normalizeDivs().
|
inline |
|
inline |
Definition at line 140 of file Utils.h.
References mlir::presburger::Matrix::getRow().
Referenced by addDivisionConstraints(), divValuesAt(), mlir::presburger::MultiAffineFunction::getLexSet(), mlir::presburger::IntegerRelation::getLocalReprs(), mlir::presburger::MultiAffineFunction::mergeDivs(), mlir::presburger::mergeLocalVars(), and normalizeDivs().
Definition at line 141 of file Utils.h.
References mlir::presburger::Matrix::getRow().
|
inline |
Definition at line 129 of file Utils.h.
References getNumDivs(), and getNumVars().
Referenced by addDivisionConstraints(), divValuesAt(), mlir::presburger::MultiAffineFunction::getLexSet(), insertDiv(), mlir::presburger::MultiAffineFunction::mergeDivs(), and removeDuplicateDivs().
|
inline |
Definition at line 126 of file Utils.h.
References mlir::presburger::Matrix::getNumRows().
Referenced by addDivisionConstraints(), divValuesAt(), getDivOffset(), mlir::getMultiAffineFunctionFromMap(), getNumNonDivs(), insertDiv(), mlir::presburger::MultiAffineFunction::mergeDivs(), mlir::presburger::mergeLocalVars(), normalizeDivs(), and removeDuplicateDivs().
|
inline |
Definition at line 127 of file Utils.h.
References getNumDivs(), and getNumVars().
Referenced by divValuesAt().
|
inline |
Definition at line 125 of file Utils.h.
References mlir::presburger::Matrix::getNumColumns().
Referenced by addDivisionConstraints(), getDivOffset(), getNumNonDivs(), insertDiv(), and mlir::presburger::MultiAffineFunction::mergeDivs().
|
inline |
Definition at line 134 of file Utils.h.
Referenced by addDivisionConstraints(), mlir::getMultiAffineFunctionFromMap(), and mlir::presburger::IntegerRelation::hasOnlyDivLocals().
|
inline |
Definition at line 484 of file Utils.cpp.
References mlir::presburger::Matrix::appendExtraRow(), getDivOffset(), getNumDivs(), getNumVars(), and mlir::presburger::Matrix::insertColumn().
Referenced by mlir::presburger::MultiAffineFunction::mergeDivs().
void DivisionRepr::insertDiv | ( | unsigned | pos, |
unsigned | num = 1 |
||
) |
Definition at line 494 of file Utils.cpp.
References getDivOffset(), getNumDivs(), mlir::presburger::Matrix::insertColumns(), and mlir::presburger::Matrix::insertRows().
void DivisionRepr::normalizeDivs | ( | ) |
Definition at line 476 of file Utils.cpp.
References getDenom(), getDividend(), getNumDivs(), and mlir::presburger::normalizeDiv().
Referenced by removeDuplicateDivs().
void DivisionRepr::print | ( | raw_ostream & | os | ) | const |
Definition at line 501 of file Utils.cpp.
References mlir::presburger::Matrix::print().
Referenced by dump(), and mlir::presburger::MultiAffineFunction::print().
void DivisionRepr::removeDuplicateDivs | ( | llvm::function_ref< bool(unsigned i, unsigned j)> | merge | ) |
Removes duplicate divisions.
On every possible duplicate division found, merge(i, j)
, where i
, j
are current index of the duplicate divisions, is called and division at index j
is merged into division at index i
. If merge(i, j)
returns true
, the divisions are merged i.e. j^th
division gets eliminated and it's each instance is replaced by i^th
division. If it returns false
, the divisions are not merged. merge
can also do side effects, For example it can merge the local variables in IntegerRelation.
Definition at line 430 of file Utils.cpp.
References mlir::presburger::Matrix::addToColumn(), getDivOffset(), getNumDivs(), mlir::presburger::Matrix::getRow(), normalizeDivs(), mlir::presburger::Matrix::removeColumn(), and mlir::presburger::Matrix::removeRow().
Referenced by mlir::presburger::MultiAffineFunction::mergeDivs(), mlir::presburger::mergeLocalVars(), and mlir::presburger::IntegerRelation::removeDuplicateDivs().
|
inline |
Definition at line 154 of file Utils.h.
References mlir::presburger::Matrix::setRow().
Referenced by mlir::presburger::MultiAffineFunction::mergeDivs(), and mlir::presburger::mergeLocalVars().