MLIR  20.0.0git
Public Member Functions | Static Public Member Functions | List of all members
mlir::presburger::IntMatrix Class Reference

#include "mlir/Analysis/Presburger/Matrix.h"

+ Inheritance diagram for mlir::presburger::IntMatrix:

Public Member Functions

 IntMatrix (unsigned rows, unsigned columns, unsigned reservedRows=0, unsigned reservedColumns=0)
 
 IntMatrix (Matrix< DynamicAPInt > m)
 
std::pair< IntMatrix, IntMatrixcomputeHermiteNormalForm () const
 Given the current matrix M, returns the matrices H, U such that H is the column hermite normal form of M, i.e. More...
 
DynamicAPInt normalizeRow (unsigned row, unsigned nCols)
 Divide the first nCols of the specified row by their GCD. More...
 
DynamicAPInt normalizeRow (unsigned row)
 Divide the columns of the specified row by their GCD. More...
 
DynamicAPInt determinant (IntMatrix *inverse=nullptr) const
 
- Public Member Functions inherited from mlir::presburger::Matrix< DynamicAPInt >
 Matrix ()=delete
 
 Matrix (unsigned rows, unsigned columns, unsigned reservedRows=0, unsigned reservedColumns=0)
 Construct a matrix with the specified number of rows and columns. More...
 
DynamicAPInt & at (unsigned row, unsigned column)
 Access the element at the specified row and column. More...
 
DynamicAPInt at (unsigned row, unsigned column) const
 
DynamicAPInt & operator() (unsigned row, unsigned column)
 
DynamicAPInt operator() (unsigned row, unsigned column) const
 
bool operator== (const Matrix< DynamicAPInt > &m) const
 We cannot use the default implementation of operator== as it compares fields like reservedColumns etc., which are not part of the data. More...
 
void swapColumns (unsigned column, unsigned otherColumn)
 Swap the given columns. More...
 
void swapRows (unsigned row, unsigned otherRow)
 Swap the given rows. More...
 
unsigned getNumRows () const
 
unsigned getNumColumns () const
 
unsigned getNumReservedRows () const
 Return the maximum number of rows/columns that can be added without incurring a reallocation. More...
 
unsigned getNumReservedColumns () const
 
void reserveRows (unsigned rows)
 Reserve enough space to resize to the specified number of rows without reallocations. More...
 
MutableArrayRef< DynamicAPInt > getRow (unsigned row)
 Get a [Mutable]ArrayRef corresponding to the specified row. More...
 
ArrayRef< DynamicAPInt > getRow (unsigned row) const
 
void setRow (unsigned row, ArrayRef< DynamicAPInt > elems)
 Set the specified row to elems. More...
 
void insertColumns (unsigned pos, unsigned count)
 Insert columns having positions pos, pos + 1, ... More...
 
void insertColumn (unsigned pos)
 
void insertRows (unsigned pos, unsigned count)
 Insert rows having positions pos, pos + 1, ... More...
 
void insertRow (unsigned pos)
 
void removeColumns (unsigned pos, unsigned count)
 Remove the columns having positions pos, pos + 1, ... More...
 
void removeColumn (unsigned pos)
 
void removeRows (unsigned pos, unsigned count)
 Remove the rows having positions pos, pos + 1, ... More...
 
void removeRow (unsigned pos)
 
void copyRow (unsigned sourceRow, unsigned targetRow)
 
void fillRow (unsigned row, const DynamicAPInt &value)
 
void fillRow (unsigned row, int64_t value)
 
void addToRow (unsigned sourceRow, unsigned targetRow, const DynamicAPInt &scale)
 Add scale multiples of the source row to the target row. More...
 
void addToRow (unsigned sourceRow, unsigned targetRow, int64_t scale)
 
void addToRow (unsigned row, ArrayRef< DynamicAPInt > rowVec, const DynamicAPInt &scale)
 Add scale multiples of the rowVec row to the specified row. More...
 
void scaleRow (unsigned row, const DynamicAPInt &scale)
 Multiply the specified row by a factor of scale. More...
 
void addToColumn (unsigned sourceColumn, unsigned targetColumn, const DynamicAPInt &scale)
 Add scale multiples of the source column to the target column. More...
 
void addToColumn (unsigned sourceColumn, unsigned targetColumn, int64_t scale)
 
void negateColumn (unsigned column)
 Negate the specified column. More...
 
void negateRow (unsigned row)
 Negate the specified row. More...
 
void negateMatrix ()
 Negate the entire matrix. More...
 
SmallVector< DynamicAPInt, 8 > preMultiplyWithRow (ArrayRef< DynamicAPInt > rowVec) const
 The given vector is interpreted as a row vector v. More...
 
SmallVector< DynamicAPInt, 8 > postMultiplyWithColumn (ArrayRef< DynamicAPInt > colVec) const
 The given vector is interpreted as a column vector v. More...
 
void resize (unsigned newNRows, unsigned newNColumns)
 Resize the matrix to the specified dimensions. More...
 
void resizeHorizontally (unsigned newNColumns)
 
void resizeVertically (unsigned newNRows)
 
unsigned appendExtraRow ()
 Add an extra row at the bottom of the matrix and return its position. More...
 
unsigned appendExtraRow (ArrayRef< DynamicAPInt > elems)
 Same as above, but copy the given elements into the row. More...
 
Matrix< DynamicAPInt > transpose () const
 
Matrix< DynamicAPInt > getSubMatrix (unsigned fromRow, unsigned toRow, unsigned fromColumn, unsigned toColumn) const
 
std::pair< Matrix< DynamicAPInt >, Matrix< DynamicAPInt > > splitByBitset (ArrayRef< int > indicator)
 Split the rows of a matrix into two matrices according to which bits are 1 and which are 0 in a given bitset. More...
 
void print (raw_ostream &os) const
 Print the matrix. More...
 
void dump () const
 
bool hasConsistentState () const
 Return whether the Matrix is in a consistent state with all its invariants satisfied. More...
 
void moveColumns (unsigned srcPos, unsigned num, unsigned dstPos)
 Move the columns in the source range [srcPos, srcPos + num) to the specified destination [dstPos, dstPos + num), while moving the columns adjacent to the source range to the left/right of the shifted columns. More...
 

Static Public Member Functions

static IntMatrix identity (unsigned dimension)
 Return the identity matrix of the specified dimension. More...
 
- Static Public Member Functions inherited from mlir::presburger::Matrix< DynamicAPInt >
static Matrix identity (unsigned dimension)
 Return the identity matrix of the specified dimension. More...
 

Additional Inherited Members

- Protected Attributes inherited from mlir::presburger::Matrix< DynamicAPInt >
unsigned nRows
 The current number of rows, columns, and reserved columns. More...
 
unsigned nColumns
 
unsigned nReservedColumns
 
SmallVector< DynamicAPInt, 16 > data
 Stores the data. More...
 

Detailed Description

Definition at line 254 of file Matrix.h.

Constructor & Destructor Documentation

◆ IntMatrix() [1/2]

mlir::presburger::IntMatrix::IntMatrix ( unsigned  rows,
unsigned  columns,
unsigned  reservedRows = 0,
unsigned  reservedColumns = 0 
)
inline

Definition at line 256 of file Matrix.h.

◆ IntMatrix() [2/2]

mlir::presburger::IntMatrix::IntMatrix ( Matrix< DynamicAPInt >  m)
inline

Definition at line 260 of file Matrix.h.

Member Function Documentation

◆ computeHermiteNormalForm()

std::pair< IntMatrix, IntMatrix > IntMatrix::computeHermiteNormalForm ( ) const

Given the current matrix M, returns the matrices H, U such that H is the column hermite normal form of M, i.e.

H = M * U, where U is unimodular and the matrix H has the following restrictions:

  • H is lower triangular.
  • The leading coefficient (the first non-zero entry from the top, called the pivot) of a non-zero column is always strictly below of the leading coefficient of the column before it; moreover, it is positive.
  • The elements to the right of the pivots are zero and the elements to the left of the pivots are nonnegative and strictly smaller than the pivot.

Definition at line 463 of file Matrix.cpp.

References mlir::presburger::Matrix< T >::getNumColumns(), mlir::presburger::Matrix< T >::getNumRows(), identity(), modEntryColumnOperation(), mlir::presburger::Matrix< T >::negateColumn(), and mlir::presburger::Matrix< T >::swapColumns().

◆ determinant()

DynamicAPInt IntMatrix::determinant ( IntMatrix inverse = nullptr) const

◆ identity()

IntMatrix IntMatrix::identity ( unsigned  dimension)
static

Return the identity matrix of the specified dimension.

Definition at line 456 of file Matrix.cpp.

Referenced by computeHermiteNormalForm(), and mlir::presburger::Simplex::findIntegerSample().

◆ normalizeRow() [1/2]

DynamicAPInt IntMatrix::normalizeRow ( unsigned  row)

Divide the columns of the specified row by their GCD.

Returns the GCD of the columns of the specified row.

Definition at line 553 of file Matrix.cpp.

References mlir::presburger::Matrix< DynamicAPInt >::getNumColumns(), and normalizeRow().

◆ normalizeRow() [2/2]

DynamicAPInt IntMatrix::normalizeRow ( unsigned  row,
unsigned  nCols 
)

The documentation for this class was generated from the following files: